みなさん OpenTelemetry は使っていますか? もしくはアプリケーションの計測などを何が知らのツールで実現されているでしょうか?
CI/CD のパフォーマンスも継続的に計測したいと思ったことはないでしょうか? 今回はそんなことが簡単にできそうなツールを見つけたので今回はその紹介をしようと思います。
otel-export-trace-action
今回利用するのは otel-export-trace-action を利用しました。
Github Actions のトレースデータを OTLP を経由してトレースデータを送信してくれる action になっています。 似たようなものとして github_actions_otel_trace というツールがあり同様に OpenTelemetry を利用しているので出力される情報としては似ているように見えました。機会があればこちらも触ってみたいと思います。
実装方法
実装方法については READMEで紹介されていてそのまま実装することよって計測可能です。 以下はサンプルですが jobs の最後で action を呼び出すことで処理を実行しています。
name: OpenTelemetry Export Trace on: push: branch: [main] jobs: build: # Run build steps otel-export-trace: if: always() name: OpenTelemetry Export Trace runs-on: ubuntu-latest needs: [build] # must run when all jobs are complete steps: - name: Export Workflow Trace uses: inception-health/otel-export-trace-action@latest with: otlpEndpoint: grpc://api.honeycomb.io:443/ otlpHeaders: ${{ secrets.OTLP_HEADERS }} githubToken: ${{ secrets.GITHUB_TOKEN }}
README の example では honeycomb へ転送してますが今回は New Relic へ転送を試みてどのように出力されるか試してみたいと思います。
New Relic への Opentelemetry 転送
New Relic への OpenTelemetry への転送方法については公式ドキュメントに記載があります。 New Relic 側で OTLP endpoint が提供されているのでそこに対してデータを転送するようにする必要があります。
US リージョンを利用するので https://otlp.nr-data.net
を選択します。
yaml を修正します
otel-export-trace: if: always() name: OpenTelemetry Export Trace runs-on: ubuntu-latest needs: [build] # must run when all jobs are complete steps: - name: Export Workflow Trace uses: inception-health/otel-export-trace-action@latest with: otlpEndpoint: ${{ secrets.OTLP_ENDPOINT }} // New Relic のエンドポイント 例) https://otlp.nr-data.net:4317 otlpHeaders: ${{ secrets.OTLP_HEADERS }} // api-key=<New Relic のライセンスキー> // 取得方法 https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/ githubToken: ${{ secrets.GITHUB_TOKEN }} runId: ${{ github.event.workflow_run.id }}
最低限これがそろっていれば利用可能です必要にあわせて attribute の付与などを行ってください。
GitHub - inception-health/otel-export-trace-action
secret への登録は GIthub のリポジトリ側の設定で可能になっています。
New Relic のライセンスキーの取得方法は以下ドキュメントをご参照ください。
これで実際に job を動かしてみて New Relic へ転送されれば成功です。 私の画面に出力された情報をお見せします。
実際に Trace 情報が出力されたので job で遅い箇所などの可視化が簡単になりそうです。 このような形でアプリケーションのだけでなく当たり前のように CI/CD も使われ始めているのでその一環として Github Actions の可視化をしてみました。
今回はトレースだけになりますので他の Metrics なども送信できそうでしたら紹介したいと思います。