Grafana Tempoとは
Grafana Tempoとはオープンソースの分散トレーシングバックエンドです。特徴として、Grafana、Prometheus、Lokiと相性がいい点が挙げられます。また、OpenTelemetryのプロトコルを取り込むことができます。
従来のトレーシングツールはElasticsearchやCassandraのようなデータベースを必要としスケールアップや管理が難しい点がありました。対してTempoは依存関係がオブジェクトストレージのみとなっており、コスト効率が高くなっています。
アーキテクチャ
Tempoは上記のコンポーネントで構成されています。主要なコンポーネントをいくつか紹介します。
distributor
様々なフォーマットのスパンを受け取り、ingesterにルーティングする。スパンとはトレースを構成するリクエスト内の各処理の情報。
Metrics generator
オプションの機能。トレースからメトリクスを導出し、Prometheusのようなメトリクスストレージに書き込む。
後で紹介するServiceGraphという機能に必要になります。
ServiceGraph
様々なサービス間の相互関係を視覚的に表す機能です。分散システムの構造、コンポーネント間の接続や依存関係を理解するのに役立ちます。Azure Application Mapに類似してますね。
エラー率やレイテンシなどの関連データを表示できます。
実装
Grafana Tempoのインストール
helm upgrade --install tempo grafana/tempo-distributed -f tempo_values.yml
tempo_values.yml
traces:
otlp:
http:
enabled: true
grpc:
enabled: true
distributor:
config:
log_received_spans:
enabled: true
metricsGenerator:
enabled: true
config:
storage:
path: /var/tempo/wal
remote_write:
- url: http://prometheus-server/api/v1/write
remote_write_flush_deadline: 1m
global_overrides:
metrics_generator_processors:
- 'service-graphs'
prometheusへリモート書き込みする設定が必要です。
また上記のほかにTempo自体のストレージの設定が必要になります。
また自分の失敗談としてmetricsGeneratorをmetrics_generatorと記述していてずっと動かなかったです。。
こちらのドキュメントを参考にしていたのですが、失敗の原因にもなった重要な点としてHelmのチャートのvalueファイルとkuberetesリソースのYAMLファイルでプロパティの書き方が違うという点があります。大変勉強になりました。
Opentelemetry Collectorを修正
kubectl apply -f collector.yml
collector.yml
exporters:
otlp:
endpoint: http://tempo-distributor:4317
tls:
insecure: true
exportersにdistributorへエクスポートする設定を追記します。
Prometheusの設定追記
Prometheusのvalueファイルに下記を追記してRemoteWriteを有効化します。
server:
extraFlags:
- web.enable-remote-write-receiver
- web.enable-lifecycle
Grafanaで表示
Tempoのデータソースの設定でServiceGraphの欄にMetrics generatorの書き込み先にしているPrometheusを設定します。
ServiceGraph表示
ServiceGraphを選択しRun queryを押すとService Graphが表示されるはずです。
まとめ
今回、Grafana Tempoを実装する際日本語のドキュメントがほぼない状態だったのでなら自分が書くかと思った次第です。少しでも導入の手助けになれば幸いです。最後まで読んでいただきありがとうございます。