Github ActionsのCIの監視をGrafanaでやってみた。
初めに
初めまして!
皆様どうもこんにちわ、こんばんわ、おはようございます。
エンジニアのenomotoです。
今回は、ovservabilityに入門する位置付けで、簡単な監視を行ってみたので、それの振り返りです。
大きな企業などでは、すでにそれぞれの企業が導入している監視ツールがあったり、はたまた導入するまでに労力が必要だったりします。
そんな方でも個人でサクッと監視ツールを導入できるような簡単な監視をやってみたいと思います。
監視する対象はアプリケーションではなく、あえてCIです。
対象読者
・CI/CDパイプラインの監視をしてみたい人
・Github Actionsの監視に興味がある人
・OpenTelemetryに関連する技術を使ってみたい人
CIを監視するメリット
まずはアプリケーションの監視じゃね?みたいなのは一旦置いときますが、CIを監視するメリットもいくつかあります。
- Branchごとの CI 実行時間の変動を把握できる
- 一定時間以上かかった場合にAlertで通知できる
- CI の遅延を早期に検知し、実行時間に関する品質を維持しやすくなる
事前準備
1.Grafana Cloudの無料アカウント登録をしておきます。
個人でさくっと試す分にこれで十分です
2.Grafana Cloudから必要な環境変数を生成する
のちに出てくるOTEL_EXPORTER_OTLP_ENDPOINT
とOTEL_EXPORTER_OTLP_HEADERS
です
無料アカウントに登録したのちに、サイドメニューのHome
=>GettingStarted Guide
を選択し、OpenTelemetry
を選択します。
OpenTelemetry Guide
というページに飛ぶので、Quickstartから、言語を選択する項目が出てきます。
ここではGithubAactionsの監視するデータを送信する先のEndpointとHeadersが生成できればOKなので、言語選択はどれでもOKです。
設定をすすめていくと環境変数らしきものが出てくるんで、以下の二つはコピーしておきます。
OTEL_EXPORTER_OTLP_ENDPOINT
とOTEL_EXPORTER_OTLP_HEADERS
3.特定のtestを実行するCIを作る
Rspecでもvitestでもjestでもなんでも良いので作ってみましょう。
Github Actionsのコードの追加
name: Run Vitest Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test
telemetry:
runs-on: ubuntu-latest
needs: [test]
if: always()
steps:
- name: Send Telemetry
uses: paper2/github-actions-opentelemetry@main
env:
OTEL_SERVICE_NAME: github-actions-opentelemetry
OTEL_EXPORTER_OTLP_ENDPOINT: xxxxxx
OTEL_EXPORTER_OTLP_HEADERS: 'Authorization=Basic xxxxxxxx'
OTEL_RESOURCE_ATTRIBUTES: 'environment=ci,team=platform'
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
今回使うactionsは以下のものです。
テスト終了後に Telemetry 用のJobを実行し、CI 実行結果を OpenTelemetry 経由で送信します。
送信は2パターンあって、
- test用のCI workflowが終了したのを検知して発火するtelemetry送信用のworkflowを作る
- 同一のworkflow上にtelemetry送信用のjobを追加する
今回は簡略化のため、同一のworkflow上にtelemetry送信用のjobを追加する方法でやっています。
詳しくは上記のREADME.mdに書かれているので、そちらもチェックしてみると良いでしょう。
OTEL_RESOURCE_ATTRIBUTES
という環境変数も設定していますが、これはtagのようなものになっています。検索や見方をある程度グルーピングしたいという方は設定しましょう。
試しにpushしてtest=>telemetryが正常に終了しているかを確認しましょう
Grafanaでtraceを可視化
Garafana CloudのサイドメニューのDrillDown=>Tracesを開くと、、、
CIの実行がtraceされています!!
trace nameをクリックしてみると、stepごとの実行時間が視覚的に見やすくなってます。
CI実行時間の中で、どのあたりが支配的なのかというのも一目でわかったりするので良いですね!
Github Actionsの実行結果でもstepごとの実行時間は見れるし、そんなに変わらないんじゃね?という方もいると思いますが、Grafana側の設定やタグの設定を細かくすればAlertが出せたり、Branch別で見れたり、カスタム用のダッシュボードを作れたりとあらゆることに応用が効くはずです。
ぜひ試してみて下さい。
終わりに
今回はGithub Actionsの簡単なtestをGrafanaを使って監視してみました。
自分の好きなCIなどを監視できるというのは目新しくてよかったですし、もっとOpeneTelemetryについてもやれることを知りたいなと思いました。
Discussion