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 エクスポーターパッケージをインストールします。
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;
// メーターを定義する
var myMeter = new Meter("MyCompany.MyProduct.MyLibrary", "1.0");
// カウンター計装を作成する
var myFruitCounter = myMeter.CreateCounter<long>("MyFruitCounter");
// OTLP エクスポート付きで OpenTelemetry MeterProvider を設定する
var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MyCompany.MyProduct.MyLibrary")
.AddOtlpExporter((exporterOptions, metricReaderOptions) =>
{
exporterOptions.Endpoint = new Uri("http://localhost:9090/api/v1/otlp/v1/metrics");
exporterOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = 1000;
})
.Build();
Console.WriteLine("Press any key to exit");
// ユーザーがキーを押すまでメトリクスを生成し続ける
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);
}
// アプリケーション終了前にメータープロバイダーを破棄する。
// これにより、残りのメトリクスがフラッシュされ、メトリクスパイプラインがシャットダウンされる。
meterProvider.Dispose();
このアプリケーションを実行すると、http://localhost:9090/api/v1/otlp/v1/metrics で Prometheus にメトリクスをエクスポートしようとします。
まだ Prometheus をセットアップしていないため、最初は失敗します。
次のステップで Prometheus をセットアップします。
Prometheus のセットアップ
Prometheus はメトリクスのスクレイプと保存が可能な、オープンソースの監視およびアラートシステムです。
Prometheus のインストールと実行
- 公式サイトから Prometheus をダウンロードします
- マシン上の任意の場所に展開します
- OTLP レシーバーを有効にして Prometheus を実行します。
./prometheus --web.enable-otlp-receiver
--web.enable-otlp-receiver フラグを指定すると、Prometheus が OpenTelemetry Protocol(OTLP)を通じてメトリクスを受信できるようになります。
Prometheus でのメトリクスの確認
- .NET アプリケーションを実行します(Prometheus へのメトリクスのエクスポートが成功するはずです)
- ウェブブラウザーを開き、http://localhost:9090/graph に移動します
- 式バーに
MyFruitCounter_totalと入力し、Execute をクリックします
フルーツ名と色の組み合わせごとに、カウンター値が増加するグラフが表示されるはずです。
Grafana のセットアップ
Grafana は基本的な Prometheus UI よりも強力な可視化機能を提供します。
Grafana のインストールと実行
- 公式の手順に従って Grafana をインストールします
- Grafana サーバーを起動します(コマンドは OS によって異なります)
- ブラウザーで http://localhost:3000 に移動します
- デフォルトの認証情報(ユーザー名:
admin、パスワード:admin)でログインし、プロンプトが表示されたら新しいパスワードを設定します
データソースとしての Prometheus の設定
- Grafana で左サイドバーの Configuration(歯車)アイコンにホバーし、「Data sources」をクリックします
- 「Add data source」をクリックします
- 「Prometheus」を選択します
- URL を
http://localhost:9090に設定します - 下部の「Save & Test」をクリックします
ダッシュボードの作成
- 左サイドバーの「+」アイコンをクリックし、「Dashboard」を選択します
- 「Add new panel」をクリックします
- クエリエディターで
rate(MyFruitCounter_total[5m])のような PromQL クエリを入力すると、過去5分間の毎秒の増加率が表示されます - 「Apply」をクリックしてダッシュボードにパネルを追加します
- 右上の保存アイコンをクリックしてダッシュボードを保存します
メトリクスフローの理解
flowchart LR
App[.NET アプリ] --> Exporter[OTLP エクスポーター]
Exporter --> Prometheus[Prometheus サーバー]
Prometheus --> Grafana[Grafana ダッシュボード]- .NET アプリケーションが OpenTelemetry の計装を使用してメトリクスを収集します
- OTLP エクスポーターが OTLP プロトコルを使用してこれらのメトリクスを Prometheus に送信します
- Prometheus がメトリクスを時系列データベースに保存します
- Grafana が Prometheus にクエリを実行し、ダッシュボードでメトリクスを可視化します
さらに学ぶ
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!