OpenTelemetry×Grafana Tempo
2023-08-28
azblob://2023/08/25/eyecatch/2023-08-25-grafanatempo-000.jpg

Grafana Tempoとは

Grafana Tempoとはオープンソースの分散トレーシングバックエンドです。特徴として、Grafana、Prometheus、Lokiと相性がいい点が挙げられます。また、OpenTelemetryのプロトコルを取り込むことができます。

従来のトレーシングツールはElasticsearchやCassandraのようなデータベースを必要としスケールアップや管理が難しい点がありました。対してTempoは依存関係がオブジェクトストレージのみとなっており、コスト効率が高くなっています。

アーキテクチャ

引用元:Tempo architecture | Grafana Tempo documentation

Tempoは上記のコンポーネントで構成されています。主要なコンポーネントをいくつか紹介します。

distributor

様々なフォーマットのスパンを受け取り、ingesterにルーティングする。スパンとはトレースを構成するリクエスト内の各処理の情報。

Metrics generator

オプションの機能。トレースからメトリクスを導出し、Prometheusのようなメトリクスストレージに書き込む。

後で紹介するServiceGraphという機能に必要になります。

ServiceGraph

様々なサービス間の相互関係を視覚的に表す機能です。分散システムの構造、コンポーネント間の接続や依存関係を理解するのに役立ちます。Azure Application Mapに類似してますね。

引用元:Service graph view | Grafana Tempo documentation

エラー率やレイテンシなどの関連データを表示できます。

実装

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自体のストレージの設定が必要になります。

また自分の失敗談としてmetricsGeneratormetrics_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を実装する際日本語のドキュメントがほぼない状態だったのでなら自分が書くかと思った次第です。少しでも導入の手助けになれば幸いです。最後まで読んでいただきありがとうございます。