4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitLabAdvent Calendar 2021

Day 7

Omnibus GitLabのexporterをプロキシでまとめて外部のPrometheusで監視する。

Last updated at Posted at 2021-12-06

初めて書くのでお手柔らかにお願いします〜

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
ruby=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

GitHub

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

監視自体はこれで完成!:tada:

Grafana

$ apt install grafana

Dashboardを移植

GitLab OmnibusのGrafanaにはダッシュボードが用意されているのでそれらを書き換えて移植します。

元のファイルの場所

  • /var/opt/gitlab/provisioning
  • /opt/gitlab/embedded/service/grafana-dashboards

データソースやダッシュボードの定義ファイルを/etc/grafana/provisioningに下記のように配置します。

GitHub

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

image.png

移植完了!:tada:

GitLab Omnibusはビルトインでいろいろ含まれていてそれぞれコンフィグなどのファイルがたくさんあるので探し回るだけでも楽しかったです!

参考 / リポジトリ

Monitoring GitLab with Prometheus 

QubitProducts/exporter_exporter

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?