OpenTelemetry で IntelliJ IDEA 実行時の Span を Mackerel へ送信する


この記事は Mackerel Advent Calendar 2024 の16日目の記事です。


JetBrains の IDE が OpenTelemetry によるトレーシングに対応し、IDE の動作状況を確認できるようになっていました。普段使っている IntelliJ IDEA から Mackerel へ Span を送信できるか試してみました。

pleiades.io

ドキュメントを読んでみると、Custom Properties に OTLP のエンドポイントをセットすることで、そこに Span が送信されるようになるようです。

しかし、送信時の認証情報などを設定する方法などについては記載がありませんでした。Mackerel へ送信するためには API キーの設定が必要になるので、一旦 IntelliJ から直接送信するのは諦め、OpenTelemetry Collector に中継させることにしました。

中継用 の OpenTelemetry Collector を用意する

Collector の設定ファイルをこさえておきます。 HTTP (ポート4318) で OTLP のリクエストを受け付け、Mackerel へそのまま送信するようにしています。

 receivers:
   otlp:
     protocols:
       http:
         endpoint: "0.0.0.0:4318"
 
 processors:
   batch:
       send_batch_size: 5000
       send_batch_max_size: 5000
 
 exporters:
     otlphttp/vaxila:
     endpoint: "https://otlp-vaxila.mackerelio.com"
     headers:
       Accept: "*/*"
       "Mackerel-Api-Key": ***
 
 service:
   pipelines:
     traces:
       receivers: [otlp]
       processors: [batch]
       exporters: [otlphttp/vaxila]

作成した設定ファイルを渡しつつ、Collector を Docker で起動します。

$ docker run -v $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml -p 4318:4318 otel/opentelemetry-collector-contrib:latest

IntelliJ でエンドポイントを指定する

IntelliJ のメインメニューから Help -> Edit Custom Properties と移動するとエディタが開くので、先程起動した Collector のエンドポイントを指定して保存します。

idea.diagnostic.opentelemetry.otlp=http://127.0.0.1:4318/

設定後 IntelliJ を再起動しておきました。 これで Span が Collector を経由して送信されるはずです。

Mackerel で Span を確認する

Mackerel のコンソールにアクセスし、Span が送信されているか確認してみます。

無事送信されてそうですね。

インデックス更新に関する Span も確認できるようになっていました。

まだ Span が少ない状態なので、この状態でしばらく使い続けてみようと思います。 IDE が重たくなったタイミングなどで Mackerel を確認することで面白いものが見れるかもしれません。