导出到 Prometheus 和 Grafana
了解如何将指标导出到 Prometheus 并在 Grafana 中进行可视化
本指南将向您展示如何将 OpenTelemetry 指标导出到 Prometheus 并在 Grafana 中进行可视化。
先决条件
- 在您的计算机上安装了 .NET SDK
- 下载了 Prometheus(我们将介绍安装过程)
- 下载了 Grafana(我们将介绍安装过程)
使用 OTLP 导出创建 .NET 应用程序
首先,请按照 控制台入门 指南了解指标收集的基础知识。
创建一个新的控制台应用程序
dotnet new console --output getting-started-prometheus-grafana
cd getting-started-prometheus-grafana
安装 OpenTelemetry OTLP Exporter 包
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
使用以下代码更新 Program.cs 文件
using System;
using System.Diagnostics.Metrics;
using System.Threading;
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Metrics;
// Define a meter
var myMeter = new Meter("MyCompany.MyProduct.MyLibrary", "1.0");
// Create a counter instrument
var myFruitCounter = myMeter.CreateCounter<long>("MyFruitCounter");
// Configure the OpenTelemetry MeterProvider with OTLP export
using var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MyCompany.MyProduct.MyLibrary")
.AddOtlpExporter((exporterOptions, metricReaderOptions) =>
{
exporterOptions.Endpoint = new Uri("https://:9090/api/v1/otlp/v1/metrics");
exporterOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
})
.Build();
Console.WriteLine("Press any key to exit");
// Keep generating metrics until user presses a key
while (!Console.KeyAvailable)
{
myFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
myFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
myFruitCounter.Add(1, new("name", "lemon"), new("color", "yellow"));
myFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
myFruitCounter.Add(5, new("name", "apple"), new("color", "red"));
myFruitCounter.Add(4, new("name", "lemon"), new("color", "yellow"));
Thread.Sleep(300);
}
// Dispose meter provider before the application ends.
// This will flush the remaining metrics and shutdown the metrics pipeline.
meterProvider.Dispose();
运行此应用程序时,它将尝试将指标导出到 Prometheus,地址为 https://:9090/api/v1/otlp/v1/metrics。一开始,这将失败,因为我们还没有设置 Prometheus,我们将在下一步进行。
设置 Prometheus
Prometheus 是一个开源的监控和告警系统,可以抓取和存储指标。
安装和运行 Prometheus
- 从 官方网站 下载 Prometheus
- 将其解压到您机器上的某个位置
- 运行 Prometheus 并启用 OTLP 接收器
./prometheus --web.enable-otlp-receiver
注意
--web.enable-otlp-receiver 标志使 Prometheus 能够通过 OpenTelemetry 协议 (OTLP) 接收指标。
在 Prometheus 中查看指标
- 运行您的 .NET 应用程序(现在应该可以成功将指标导出到 Prometheus)
- 打开 Web 浏览器并导航到 https://:9090/graph
- 在表达式栏中,输入
MyFruitCounter_total并单击“执行”
您应该会看到一个图表,显示每个水果名称和颜色组合的计数器值的增加情况。
设置 Grafana
Grafana 提供了比 Prometheus 的基本 UI 更强大的可视化功能。
安装和运行 Grafana
- 按照 官方说明 安装 Grafana
- 启动 Grafana 服务器(命令因操作系统而异)
- 在浏览器中导航到 https://:3000
- 使用默认凭据(用户名:
admin,密码:admin)登录,并在提示时设置新密码
将 Prometheus 配置为数据源
- 在 Grafana 中,将鼠标悬停在左侧边栏的“配置”(齿轮)图标上,然后单击“数据源”
- 单击“添加数据源”
- 选择“Prometheus”
- 将 URL 设置为
https://:9090 - 单击底部的“保存并测试”
创建仪表板
- 单击左侧边栏的“+”图标,然后选择“仪表板”
- 单击“添加新面板”
- 在查询编辑器中,输入 PromQL 查询,例如
rate(MyFruitCounter_total[5m]),以查看过去 5 分钟内每秒的增长率 - 单击“应用”将面板添加到您的仪表板
- 通过单击右上角的保存图标来保存您的仪表板
理解指标流
flowchart LR
App[.NET App] --> Exporter[OTLP Exporter]
Exporter --> Prometheus[Prometheus Server]
Prometheus --> Grafana[Grafana Dashboard]- 您的 .NET 应用程序使用 OpenTelemetry 仪器收集指标
- OTLP Exporter 使用 OTLP 协议将这些指标发送到 Prometheus
- Prometheus 将指标存储在其时序数据库中
- Grafana 查询 Prometheus 并在仪表板中可视化指标