本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Grafana TempoとLokiの連携で進化するログ解析とトレーシング」を再編集したものです。
この記事はOpentelemetryシリーズの続編です。
Opentelemetryを楽に導入するAutomatic Instrumentation
今回はGrafana TempoをLokiと連携させTrace to Logsという機能を実装していきます。
構成図
前回の構成にGrafana Lokiを追加しました。Lokiはざっくりいうとログデータを管理するシステムです。Promtailがログデータを収集しLokiに送信します。
バージョン
・grafana:6.58.6
・Loki:5.5.3
・Tempo:1.6.0
前準備
以下の準備が必要です。様々なドキュメントがありますがこの部分の解説が無く、実装に手間取りました。
・アプリケーションにTraceIDを出力させること
・そのTraceIDがOpentelemetryCollectorが収集するTraceIDと同一であること
そもそもTraceIDって何?についてはこちらの記事が大変わかりやすかったです。
まずはOpentelemetryCollectorが収集するTraceIDについて確認します。
以前のインストルメンテーションの記事で、下記のコードでアプリケーションが出力する観測データの設定を書いていました。
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
namespace: default
name: instrumentation
spec:
exporter:
endpoint: http://otel-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: '0.25'
注目するのはpropagatorsの部分です。こちらはデフォルトの設定をそのまま使っているのですが、公式ドキュメントによるとW3CTraceContextが使われています。
つまりアプリケーションにW3CTraceContextのログを吐かせればいいわけです。
ASP.NET Coreで実装する場合は、System.DiagnosticsクラスのActivity.CurrentでTraceIDを取得することができます。
Trace to Logの実装
前準備も済んだのでTempoとLokiの連携を実装していきます。基本的にはGrafanaの設定になります。
GrafanaTempoのデータソースの設定を開き、Trace to logsの項目に行きます。
データソースにLokiを設定します。
Tagsはある程度自由に設定できるのですが、今回はコンテナ名で検索する設定にしました。
Filter by trace IDをオンにします。これによってトレースIDでさらに絞り込むことができます。
すると下記のようなクエリが作られます。
{container="コンテナ名"} |="トレースID"
Tempoにこのようなボタンが出現すればOKです。
注意点として、DB通信のトレースなどはアプリケーションログに出力されないのでLokiでNotFoundが表示されます。
ログからトレースへの遷移
おまけでLokiのログからトレースを開く方法を紹介します。
実装するにはLokiで派生フィールドを設定する必要があります。
GrafanaLokiのデータソースの設定を開き、Derived fieldsの項目に行きます。
NameとRegexの「TraceID」という文字列は出力されるログのフォーマットに合わせる必要があります。リンクにTempoを設定することでログからトレースに飛ぶことができます。
Lokiにこのようなボタンが出力すればOKです。
最後に
今回はGrafanaTempoの利点であるLokiとの連携について解説しました。最近業務でGrafanaを触ることが多いのですが、かっこいいダッシュボードを作るのにハマっていたりします。また、GrafanaTempoはそこそこ新しいので高スパンでアップデートされているため日々アンテナを張っていければと思います。こちらの記事が実装の助けになれば幸いです。
秋山 直輝/FIXER
HAL東京を卒業し、2023年度入社しました。朝食は元気の源
本記事はアフィリエイトプログラムによる収益を得ている場合があります


この連載の記事
-
TECH
機械科卒・ITエンジニア就職から一年、やって良かったこと -
TECH
Chrome DevTools MCPとは? Claude Codeとの連携でWebアプリ開発体験が劇的に変わった -
TECH
MobSF(Mobile Security Framework)でできること、動かない理由 -
TECH
3週間の自動テストが半日に! Playwrightの使い方の基本 -
TECH
Next.jsで静的テスト環境を構築し、GitHub Actionsで自動化してみた -
TECH
クイズ:正規表現で「0~255」のすべてにマッチするのはどれ? -
TECH
ミニPCサーバーにFluxを導入、GitOpsで自動デプロイする方法 -
TECH
アプリ開発の手戻りを防ぐ 「入力チェック(バリデーション)」の設計方法 -
TECH
Webアプリを使いやすく! 「入力チェック(バリデーション)」の正しい考え方 -
TECH
Androidの16KBページサイズ対応 Flutter開発者向けチェックリスト -
TECH
「SOSの出し方を知ろう」 新卒入社から1年、学んだことを振り返る - この連載の一覧へ







