😸

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_ENDPOINTOTEL_EXPORTER_OTLP_HEADERSです

無料アカウントに登録したのちに、サイドメニューのHome=>GettingStarted Guideを選択し、OpenTelemetryを選択します。

OpenTelemetry Guideというページに飛ぶので、Quickstartから、言語を選択する項目が出てきます。
ここではGithubAactionsの監視するデータを送信する先のEndpointとHeadersが生成できればOKなので、言語選択はどれでもOKです。

設定をすすめていくと環境変数らしきものが出てくるんで、以下の二つはコピーしておきます。
OTEL_EXPORTER_OTLP_ENDPOINTOTEL_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は以下のものです。
https://github.com/paper2/github-actions-opentelemetry

テスト終了後に 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についてもやれることを知りたいなと思いました。

DELTAテックブログ

Discussion