GitLab Runnerのモニタリング

GitLab RunnerはPrometheusを使って監視することができます。

組み込みPrometheusメトリクス

GitLabランナー1.8.0では、Prometheusメトリクスを備えた組み込みHTTP統計サーバーが導入されました。

GitLab RunnerはネイティブのPrometheusメトリクスでインスツルメンテーションされており、/metricsパス上の組み込みHTTPサーバー経由で公開することができます。サーバーは(有効になっていれば)Prometheusモニタリングシステムでスクレイピングすることも、他のHTTPクライアントでアクセスすることもできます。

暴露された情報は以下の通り:

  • ランナービジネスロジックのメトリクス(現在実行中のジョブ数など)
  • Go固有のプロセス・メトリクス(ガベージ・コレクション統計、ゴルーチン、memstatsなど)
  • 一般的なプロセス・メトリクス(メモリ使用量、CPU使用量、ファイル記述子使用量など)
  • ビルドバージョン情報

メトリクスのフォーマットは、PrometheusのExposition formatsspecificationに記載されています。

これらのメトリクスは、オペレータがGitLab Runnerを監視し、インサイトを得るための方法として意図されています。 例えば、ランナーのホストの負荷平均の増加が、処理されたジョブの増加に関連しているかどうかに興味があるかもしれません。 あるいは、ジョブに使用するマシンのクラスターを実行しており、インフラストラクチャの変更を計画するためにビルドの傾向を追跡したいかもしれません。

プロメテウスについてもっと知る

このHTTPエンドポイントをスクレイピングし、収集されたメトリクスを利用するためのPrometheusサーバーのセットアップ方法については、Prometheusの入門ガイドを参照してください。 また、Prometheusの設定方法の詳細については、設定のセクション、アラートルールのセクション、およびアラート通知をディスパッチするためのAlertmanagerのセットアップのセクションを参照してください。

pprof HTTPエンドポイント

pprof インテグレーションは GitLab Runner 1.9.0 で導入されました。

Runnerプロセスの内部状態に関するメトリクスを持つことは有用ですが、Runningプロセスの内部で何が起こっているかをリアルタイムでチェックすることが良い場合もあります。 そのために、pprof HTTPエンドポイントを導入しました。

pprof エンドポイントは、/debug/pprof/パス上の組み込み HTTP サーバー経由で利用できるようになります。

pprof の使い方については、ドキュメントをご覧ください。

メトリクス HTTP サーバーの構成

注意:メトリクスサーバーはGitLab Runnerプロセスの内部状態に関するデータをエクスポートするので、公開すべきではありません!

メトリクス HTTP サーバは、2 つの方法で構成できます:

  • config.toml ファイルのlisten_address グローバル・コンフィギュレーション・オプションで指定します、
  • を、run コマンドの--listen-address コマンドラインオプションで指定します。

どちらの場合も、このオプションは[host]:<port>という書式の文字列を受け付けます:

  • host はIPアドレスまたはホスト名です、
  • port は有効なTCPポートまたはシンボリックサービス名(http)です。Prometheusですでに割り当てられているポート9252 を使用することをお勧めします。

リッスンアドレスにポートが含まれていない場合、デフォルトは9252になります。

アドレスの例:

  • :9252 - はすべてのインターフェイスのすべての IP をポート9252
  • localhost:9252 - はループバックインターフェイスのポート9252
  • [2001:db8::1]:http - は IPv6 アドレス[2001:db8::1] で HTTP ポートを待ちます。80

少なくともLinux/Unixシステムでは、1024 以下のポートをリッスンするには、root/管理者権限が必要であることを忘れないでください。

HTTP サーバーは、選択されたhost:port上で、認証なしで公開されます。メトリクス・サーバーを公開インターフェイスにバインドすることを計画している場合は、ファイアウォール を使用してこのサーバーへのアクセスを制限するか、認証およびアクセス制御レイヤーを追加する HTTP プロキシを追加することを検討する必要があります。