- プロメテウスの仕組み
- Prometheusの設定
- パフォーマンス・メトリクスの表示
- GrafanaデータソースとしてのPrometheus
- GitLab メトリクス
- バンドルされているソフトウェアメトリクス
- トラブルシューティング
Prometheus による GitLab の監視
Prometheusは強力な時系列モニタリングサービスで、GitLabやその他のソフトウェア製品をモニタリングするための柔軟なプラットフォームを提供します。
GitLabはPrometheusを使ってすぐに監視を行うことができ、GitLabサービスの高品質な時系列監視を利用することができます。
Prometheusとこのページにある様々なExporterはLinuxパッケージにバンドルされています。追加されたタイムラインについては、各エクスポーターのドキュメントを確認してください。自分でコンパイルしたインストールについては、自分でインストールする必要があります。その後のリリースで、GitLabのメトリクスが追加されます。
Prometheusのサービスはデフォルトでオンになっています。
PrometheusとそのExporterはユーザーを認証しないので、アクセスできる人なら誰でも利用できます。
プロメテウスの仕組み
Prometheusは定期的にデータソースに接続し、様々なエクスポートツールを通じてパフォーマンスメトリクスを収集します。モニタリングデータを表示して作業するには、Prometheusに直接接続するか、Grafanaのようなダッシュボードツールを使用します。
Prometheusの設定
自己コンパイルインストールの場合は、自分でインストールして設定する必要があります。
Prometheus とその Exporter はデフォルトでオンになっています。Prometheusはgitlab-prometheus
ユーザーとして実行され、http://localhost:9090
をリッスンします。デフォルトでは、GitLabサーバーからのみPrometheusにアクセスできます。各エクスポーターは、個別に無効にしない限り、自動的にPrometheusの監視対象として設定されます。
PrometheusとそのすべてのExporter、そして今後追加されるExporterを無効にするには、次のようにしてください:
- 編集
/etc/gitlab/gitlab.rb
-
以下の行を追加または見つけてコメントアウトし、
false
に設定されていることを確認してください:prometheus_monitoring['enable'] = false
- ファイルを保存し、変更を有効にするためにGitLab を再設定します。
Prometheusがリッスンするポートとアドレスの変更
GitLabサーバーの外からPrometheusにアクセスするには、Prometheusがリッスンするアドレス/ポートを変更してください:
- 編集
/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を再設定してください。
カスタムスクレイプ設定の追加
Prometheus scrape target configurationsyntax を使用して/etc/gitlab/gitlab.rb
のprometheus['scrape_configs']
を編集することで、Linux パッケージバンドルされた Prometheus のスクレイプターゲットを追加設定することができます。
以下は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'],
],
},
]
Linuxパッケージを使用したスタンドアロンPrometheus
Linuxパッケージを使用すると、PrometheusとGrafanaを実行するスタンドアロンのMonitoringノードを設定できます。
以下の手順は、Linuxパッケージを使用してPrometheusとGrafanaを実行するMonitoringノードを設定するために必要な最小限の手順です:
- MonitoringノードにSSH接続します。
- GitLabのダウンロードページからステップ1と2を使用して必要なLinuxパッケージをインストールします。
- 次のステップのために、ConsulサーバーノードのIPアドレスかDNSレコードを収集しておいてください。
-
/etc/gitlab/gitlab.rb
を編集し、内部を追加します:roles ['monitoring_role'] external_url 'http://gitlab.example.com' # Prometheus prometheus['listen_address'] = '0.0.0.0:9090' prometheus['monitor_kubernetes'] = false # Grafana grafana['enable'] = true grafana['admin_password'] = 'toomanysecrets' grafana['disable_login_form'] = false # Enable service discovery for Prometheus consul['enable'] = true consul['monitoring_service_discovery'] = true consul['configuration'] = { retry_join: %w(10.0.0.1 10.0.0.2 10.0.0.3), # The addresses can be IPs or FQDNs } # Nginx - For Grafana access nginx['enable'] = true
-
sudo gitlab-ctl reconfigure
を実行して設定をコンパイルします。
次のステップは、他のすべてのノードに監視ノードの場所を伝えることです:
-
/etc/gitlab/gitlab.rb
を編集し、以下の行を追加するか、見つけてコメントアウトします:gitlab_rails['prometheus_address'] = '10.0.0.1:9090'
10.0.0.1:9090
は Prometheus ノードの IP アドレスとポートです。 -
ファイルを保存し、変更を有効にするためにGitLab を再設定します。
consul['monitoring_service_discovery'] = true
で Service Discovery を使用したモニタリングを有効にした後、prometheus['scrape_configs']
が/etc/gitlab/gitlab.rb
に設定されていないことを確認してください。/etc/gitlab/gitlab.rb
でconsul['monitoring_service_discovery'] = true
とprometheus['scrape_configs']
の両方を設定するとエラーになります。
外部 Prometheus サーバーの使用
GitLabを外部のPrometheusサーバーで監視できるようにするには、いくつかの設定変更が必要です。GitLabを複数ノードでデプロイする場合は、外部サーバの利用を推奨します。
外部のPrometheusサーバーを使うには:
-
/etc/gitlab/gitlab.rb
を編集します。 -
バンドルされている Prometheus を無効にします:
prometheus['enable'] = false
-
各バンドルサービスのExporterをネットワークアドレスでリッスンするように設定します:
node_exporter['listen_address'] = '0.0.0.0:9100' gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229" # Rails nodes gitlab_exporter['listen_address'] = '0.0.0.0' gitlab_exporter['listen_port'] = '9168' registry['debug_addr'] = '0.0.0.0:5001' # Sidekiq nodes sidekiq['listen_address'] = '0.0.0.0' # Redis nodes redis_exporter['listen_address'] = '0.0.0.0:9121' # PostgreSQL nodes postgres_exporter['listen_address'] = '0.0.0.0:9187' # Gitaly nodes gitaly['configuration'] = { # ... prometheus_listen_addr: '0.0.0.0:9236', } # Pgbouncer nodes pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
-
必要に応じて、Prometheus専用のインスタンスをインストールし、公式のインストール手順を使用してセットアップします。
-
すべてのGitLab Rails(Puma, 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", }
複数の Prometheus サーバーがある場合は、複数の IP アドレスを指定することもできます:
nginx['status']['options'] = { "server_tokens" => "off", "access_log" => "off", "allow" => ["192.168.0.1", "192.168.0.2"] "deny" => "all", }
-
PrometheusサーバーにGitLabメトリクスエンドポイントからのフェッチを許可するには、監視IP allowlistにPrometheusサーバーのIPアドレスを追加します:
gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
- 各バンドルサービスのExporterをネットワークアドレスでリッスンするように設定しているので、インスタンスのファイアウォールを更新して、有効になっているExporterのPrometheus IPからのトラフィックだけを許可するようにします。Exporterサービスとそれぞれのポートの完全なリファレンスリストはここにあります。
- 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" scheme: https static_configs: - targets: - 1.1.1.1 - 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: gitaly static_configs: - targets: - 1.1.1.1:9236
スニペット内のgitlab-rails
ジョブは、GitLab が HTTPS で到達可能であることを前提としています。デプロイが HTTPS を使用していない場合、ジョブの設定はhttp
スキームとポート 80 を使用するように変更されます。 - Prometheus サーバーをリロードします。
ストレージ保持サイズの設定
Prometheusにはローカルストレージを設定するためのいくつかのカスタムフラグがあります:
-
storage.tsdb.retention.time
古いデータをいつ削除するか。デフォルトは15d
。このフラグがデフォルト以外に設定されている場合は、storage.tsdb.retention
を上書きします。 -
storage.tsdb.retention.size
: (experimental) 保持するストレージブロックの最大バイト数。最も古いデータから順に削除されます。デフォルトは0
(無効) です。このフラグは実験的なもので、将来のリリースで変更される可能性があります。サポートされる単位:B
KB
,MB
,GB
,TB
,PB
,EB
.例えば、512MB
。
ストレージ保持サイズを設定するには
-
/etc/gitlab/gitlab.rb
を編集します:prometheus['flags'] = { 'storage.tsdb.path' => "/var/opt/gitlab/prometheus/data", 'storage.tsdb.retention.time' => "7d", 'storage.tsdb.retention.size' => "2GB", 'config.file' => "/var/opt/gitlab/prometheus/prometheus.yml" }
-
GitLab を再設定します:
sudo gitlab-ctl reconfigure
パフォーマンス・メトリクスの表示
Prometheusがデフォルトで提供しているダッシュボードのhttp://localhost:9090
。
GitLabインスタンスでSSLが有効になっている場合、GitLabと同じブラウザで同じFQDNを使うとHSTSのために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など)。
- type ドロップダウンリストで
Prometheus
を選択します。 - PrometheusのリスナーアドレスをURLとして追加し、アクセスを
Browser
に設定します。 - HTTP メソッドを
GET
に設定します。 - 設定を保存してテストし、動作することを確認します。
GitLab メトリクス
GitLabは独自の内部サービス・メトリクスを監視し、/-/metrics
エンドポイントで利用できるようにしています。他のExporterとは異なり、このエンドポイントはユーザーのトラフィックと同じURLとポートで利用できるため、認証が必要です。
GitLabメトリクスについてもっと読む.
バンドルされているソフトウェアメトリクス
LinuxパッケージにバンドルされているGitLabの依存関係の多くは、Prometheusメトリクスをエクスポートするように事前に設定されています。
ノードエクスポーター
ノード・エクスポーターを使用すると、メモリ、ディスク、CPUの使用率など、さまざまなマシン・リソースを測定できます。
ノード・エクスポーターの詳細をお読みください。
ウェブエクスポーター
ウェブエクスポーターは専用のメトリクスサーバーで、エンドユーザーとPrometheusのトラフィックを2つのアプリケーションに分割し、パフォーマンスと可用性を向上させます。
Web Exporterの詳細はこちらをご覧ください。
Redisエキスポーター
Redisエクスポートを使用すると、Redisのさまざまなメトリクスを測定できます。
Redisエクスポーターの詳細はこちらをご覧ください。
PostgreSQL exporter
PostgreSQLエクスポートを使用すると、PostgreSQLの様々なメトリクスを測定することができます。
PostgreSQLエクスポートの詳細はこちらをご覧ください。
PgBouncer exporter
PgBouncer Exporterは様々なPgBouncerのメトリクスを測定することができます。
PgBouncerエキスポーターの詳細はこちらをご覧ください。
レジストリ・エクスポーター
レジストリ・エクスポーターを使用すると、さまざまなレジストリ・メトリクスを測定できます。
レジストリ・エクスポーターの詳細については、こちらをご覧ください。
GitLab エクスポーター
GitLab Exporterでは、Redisやデータベースから取得した様々なGitLabメトリクスを測定することができます。
トラブルシューティング
/var/opt/gitlab/prometheus
ディスク容量が多すぎる
Prometheus モニタリングを使用していない場合:
- Prometheus を無効にします。
-
/var/opt/gitlab/prometheus
以下のデータを削除します。
Prometheus モニタリングを使用している場合:
-
Prometheusを停止します(実行中にデータを削除すると、データが破損する可能性があります):
gitlab-ctl stop prometheus
-
/var/opt/gitlab/prometheus/data
以下のデータを削除してください。 -
サービスを再度起動してください:
gitlab-ctl start prometheus
-
サービスが稼働していることを確認します:
gitlab-ctl status prometheus
- オプション。ストレージの保持サイズを設定します。
データを受信しない監視ノード
監視ノードがデータを受信していない場合は、エクスポート・ノードがデータをキャプチャしていることを確認してください:
curl "http[s]://localhost:<EXPORTER LISTENING PORT>/metrics"
あるいは
curl "http[s]://localhost:<EXPORTER LISTENING PORT>/-/metrics"