このページでは、GoのアプリケーションからトレースをMackerelに送信する方法を解説します。
概要
MackerelはOpenTelemetryの仕組み(計装)を利用してトレースを取得します。OpenTelemetryに対応したトレースはさまざまな方法で取得できますが、今回はゼロコード計装と呼ばれる、アプリケーションの実装を変更せずにトレースを送信する方法を解説します。
📝 補足
Goのゼロコード計装は、起動中のアプリケーションとは別にeBPFを利用する自動計装エージェントを起動し、トレースといったテレメトリーデータを取得できるようにすることで実現されています。
詳しくは opentelemetry-go-instrumentation/docs/how-it-works.md をご確認ください。
動作要件
OpenTelemetryの動作要件として、動作環境のLinux Kernelが指定されたバージョン以上である必要があります。
- Linux Kernel 4.4以上
導入方法
アプリケーションからMackerelへトレースを送信するために、以下をおこないます。
- 自動計装エージェントの用意
- アプリケーションを起動
- 自動計装エージェントを起動
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に直接送信する場合は
${MACKEREL_APIKEY}はMackerelのAPIキーの指定です。APIキーの一覧から、Write権限のあるAPIキーを自動計装エージェントが動作するシステム内の環境変数に定義してください。- 環境変数ではなくAPIキーを直接記述しても動作します。
OTEL_TRACES_EXPORTER=consoleを追加付与することで、トレースが標準出力に出力されます。
トレースを確認する
送信されたトレースは以下の手順で確認できます。
- メニューの「APM」を選択
- サービス名を選択

- 「トレース」タブを選択

- トレース一覧からトレースを選択すると詳細が確認できます

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