GoのアプリケーションからMackerelにトレースを送信する

このページでは、GoのアプリケーションからトレースをMackerelに送信する方法を解説します。

概要

MackerelはOpenTelemetryの仕組み(計装)を利用してトレースを取得します。OpenTelemetryに対応したトレースはさまざまな方法で取得できますが、今回はゼロコード計装と呼ばれる、アプリケーションの実装を変更せずにトレースを送信する方法を解説します。

📝 補足

Goのゼロコード計装は、起動中のアプリケーションとは別にeBPFを利用する自動計装エージェントを起動し、トレースといったテレメトリーデータを取得できるようにすることで実現されています。

詳しくは opentelemetry-go-instrumentation/docs/how-it-works.md をご確認ください。

動作要件

OpenTelemetryの動作要件として、動作環境のLinux Kernelが指定されたバージョン以上である必要があります。

  • Linux Kernel 4.4以上

導入方法

アプリケーションからMackerelへトレースを送信するために、以下をおこないます。

  1. 自動計装エージェントの用意
  2. アプリケーションを起動
  3. 自動計装エージェントを起動

1. 自動計装エージェントの用意

open-telemetry/opentelemetry-go-instrumentation: OpenTelemetry Auto Instrumentation using eBPFリポジトリをクローンし、自動計装エージェントをビルドします。

git clone https://github.com/open-telemetry/opentelemetry-go-instrumentation.git
cd opentelemetry-go-instrumentation
make build

2. アプリケーションを起動

計装をおこないたいアプリケーションを通常通り起動してください。

3. 自動計装エージェントを起動

「1.」でビルドして用意した自動計装エージェントを、設定用の環境変数を指定のうえroot権限で起動します。

以下は、対象アプリケーションが /usr/local/bin/app に配置されている場合に、my-sample-app というサービス名でMackerelにトレースを送信する例です。

sudo OTEL_GO_AUTO_TARGET_EXE=/usr/local/bin/app \
     OTEL_SERVICE_NAME=my-sample-app \
     OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://otlp-vaxila.mackerelio.com/v1/traces \
     OTEL_EXPORTER_OTLP_TRACES_HEADERS="Accept=*/*,Mackerel-Api-Key=${MACKEREL_APIKEY}" \
     ./otel-go-instrumentation
  • OTEL_GO_AUTO_TARGET_EXEは計装対象とするアプリケーションのバイナリが配置されているパスを指定します。
  • OTEL_SERVICE_NAMEはトレースのサービス名(service.name属性の値)になります。
  • OTEL_EXPORTER_OTLP_TRACES_ENDPOINTはトレースの送信先の指定です。
    • Mackerelに直接送信する場合はhttps://otlp-vaxila.mackerelio.com/v1/tracesを指定します。
    • Collectorを利用して送信する場合はhttp://<Collectorのアドレス:ポート>/v1/tracesを指定します。
  • ${MACKEREL_APIKEY}はMackerelのAPIキーの指定です。APIキーの一覧から、Write権限のあるAPIキーを自動計装エージェントが動作するシステム内の環境変数に定義してください。
    • 環境変数ではなくAPIキーを直接記述しても動作します。
  • OTEL_TRACES_EXPORTER=consoleを追加付与することで、トレースが標準出力に出力されます。

トレースを確認する

送信されたトレースは以下の手順で確認できます。

  1. メニューの「APM」を選択
  2. サービス名を選択
  3. 「トレース」タブを選択
  4. トレース一覧からトレースを選択すると詳細が確認できます

以上、Goで作成されたアプリケーションにゼロコード計装をおこなって、Mackerelへトレースを投稿する方法のご紹介でした。