初めて書くのでお手柔らかにお願いします〜
GitLabにはビルトインでPrometheusと様々なexporterがあるが、外部のPrometheusからアクセスする場合にそれぞれのexporterの設定をしないといけないのでexporter-exporter
(exporterのプロキシ)を使って楽する。
※ 正直どちらのやり方でも手間は変わらないです。
ファイアウォールにあまりポートを開けたくない場合は良いかもしれない。
最終構成
- Ubuntu (GitLab用)
- GitLab Omnibus
- exporter-exporter (systemdで管理)
- その他お好みでExporter
- Ubuntu(監視用)
- Prometheus
- alertmanager
- Grafana
※ GitLab Omnibusのインストールに関しては書いてないので公式ドキュメントや先人の方々の記事を参考にしてください。
exporter_exporter
等でリバースプロキシを介さない場合はgitlab.rb
の*_exporter['listen-address'] = localhost:*
を編集し、外部に設置するprometheusのホストを許可する必要があります。
GitLabのconfig
ビルトインのPrometheus・alertmanager・Grafanaを無効化
$ vim /etc/gitlab/gitlab.rb
# ...前略
################################################################################
## Prometheus
##! Docs: https://docs.gitlab.com/ee/administration/monitoring/prometheus/
################################################################################
# ...中略
prometheus['enable'] = false
# ...中略
################################################################################
## Prometheus Alertmanager
################################################################################
alertmanager['enable'] = false
# ...中略
################################################################################
## Grafana Dashboards
##! Docs: https://docs.gitlab.com/ee/administration/monitoring/prometheus/#prometheus-as-a-grafana-data-source
################################################################################
grafana['enable'] = false
# ...後略
exporter-exporter
ReleaseからDL
今回Ubuntuなのでlinux-amd64
# DLして解凍
$ wget https://github.com/QubitProducts/exporter_exporter/releases/download/v0.4.5/exporter_exporter-0.4.5.linux-amd64.tar.gz
$ tar xf exporter_exporter-0.4.5.linux-amd64.tar.gz
バイナリを配置
$ cp ./exporter_exporter-0.4.5.linux-amd64/exporter_exporter /usr/local/bin
configファイル作成
今回はgitlab-ceなのでpgbouncer_exporter
はコメントアウトしています。
$ vim /etc/prometheus/expexp.yml
modules:
################################################################################
## Managed by GitLab Omnibus
################################################################################
redis:
method: http
http:
port: 9121
postgres:
method: http
http:
port: 9187
node:
method: http
http:
port: 9100
gitlab-workhorse:
method: http
http:
port: 9229
gitlab-rails:
method: http
http:
port: 8080
path: '/-/metrics'
gitlab-sidekiq:
method: http
http:
port: 8082
gitlab_exporter_database:
method: http
http:
port: 9168
path: '/database'
gitlab_exporter_sidekiq:
method: http
http:
port: 9168
path: '/sidekiq'
gitlab_exporter_ruby:
method: http
http:
port: 9168
path: '/ruby'
gitaly:
method: http
http:
port: 9236
# pgbouncer:
# method: http
# http:
# port: 9188
systemdで管理
Unitファイル
$ vim /lib/systemd/system/prometheus-exporter-exporter.service
[Unit]
Description=Exporter Exporter - prometheus exporter proxy
Documentation=https://github.com/QubitProducts/exporter_exporter
After=network-online.target
[Service]
ExecStart=/usr/local/bin/exporter_exporter -config.file '/etc/prometheus/expexp.yaml'
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}
[Install]
WantedBy=multi-user.target
実行
# Unitファイルを読み込ませる
$ systemctl daemon-reload
# 実行
$ systemctl start prometheus-exporter-exporter.service
$ systemctl status prometheus-exporter-exporter.service
$ curl localhost:9999
<h2>Exporters:</h2>
<ul>
<li><a href="/proxy?module=gitaly">gitaly</a></li>
<li><a href="/proxy?module=gitlab-rails">gitlab-rails</a></li>
<li><a href="/proxy?module=gitlab-sidekiq">gitlab-sidekiq</a></li>
<li><a href="/proxy?module=gitlab-workhorse">gitlab-workhorse</a></li>
<li><a href="/proxy?module=gitlab_exporter_database">gitlab_exporter_database</a></li>
<li><a href="/proxy?module=gitlab_exporter_ruby">gitlab_exporter_ruby</a></li>
<li><a href="/proxy?module=gitlab_exporter_sidekiq">gitlab_exporter_sidekiq</a></li>
<li><a href="/proxy?module=node">node</a></li>
<li><a href="/proxy?module=postgres">postgres</a></li>
<li><a href="/proxy?module=redis">redis</a></li>
</ul>
<a>
タグのURIではそれぞれのexporterのメトリクスを見ることができます。
Prometheus
以降はGitLabを動かしているホストではなく監視用のホストで構築
$ apt install prometheus alertmanager
$ vim /etc/prometheus/prometheus.yml
※ gitlab.example.com
はGitLabとexporter_exporterを配置したホストのドメインまたはIPアドレスに置き換えてください。
global:
scrape_interval: 15s
scrape_timeout: 15s
external_labels: {}
remote_read: []
remote_write: []
rule_files: []
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
scrape_configs:
################################################################################
## Prometheus
################################################################################
- job_name: prometheus
static_configs:
- targets:
- 127.0.0.1:9090
################################################################################
## Managed by gitlab-ce
################################################################################
- job_name: redis
metrics_path: /proxy
params:
module:
- redis
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: postgres
metrics_path: /proxy
params:
module:
- postgres
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: node
metrics_path: /proxy
params:
module:
- node
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab-workhorse
metrics_path: /proxy
params:
module:
- gitlab-workhorse
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab-rails
metrics_path: /proxy
params:
module:
- gitlab-rails
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab-sidekiq
metrics_path: /proxy
params:
module:
- gitlab-sidekiq
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab_exporter_database
metrics_path: /proxy
params:
module:
- gitlab_exporter_database
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab_exporter_sidekiq
metrics_path: /proxy
params:
module:
- gitlab_exporter_sidekiq
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitlab_exporter_ruby
metrics_path: /proxy
params:
module:
- gitlab_exporter_ruby
static_configs:
- targets:
- gitlab.example.com:9999
- job_name: gitaly
metrics_path: /proxy
params:
module:
- gitaly
static_configs:
- targets:
- gitlab.example.com:9999
# - job_name: pgbouncer
# metrics_path: /proxy
# params:
# module:
# - pgbouncer
# static_configs:
# - targets:
# - gitlab.example.com:9999
$ systemctl restart prometheus
監視自体はこれで完成!
Grafana
$ apt install grafana
Dashboardを移植
GitLab OmnibusのGrafanaにはダッシュボードが用意されているのでそれらを書き換えて移植します。
元のファイルの場所
/var/opt/gitlab/provisioning
/opt/gitlab/embedded/service/grafana-dashboards
データソースやダッシュボードの定義ファイルを/etc/grafana/provisioning
に下記のように配置します。
PromQLのインスタンス指定のポートをexporter_exporter用の9999に書き換えています。
/etc/grafana
└── provisioning
├── dashboard_options
│ └── gitlab_omnibus
│ ├── gitaly.json
│ ├── overview.json
│ ├── postgresql.json
│ ├── rails-app.json
│ ├── redis.json
│ └── service_platform_metrics.json
├── dashboards
│ └── gitlab_dashboards.yml
└── datasources
└── gitlab_datasources.yml
$ systemctl restart grafana-server.service
移植完了!
GitLab Omnibusはビルトインでいろいろ含まれていてそれぞれコンフィグなどのファイルがたくさんあるので探し回るだけでも楽しかったです!