こんにちは、テクマトリックスの米田です。
Jenkinsを利用していると、チームのジョブの実行状況やJenkinsのメトリクスを可視化したい、というニーズが出てきます。
今回は、PrometheusでJenkinsのメトリクスを収集し、Grafanaで可視化する環境をDockerで構築してみたので、本記事でまとめます。
目次
はじめに
Jenkinsを利用することで、ビルドやテストを自動化でき、開発者はコードの品質を保ちながら迅速なリリースを実現できます。しかしチームでJenkinsを利用していると、CI環境の管理者はチームのジョブの実行状況が気になります。また、Jenkinsが多くのジョブを同時に処理する場面では、パフォーマンスや安定性に影響を与えることがあります。このような時にJenkinsのメトリクスを可視化できると便利です。ジョブの実行状況や成功率といったメトリクスをリアルタイムで把握できれば、問題を早期に発見して迅速に対応できるようになり、より快適な開発環境を維持できます。
Prometheusとは
Prometheusは、システムの監視に利用されるオープンソースのツールです。メトリクスを時系列のデータとして収集・保存します。公式サイトには以下のように記載があります。
Open source metrics and monitoring for your systems and services
https://prometheus.io/
Monitor your applications, systems, and services with the leading open source monitoring solution. Instrument, collect, store, and query your metrics for alerting, dashboarding, and other use cases.
システムとサービス向けのオープンソースメトリクスと監視
Google 翻訳を基に一部修正
業界をリードするオープンソースの監視ソリューションでアプリケーション、システム、サービスを監視します。アラート、ダッシュボード、その他のユースケース向けにメトリクスを計測、収集、保存、クエリを実行できます。
Grafanaとは
Grafanaは、時系列のデータをダッシュボードにより可視化するオープンソースのツールです。Prometheusをはじめとする様々なデータソースから情報を取得して、グラフやチャート、数値により構成されるダッシュボードを作成できます。公式サイトには以下のように記載があります。
Visualize your data, optimize your performance
https://grafana.com/oss/grafana/
Easily collect, correlate, and visualize data with beautiful dashboards using Grafana — the open source data visualization and monitoring solution that drives informed decisions, enhances system performance, and streamlines troubleshooting.
データを可視化し、パフォーマンスを最適化
Google 翻訳を基に一部修正
Grafana を使えば、美しいダッシュボードでデータを簡単に収集、相関分析、可視化できます。Grafana は、情報に基づいた意思決定を促進し、システムパフォーマンスを向上させ、トラブルシューティングを効率化するオープンソースのデータ可視化・監視ソリューションです。
構築した環境の概要
今回はDockerコンテナを用いてJenkins, Prometheus, Grafanaを構築しました。以下のような構成です。JenkinsのメトリクスをPrometheusが取得し、Grafanaのダッシュボードで表示します。

- ホストOS:Windows11 pro
- Jenkins:バージョン2.528.1
- Prometheus:バージョン3.7.2
- Grafana:バージョン12.2.1
構築手順
1. 必要なファイルの作成
環境構築のために必要なdocker-compose.ymlを作成しました。以下に一例を示します。
services:
jenkins:
image: jenkins/jenkins:2.528.1-lts-jdk21
container_name: jenkins
user: jenkins
ports:
- "8090:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home
restart: on-failure
environment:
TZ: Asia/Tokyo
networks:
- monitoring
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- monitoring
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
networks:
- monitoring
volumes:
jenkins_home:
prometheus_data:
grafana_data:
networks:
monitoring:Prometheusの利用には、Prometheusの設定を定義するprometheus.ymlも用意します。prometheus.ymlではPrometheusがメトリクスを取得する間隔や取得先のエンドポイントを指定します。
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'jenkins'
metrics_path: '/prometheus'
static_configs:
- targets: ['jenkins:8080']
作成したdocker-compose.ymlとprometheus.ymlは同じディレクトリに配置します。
2. Docker Composeの起動
docker-compose.ymlとprometheus.ymlを配置したディレクトリでDocker Composeを起動し、環境を立ち上げます。
docker compose up -d3. Jenkinsの設定
http://localhost:8090 からJenkinsにアクセスします。
Jenkinsの初期セットアップ(ロック解除、プラグインのインストール、管理者ユーザーの登録)を完了させます。
次に、[Jenkinsの管理] > [Plugins] > [Installed plugins] で、Prometheusとの連携に必要なPrometheus metricsプラグインを選択し、インストールします。

プラグインのインストール後、[Jenkinsの管理] > [System] でPrometheusの設定をします。今回はデフォルト値を使用します。

4. Prometheusの設定
http://localhost:9090 からPrometheusにアクセスします。
[Status] > [Target health] を確認します。Jenkinsへのエンドポイントが表示され、「State」がUPになっていればJenkinsとの接続が成功しています。UNKNOWNの場合は、時間を空けてブラウザを再読み込みするとUPになります。

5. Grafanaの設定
● GrafanaとPrometheusの接続
http://localhost:3000 からGrafanaにアクセスします。ユーザー名/パスワードは、admin/adminでログインできます。
左メニューの[Connections] > [Data sources] > [Add data source] から「Prometheus」を選択します。

今回はNameに「prometheus – jenkins」を入力し、Connection欄のURLにhttp://prometheus:9090 を設定します。
画面下部の「Save & test」を押下し、「Successfully queried the Prometheus API.」と表示され、Prometheusとの接続が成功することを確認します。

● Grafanaのダッシュボード画面の設定
左メニューの[Dashbords] > [Create dashbord] をクリックします。

今回はGrafanaで提供されている、Jenkinsのメトリクスを表示するためのダッシュボードを利用するため、右下の「Import dashboard」を選択し、遷移先の画面真ん中の枠に記載されているリンクをクリックします。

リンク先では、Grafanaで提供されているダッシュボードの一覧が表示されます。検索バーで「Jenkins」を検索します。今回はダウンロード回数が最も多い「Jenkins: Performance and Health Overview」を選択し、右下に表示されるIDをコピーします。

GrafanaのImport dashboard画面真ん中の枠にコピーしたダッシュボードのIDをペーストし、「Load」をクリックします。
Load後、ダッシュボードの名前を適宜変更します。特に最下部のPrometheusの項目は、「GrafanaとPrometheusの接続設定」で設定した「prometheus – jenkins」に変更します。最後に「Import」をクリックし、ダッシュボードの設定を終了します。

Jenkinsのメトリクスが確認できるダッシュボード画面に遷移します。

実際に利用してみる
構築した環境を利用して、Grafanaのダッシュボードにどのような変化が起きるか確認していきます。
1. ジョブを成功・失敗させてみる
Jenkinsにジョブを追加して、成功・失敗するように実行しました。その結果、Grafanaのダッシュボードでは、成功したジョブと失敗したジョブがそれぞれ0から1に増え、JenkinsのメトリクスがGrafanaのダッシュボードに反映されていることが確認できました。

2. 30秒間待機するジョブを実行
2‐1. 1回実行
30秒間待機するジョブを作成し、1回実行しました。ジョブ実行中のGrafanaのダッシュボード画面は以下のように変化しました。設定している2つのエグゼキューターのうち1つが消費されていることが分かります。

2-2. 連続で実行
30秒間待機するジョブがキューに蓄積されて待機されるよう、20回連続で実行しました。Grafanaのダッシュボードでは、設定している2つのエグゼキューターが全て消費されていることや、キューに溜まっているジョブの数、キューにジョブが溜まっている時間に変化があることが分かります。

まとめ
今回は、PrometheusとGrafanaを使ってJenkinsのメトリクスを可視化する環境をDockerで構築しました。いずれもOSSなので、無料で構築できます。Jenkinsのメトリクスを可視化することで、CI環境が期待通り運用されているか、Jenkinsのパフォーマンスに問題がないかを迅速に把握でき、次に取るべきアクションの判断に活かすことができます。
また、今回は紹介していませんが、Grafanaのダッシュボードにパネルを追加して新たなメトリクスを確認したり、Jenkinsのメトリクスを数式のように活用して所望のメトリクスを確認することもできます。ぜひご参考ください。
参考リンク
Monitoring Jenkins with Grafana and Prometheus (Medium ブログ記事)
How to Monitor Jenkins With Grafana and Prometheus (CloudBees Youtube動画)
