2021年2月15日月曜日

Gitlab で外部の Prometheus と連携する方法

概要

Omnibus Gitlab は内部で Prometheus のプロセスを管理しています
今回は Prometheus サーバを構築しその Prometheus サーバと Gitlab を連携する方法を紹介します

環境

  • Ubuntu 18.04
  • Omnibus Install Gitlab-ee 13.8.0
  • Prometheus 2.24.1

Gitlab 側の exporter の設定

まずは gitlab.rb を編集します
Omnibus Install した Gitlab の場合いろいろな場所に exporter が設置されています
それらすべての exporter を外部に設置する Prometheus からアクセスできるようにします
exporter によって設定する項目がかなりことなるので注意が必要です
192.168.100.10 は外部に設置する Prometheus の IP アドレスになります

  • vim /etc/gitlab/gitlab.rb
prometheus['enable'] = false

# for gitlab_workhorse_exporter (9229/metrics)
gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"

# for gitaly_exporter (9236/metrics)
gitaly['prometheus_listen_addr'] = "0.0.0.0:9236"

# for node_exporter (9100/metrics)
node_exporter['listen_address'] = '0.0.0.0:9100'

# for gitlab_exporter (9168/database, 9168/metrics, 9168/sidekiq)
gitlab_exporter['listen_address'] = '0.0.0.0'
gitlab_exporter['listen_port'] = '9168'

# for redis_exporter (9121/metrics)
# redis_exporter['listen_address'] = '0.0.0.0:9121'

# for postgres_exporter (9187/metrics)
postgres_exporter['listen_address'] = '0.0.0.0:9187'

# for gitlab-sidekiq, gitlab-rails exporter (8082/metrics, 8080/-/metrics)
gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.100.10']
gitlab_rails['prometheus_address'] = '192.168.100.10:9090'
puma['listen'] = '0.0.0.0'
puma['port'] = 8080
sidekiq['listen_address'] = '0.0.0.0'

# for nginx exporter (8060/metrics)
nginx['status']['options'] = {
  "server_tokens" => "off",
  "access_log" => "off",
  "allow" => "192.168.100.10",
  "deny" => "all",
}

設定変更したら reconfigure しましょう

  • gitlab-ctl reconfigure

ちなみに今回は redis-server はすでに外部に移行しており外部のサーバに exporter を設置していないためコメントアウトしています
もし外部に移行した他のコンポーネントがありかつそこに exporter が設置してある場合は後述する promethues.yml にそこのエンドポイントを記載しましょう

Prometheus サーバの構築

次に Prometheus サーバを構築します
ポイントは外部に公開した Omnibus Gitlab の exporter にちゃんとアクセスできることです
192.168.100.11 は各種 exporter が起動している Omnibus Gitlab の IP になります
もし redis のようにすでに別のインスタンスに移行しておりそこに exporter がある場合はそのエンドポイントを記載しましょう

  • vim prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:

scrape_configs:
  - job_name: nginx
    static_configs:
      - targets:
        - 192.168.100.11:8060
  - job_name: postgres
    static_configs:
      - targets:
        - 192.168.100.11:9187
  - job_name: node
    static_configs:
      - targets:
        - 192.168.100.11:9100
  - job_name: gitlab-workhorse
    static_configs:
      - targets:
        - 192.168.100.11:9229
  - job_name: gitlab-rails
    metrics_path: "/-/metrics"
    static_configs:
      - targets:
        - 192.168.100.11:8080
  - job_name: gitlab-sidekiq
    static_configs:
      - targets:
        - 192.168.100.11:8082
  - job_name: gitlab_exporter_database
    metrics_path: "/database"
    static_configs:
      - targets:
        - 192.168.100.11:9168
  - job_name: gitlab_exporter_sidekiq
    metrics_path: "/sidekiq"
    static_configs:
      - targets:
        - 192.168.100.11:9168
  - job_name: gitlab_exporter_metrics
    metrics_path: "/metrics"
    static_configs:
      - targets:
        - 192.168.100.11:9168
  - job_name: gitaly
    static_configs:
      - targets:
        - 192.168.100.11:9236

あとは Prometheus サーバを起動します
今回はコンテナで起動していますがプロセスで起動しても OK です

  • docker run -d -p 9090:9090 -v $(pwd):/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml

動作確認

Promethues の管理画面にアクセスして Status -> Targets を確認しましょう
すべてのステータスがグリーンになっていれば OK です

Grafana 連携

今回の場合 Promethues は外部に移行しましたが Grafana は相変わらず Omnibus Gitlab と同じ場所にあります
その場合 Grafana は Promethues が同じ場所にあると思って動作し続けるのでうまく動作しません
なので Grafana のデータソースなどを修正する必要があります
なおこの作業は Grafana の admin 権限が必要になるので Omnibus Gitlab の Grafana で admin ログインできるようにしておきましょう (参考)

まずデータソースを新規で作成します
URL には Promethues のエンドポイントを入力しましょう

次に既存のダッシュボードをコピーします
以下では Gitaly のダッシュボードをコピーしています
コピーする理由はデフォルトで用意されている Grafana のダッシュボードは readonly になっているためデータソースなどが変更できないためです
(デフォルトの設定はファイルに記載されているので直接そのファイルを編集してデータソースを変更しても OK かなと思います)

コピーしたダッシュボードのデータソースを変更します

あとはダッシュボード内にあるペインのデータソースも変更します
ダッシュボードのデータソースを変更してもペイン側は自動で書き換わらないので手動でそれぞれのペインのデータソースも変更します

こんな感じでデータが見えるようになれば OK です

BadGateway が出る場合はデータソースが正しく追加されていない可能性があります
Garafana から Promethues のエンドポイントにうまく疎通できているか確認してから再度データソースを追加してみてください

参考サイト

0 件のコメント:

コメントを投稿