- 概要
- Prometheus の設定
- パフォーマンス・メトリクスの表示
- GrafanaデータソースとしてのPrometheus
- GitLabメトリクス
- バンドル・ソフトウェアメトリクス
- Kubernetesを監視するためのPrometheusの設定
Prometheus による GitLab の監視
注:
- Prometheusとこのページに記載されている様々なExporterはOmnibus GitLabパッケージにバンドルされています。 追加された時期については各Exporterのドキュメントを確認してください。 ソースからのインストールについては、自分でインストールする必要があります。 以降のリリースでは、GitLabメトリクスが追加される予定です。
- GitLab 9.0では、Prometheusサービスがデフォルトでオンになっています。
- Prometheusとそのexporterはユーザーを認証しないので、アクセスできる人なら誰でも利用できます。
Prometheusは強力な時系列モニタリングサービスで、GitLabやその他のソフトウェア製品をモニタリングするための柔軟なプラットフォームを提供します。 GitLabはPrometheusですぐにモニタリングできるため、GitLabサービスの高品質な時系列モニタリングに簡単にアクセスできます。
概要
Prometheusは、定期的にデータソースに接続し、様々なexporterを通じてパフォーマンスメトリクスを収集することで機能します。 モニタリングデータを表示して作業するには、Prometheusに直接接続するか、Grafanaのようなダッシュボードツールを利用します。
Prometheus の設定
GitLab9.0から、PrometheusとそのExporterはデフォルトでオンになっています。 Prometheusはgitlab-prometheus
ユーザーとして実行され、http://localhost:9090
をリッスンします。 デフォルトでは、PrometheusはGitLabサーバー自体からしかアクセスできません。各Exporterは、個別に無効にしない限り、Prometheusの監視対象として自動的に設定されます。
PrometheusとそのすべてのExporter、および今後追加されるExporterを無効にします:
- 編集
/etc/gitlab/gitlab.rb
-
以下の行を追加または検索してコメントアウトし、
false
に設定されていることを確認してください:prometheus_monitoring['enable'] = false
- ファイルを保存し、変更を有効にするために GitLab を再設定します。
Prometheusがリッスンするポートとアドレスの変更
GitLabサーバーの外部からPrometheusにアクセスするには、prometheus['listen_address']
でFQDNまたはIPを設定する必要があります。 Prometheusがリッスンするアドレス/ポートを変更するには、 でFQDNまたはIPを設定する必要があります:
- 編集
/etc/gitlab/gitlab.rb
-
以下の行を追加するか、または見つけてコメントを外します:
prometheus['listen_address'] = 'localhost:9090'
localhost:9090
を Prometheus にリッスンさせたいアドレスまたはポートに置き換えてください。localhost
以外のホストに Prometheus へのアクセスを許可したい場合は、ホストを省略するか、0.0.0.0
を使用して公開アクセスを許可してください:prometheus['listen_address'] = ':9090' # or prometheus['listen_address'] = '0.0.0.0:9090'
- ファイルを保存し、変更を有効にするためにGitLabを再設定します。
カスタムスクレイプ設定の追加
OmnibusのGitLabバンドルされたPrometheusのために、Prometheusのスクレープターゲット・コンフィギュレーション構文を使って/etc/gitlab/gitlab.rb
、prometheus['scrape_configs']
を編集することで、追加のスクレープターゲットを設定することができます。
以下はhttp://1.1.1.1:8060/probe?param_a=test¶m_b=additional_test
をスクレイピングするための設定例です:
prometheus['scrape_configs'] = [
{
'job_name': 'custom-scrape',
'metrics_path': '/probe',
'params' => {
'param_a' => ['test'],
'param_b' => ['additional_test']
},
'static_configs' => [
'targets' => ['1.1.1.1:8060'],
],
},
]
外部Prometheusサーバーの使用
GitLabを外部のPrometheusサーバーで監視できるようにするには、いくつかの設定変更が必要です。GitLabを複数ノードでデプロイする場合は、外部サーバーを推奨します。
外部の Prometheus サーバーを使用する場合:
-
/etc/gitlab/gitlab.rb
を編集します。 -
バンドルされているPrometheusを無効にしてください:
prometheus['enable'] = false
-
例えば、各バンドルサービスのエクスポータをネットワークアドレスでリッスンするように設定します:
gitlab_exporter['listen_address'] = '0.0.0.0' sidekiq['listen_address'] = '0.0.0.0' gitlab_exporter['listen_port'] = '9168' node_exporter['listen_address'] = '0.0.0.0:9100' redis_exporter['listen_address'] = '0.0.0.0:9121' postgres_exporter['listen_address'] = '0.0.0.0:9187' gitaly['prometheus_listen_addr'] = "0.0.0.0:9236" gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"
- Prometheus専用インスタンスのインストールとセットアップを行います。
-
Prometheus サーバー IP アドレスを監視 IP ホワイトリストに追加します:
gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
-
すべてのGitLab Rails(Puma/Unicorn、Sidekiq)サーバーで、PrometheusサーバーのIPアドレスとリッスンポートを設定します。 例えば、以下のようにします:
gitlab_rails['prometheus_address'] = '192.168.0.1:9090'
-
Nginxメトリクスをスクレイピングするには、PrometheusサーバIPを許可するようにNGINXを設定する必要があります。 例えば、以下のようになります:
nginx['status']['options'] = { "server_tokens" => "off", "access_log" => "off", "allow" => "192.168.0.1", "deny" => "all", }
- GitLab を再設定して変更を適用します。
- Prometheus サーバーの設定ファイルを編集します。
-
各ノードの exporter を Prometheus サーバーのスクレープターゲット設定に追加します。 例えば、
static_configs
を使用したサンプルのスニペットです:scrape_configs: - job_name: nginx static_configs: - targets: - 1.1.1.1:8060 - job_name: redis static_configs: - targets: - 1.1.1.1:9121 - job_name: postgres static_configs: - targets: - 1.1.1.1:9187 - job_name: node static_configs: - targets: - 1.1.1.1:9100 - job_name: gitlab-workhorse static_configs: - targets: - 1.1.1.1:9229 - job_name: gitlab-rails metrics_path: "/-/metrics" static_configs: - targets: - 1.1.1.1:8080 - job_name: gitlab-sidekiq static_configs: - targets: - 1.1.1.1:8082 - job_name: gitlab_exporter_database metrics_path: "/database" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitlab_exporter_sidekiq metrics_path: "/sidekiq" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitlab_exporter_process metrics_path: "/process" static_configs: - targets: - 1.1.1.1:9168 - job_name: gitaly static_configs: - targets: - 1.1.1.1:9236
- Prometheus サーバーをリロードします。
パフォーマンス・メトリクスの表示
Prometheusがデフォルトで提供しているダッシュボードについては、http://localhost:9090
。
注:GitLabインスタンスでSSLが有効になっている場合、同じFQDNを使用するとHSTSのためGitLabと同じブラウザでPrometheusにアクセスできないことがあります。GitLab経由でアクセスできるようにする予定ですが、暫定的にいくつかの回避策があります:別のFQDNを使用する、サーバーIPを使用する、Prometheus用に別のブラウザを使用する、HSTSをリセットする、またはNGINXにプロキシさせる。
Prometheusによって収集されたパフォーマンスデータは、Prometheusコンソールで直接、または互換性のあるダッシュボードツールを介して表示することができます。 Prometheusインターフェースは、収集されたデータを扱うための柔軟なクエリ言語を提供し、出力を視覚化することができます。 より完全な機能を備えたダッシュボードには、Grafanaを使用することができ、Prometheusの公式サポートがあります。
Prometheusクエリのサンプル:
-
メモリが使用可能です:
((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100
-
CPU使用率:
1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
-
データ送信
rate(node_network_transmit_bytes_total{device!="lo"}[5m])
-
データを受け取りました:
rate(node_network_receive_bytes_total{device!="lo"}[5m])
GrafanaデータソースとしてのPrometheus
Grafanaでは、Prometheusのパフォーマンスメトリクスをデータソースとしてインポートし、メトリクスをグラフやダッシュボードとしてレンダリングできるため、可視化に役立ちます。
単一サーバーのGitLabセットアップにPrometheusダッシュボードを追加するには:
- Grafanaで新しいデータソースを作成します。
- データソースに名前を付けます(GitLabなど)。
- タイプのドロップダウンボックスで
Prometheus
を選択します。 - PrometheusのリスナーアドレスをURLとして追加し、アクセスを
Browser
に設定します。 - HTTP メソッドを
GET
に設定します。 - 設定を保存してテストし、動作することを確認します。
GitLabメトリクス
GitLab 9.3から導入されました。
GitLabは独自の内部サービス・メトリクスを監視し、/-/metrics
エンドポイントで利用できるようにしています。他のexporterとは異なり、このエンドポイントはユーザ・トラフィックと同じURLとポートで利用できるため、認証が必要です。
バンドル・ソフトウェアメトリクス
Omnibus GitLabにバンドルされているGitLab依存関係の多くは、Prometheusメトリクスをエクスポートするように事前に設定されています。
ノードエクスポーター
ノードエクスポーターを使用すると、メモリ、ディスク、CPU使用率など、さまざまなマシンリソースを測定できます。
ノードエクスポーターの詳細はこちらをご覧ください。
Redis エクスポーター
Redisエクスポータを使用すると、Redisのさまざまなメトリクスを測定できます。
Redisエクスポータの詳細はこちらをご覧ください。
PostgreSQL exporter
PostgreSQLエクスポータでは、PostgreSQLの様々なメトリクスを測定することができます。
PostgreSQLエクスポータの詳細はこちらをご覧ください。
PgBouncer exporter
PgBouncerエクスポータは様々なPgBouncerのメトリクスを測定することができます。
レジストリエクスポーター
レジストリ・エクスポーターを使用すると、さまざまなレジストリ・メトリクスを測定できます。
レジストリ・エクスポーターの詳細はこちら。
GitLab エクスポーター
GitLab exporterでは、Redisやデータベースから取得した様々なGitLabメトリクスを測定することができます。
Kubernetesを監視するためのPrometheusの設定
- GitLab 9.0で導入されました。
- GitLab 9.4で導入されたポッドモニタリング。
GitLab サーバーが Kubernetes 内で動作している場合、Prometheus は各コンテナのパフォーマンスデータを含む、クラスター内のノードとアノテーションされたポッドからメトリクスを収集します。 これは、CI/CD 環境が同じクラスター内で動作している場合に特に便利で、Prometheusプロジェクトインテグレーションを使用してそれらを監視できます。
Kubernetesのモニタリングを無効にするには:
-
/etc/gitlab/gitlab.rb
を編集します。 -
以下の行を追加(または見つけてコメント解除)し、
false
に設定します:prometheus['monitor_kubernetes'] = false
- ファイルを保存し、変更を有効にするために GitLab を再設定します。