本記事は、Monitoring Jenkins pipelines using OpenTelemetry and New Relicの抄訳記事です。

Jenkins は自動化ツールで、継続的インテグレーション (CI) および継続的デリバリー (CD)を実装するときによく使われるOSSです。近年、CICDパイプラインは開発プラクティスとして幅広く採用されており、アプリケーションのより迅速なデリバリーによる、バグ削減・パフォーマンス改善など、サービスの品質向上に寄与しています。一方、もしパイプラインでエラーなど問題が発生してしまうと、デプロイが滞り開発サイクルに悪影響を与えてしまう可能性があります。そのため、アプリケーションそのものの品質だけでなく、CICD ツールなど、開発サイクルに関するプロセスも監視することが重要となってきています。

CICDパイプラインを構築し、うまく機能するようになれば問題を早期に発見しやすくなります。ソースコードマージ後のユニットテスト自動化や、最低限のシナリオテストなどを早期に行うことができるので、次の図に示すDevOps ライフサイクルの左側により多くのテストを組み込む「テストのシフトレフト」に貢献し、デリバリー前に品質を高めていくことができます。

 

シフトレフトは、コードをテストし、ビルドとデプロイのプロセスを自動化するだけでは実現しません。 CICD パイプラインを監視し、問題が起こったとき(バグ発見やビルドが止まったなど)にすぐに対応することで、高い効果を発揮することができます。

この投稿では、Jenkins OpenTelemetry プラグインと New Relic クイックスタート統合を使用して、Jenkins ジョブとパイプラインを監視する方法を学びます。

完了すると、次のことができるようになります。

  • ジョブの所要時間やエラー率など、Jenkins パイプラインの主要な指標を視覚化
  • 分散トレースを使用して、パイプラインのどこから問題が発生しているかの特定
  •  Jenkins パイプラインの問題のアラート検知

 次の画像は、 Jenkins メトリクスの一部情報を使って作ることのできる、New Relic ダッシュボードです。

Install the Jenkins quickstart dashboard for a pre-built view of your key pipeline metrics.

このインテグレーションを行う事で、DevOpsライフサイクルの観測ができるようになりましょう!

動画で確認するか、この記事を読み進め設定を完了させましょう。

前提条件

まだJenkinsを導入していないのであれば、Jenkinsの インストールが必要です。もしくは、 Docker を使って立ち上げてみましょう。

docker run --name jenkinsci -d -e OTEL_LOGS_EXPORTER="otlp" -p 8080:8080 jenkins/jenkins:lts

Jenkinsで今回の設定を行うには、 Jenkins 2.346.1バージョン移行が必要です。

OpenTelemetry pluginの設定

  1. Jenkinsにログインします。 (通常こちらでアクセスできます http://localhost:8080) ユーザー名、パスワードでログインしましょう
  2. Jenkins dashboardの左ペインから Manage Jenkins を選ぶ
  3. Manage Plugins を選ぶ
  1.  Available タブを選択し、"OpenTelemetry" で検索
  1. OpenTelemetry のチェックボックスを選択し、 Install without restart を選ぶ
  1. インストールが終わったら、 Restart Jenkins when installation is complete and no jobs are running を選択
  1. もう一度 Jenkins にログインし、 Manage Jenkinsを選択
  2. System Configuration配下の、 Configure Systemを選択
  1.  OpenTelemetry セクションまでスクロールし、設定を変更する
  • OTLP Endpoint に https://otlp.nr-data.net:4317 を入力
  • Authentication : Header Authentication.
  • Header Name : api-key
  • Header Valueを用意します。 Add > Jenkins を選択し、次の値を入力しましょう
    • Kind :  Secret text.
    • Secret : New Relic license ingest key (わからない場合、リンク先をご確認ください)
    • ID : 空のまま
    • Description : New Relic INGEST - LICENSE key などと記載
    • Addをクリック
  1. 認証情報を追加した後、 New Relic INGEST - LICENSE Key がHeader Value で選択できるようになります。
  2. 選択して Save しましょう

Jenkins データを New Relic に送る

セットアップを完了させると、New Relicにデータを送れるようになります。

New Relicにデータが送れるかどうか、Failするテストパイプラインを作成し確認しましょう。

以下の手順で作成できます。

  1. Jenkins dashboardで、New Item を選択
  1. item name (この例では test)を入力しPipelineにチェック、 その後 OKを選択
  1. 一番下までスクロールしScripted Pipelineを選択、 そして Saveをクリック

古いバージョンのJenkinsをお使いの場合、リストにない可能性もあります。その場合は、以下のスクリプトをコピーして Save してください。

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        git 'https://github.com/jglick/simple-maven-project-with-tests.git'
        sh "mvn -Dmaven.test.failure.ignore=true clean package"
      }
      post {
        success {
          echo "success"
        }
      }
    }
  }
}
  1. Build Nowを押しましょう。 このサンプルはFailしますが、期待通りの挙動です。
  1. New Relic にログインし, Services - OpenTelemetry を確認しましょう。jenkins が現れているのでクリックしましょう。

Transactions をみると、データが入っている事を確認できます。パイプラインのビルドステップの成功/失敗全てを確認できるようになっています。

次のイメージは、New Relicの Jenkins dashboard です。トランザクションの情報やスループットなどをみることができます。

Distributed Traces にいくとこちらでもJenkins pipelineを確認することができます。

 たとえば、どのステップから問題が生じているのかなどを確認できるようになっており、アラートの設定にもこの情報を活用できるようになっています。

次の画像は New Relic でみる Jenkins pipeline の詳細トレースです。

環境変数で OTEL_LOGS_EXPORTER="otlp"と設定している場合は、コンソールログと同じものを Logs tabでも確認できます。

次のイメージはJenkins pipelineに紐づいているログです。

Jenkinsデータの可視化

Jenkins データが New Relic に流れ込んだら、Jenkins 環境の概要を収集できる、クイックスタート ダッシュボードを追加できます。たとえば、使用可能な Jenkins インスタンスの数、成功したジョブの数、上位のエラー、およびジョブ キューのステータスの概要を確認できます。

このダッシュボードを追加するには、次の手順に従ってください。

  1. New Relic Instant Observability の Jenkins クイックスタートに移動し、Install now を選択
  2. アカウントを選択し、Begin installationを選択
  3. Jenkins側の設定を既に完了している場合は、Done を選択
  4.  See your dataを選択して、ダッシュボードにアクセス

Install the Jenkins quickstart dashboard for a pre-built view of your key pipeline metrics.

完了すると、メトリクスからログ、分散トレースまで、Jenkins パイプラインを完全に可視化できます。

このデータを使うことで、ジョブに時間がかかりすぎる場合やエラー率が高くなりすぎる場合など、特定のしきい値が満たされたときにアラートを追加することもできます。問題が起こったらSlack、PagerDuty、メールなどを使い、すぐに関係者に知らせることもできるようになります。

DevOps ライフサイクルのビルドおよびデプロイ フェーズを監視し、より効果的なシフトレフトを、開発サイクルの高度化を支援していきましょう。