OpenTelemetry Collector を開発する
ビジネスロジックを作る
この時点では、何も行っていないカスタムコンポーネントが作成されています。ここから、Jenkins からデータを取得するための必要なロジックを追加していきましょう。
ここからのステップは以下の通りです:
- Jenkinsに接続するクライアントを作成する
- 設定されたすべてのジョブをキャプチャする
- 設定されたジョブの最後のビルドのステータスを報告する
- コミットタイムスタンプとジョブ完了の時間差を計算する
変更を scraper.go に加えていきます。
Jenkinsサーバーに接続するために、パッケージ “github.com/yosida95/golang-jenkins” を使用します。これには、Jenkinsサーバーからデータを読み取るために必要な機能が提供されています。
次に、“go.opentelemetry.io/collector/receiver/scraperhelper” ライブラリのいくつかのヘルパー関数を利用して、コンポーネントの起動が完了したらJenkinsサーバーに接続できるようにするスタート関数を作成します。
これで、Jenkinsレシーバーを初期化するために必要なすべてのコードが完成しました。
ここから先は、実装が必要な scrape メソッドに焦点を当てます。このメソッドは、設定された間隔(デフォルトでは1分)ごとに実行されます。
Jenkins サーバーの負荷状況や、どの程度のプロジェクトが実行されているかを測定するために、Jenkins で設定されているジョブの数をキャプチャしたいと考えています。これを行うために、Jenkins クライアントを呼び出してすべてのジョブをリスト化し、エラーが報告された場合はメトリクスなしでそれを返し、そうでなければメトリクスビルダーからのデータを発行します。
前のステップにより、すべてのジョブをキャプチャしてジョブの数をレポートできるようになりました。 このステップでは、それぞれのジョブを調査し、レポートされた値を使用してメトリクスをキャプチャしていきます。
最後のステップでは、コミットからジョブ完了までにかかった時間を計算して、DORA メトリクス を推測するのに役立てていきます。
これらのステップがすべて完了すると、Jenkins CI レシーバーが完成します!
次は何をするの?
コンポーネントに必要な機能は、おそらく他にもたくさん思いつくでしょう。例えば:
- ジョブで使用されたブランチ名を含めることはできますか?
- ジョブのプロジェクト名を含めることはできますか?
- プロジェクトのジョブの総持続時間をどのように計算しますか?
- 変更が機能するかどうかをどのように検証しますか?
この時間を使って遊んでみたり、壊してみたり、変更してみたり、ビルドからのログをキャプチャしてみるなどしてください。