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」にチェックを入れて保存することでします。

normal_94241f1d-104e-44cb-a4d0-0d9b580f21f2.png

メトリクスは、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に情報がありました。

同じように悩んでいる他の方の参考になれば幸いです。