Prometheusを使ってGitLabのメトリクスを取得する方法
概要
私は、サーバの監視のためにPrometheusを使っています。
ここでは、GitLabのメトリクスをPrometheusに集約する方法を紹介します。
環境
- Prometheus 2.2
- GitLab 10.6
GitLabは、Omnibus packagesのものを使っているので、ソースコードからインストールしている場合は、適宜読み替えてください。
さらに、Omnibus packageにはGitLab用にカスタマイズされたPrometheusが同梱されていますが、今回は別にインストールしてあるPrometheusと連携する場合について説明します。
exporterについて
実は、GitLabにはPrometheusを使ってすぐにメトリクスを取得できるようにexporterが同梱されています。
そして、exporterもひとつだけでなく複数あります。
具体的なexporterは次の5つです
- GitLab Prometheus metrics
- node exporter
- redis exporter
- postgres exporter
- gitlab monitor exporter
これらのexporterのうち、ひとつめの「GitLab Prometheus metrics」は、主にブラウザを使ってGitLabの設定画面から設定します。
それ以外のexporterは、GitLabの設定ファイルから設定します。
exporterの設定
始めに、GitLab Prometheus metrics以外の設定について説明します。
これらの設定は、/etc/gitlab/gitlab.rbの内容を書き替えて設定します。
node exporterの設定は次の部分のコメントを解除、または書き替えます。
node_exporter['enable'] = true
node_exporter['listen_address'] = '0.0.0.0:9100'
redis exporterの設定は次の部分のコメントを解除、または書き替えます。
redis_exporter['enable'] = true
redis_exporter['listen_address'] = '0.0.0.0:9121'
postgres exporterの設定は次の部分のコメントを解除、または書き替えます。
postgres_exporter['enable'] = true
postgres_exporter['listen_address'] = '0.0.0.0:9187'
gitlab monitor exporterの設定は次の部分のコメントを解除、または書き替えます。
gitlab_monitor['enable'] = true
gitlab_monitor['listen_address'] = '0.0.0.0:9168'
それぞれtrue
を設定することで、exporterが有効になります。
その他にも、Prometheusは外部にあることを想定しているため、listen_address
を変更することで、バインドアドレスを変更し、localhost以外からもアクセスできるようにします。
設定をしたら、gitlab-ctl reconfigure
を実行して設定を反映させます。さらに念のためgitlab-ctl restart
を実行して再起動させます。
GitLab Prometheus metricsの設定
GitLab Prometheus metricsの設定は、ブラウザでGitLabにアクセスしてAdmin > Settingsというように進み、「Metrics - Prometheus」の「Enable Prometheus Metrics」にチェックを入れて保存することでします。
メトリクスは、GitLabにhttps://gitlab.example.com
でアクセスする場合、https://gitlab.example.com/-/metrics
のようにアクセスして取得します。
そのため、URLを知って入れば誰でもメトリクスを取得できるためセキュリティとしてまずいです。
なので、GitLabではデフォルトの設定で、メトリクスに特定のIPからしかアクセスできないようになっています。
このIPの設定は、/etc/gitlab/gitlab.rbでします。
gitlab.rbの次の設定を書き替えます。
gitlab_rails['monitoring_whitelist'] = [ '127.0.0.0/8', '10.0.0.0/8’ ]
IPにはサブネットマスクが使えます。
これはあくまでも例なので、このIPの部分はそれぞれの環境にあったもので置き替えてください。
設定ファイルを変えたので、gitlab-ctl reconfigure
を実行して設定を反映させる必要があります。
さらに、GitLab Prometheus metricsの設定は、GitLabの再起動をする必要があるので、gitlab-ctl restart
を実行してGitLabの再起動をします。
Prometheusの設定
GitLabのexporterを起動したらPrometheusの方に設定を追加して、GitLabのexporterのメトリクスを取得するようにしましょう。
Prometheusの設定ファイルであるprometheus.ymlに次の内容を追加します。
- job_name: gitlab
metrics_path: '/-/metrics'
static_configs:
- targets: ['gitlab.example.com:80']
- job_name: gitlab-monitor-database
metrics_path: '/database'
static_configs:
- targets: ['gitlab.example.com:9168']
- job_name: gitlab-monitor-process
metrics_path: '/process'
static_configs:
- targets: ['gitlab.example.com:9168']
- job_name: gitlab-monitor-sidekiq
metrics_path: '/sidekiq'
static_configs:
- targets: ['gitlab.example.com:9168']
- job_name: gitlab-redis
static_configs:
- targets: ['gitlab.example.com:9121']
- job_name: gitlab-postgres
static_configs:
- targets: ['gitlab.example.com:9187']
GitLabへは、仮にgitlab.example.com
でアクセスできるとしたものなので、それぞれの環境に応じて、この値は変える必要があります。
補足しておくと、GitLab monitor exporterは3つのメトリクスを公開しています。
それぞれ、/database``/process``/sidekiq
です。
そのため、デフォルトのメトリクスのパスである/metrics
にアクセスるとNot Foundとなるので、それぞれにあったパスをmetrics_path
で指定しています。
他にも、GitLab Prometheus monitorも/-/metrics
というパスにアクセスする必要があるためmetrics_path
を指定しています。
さいごに
GitLabのexporterに関して、あまりにも情報が少なく感じました。
特に、GitLab monitor exporterに関してはドキュメントにmetrics_path
に関する情報がなく、他の所に情報がないかと探したら、リポジトリのREADME.mdに情報がありました。
同じように悩んでいる他の方の参考になれば幸いです。