Prometheus による GitLab の監視

注:

  • Prometheusとこのページに記載されている様々なExporterはOmnibus GitLabパッケージにバンドルされています。 追加された時期については各Exporterのドキュメントを確認してください。 ソースからのインストールについては、自分でインストールする必要があります。 以降のリリースでは、GitLabメトリクスが追加される予定です。
  • GitLab 9.0では、Prometheusサービスがデフォルトでオンになっています。
  • Prometheusとそのexporterはユーザーを認証しないので、アクセスできる人なら誰でも利用できます。

Prometheusは強力な時系列モニタリングサービスで、GitLabやその他のソフトウェア製品をモニタリングするための柔軟なプラットフォームを提供します。 GitLabはPrometheusですぐにモニタリングできるため、GitLabサービスの高品質な時系列モニタリングに簡単にアクセスできます。

概要

Prometheusは、定期的にデータソースに接続し、様々なexporterを通じてパフォーマンスメトリクスを収集することで機能します。 モニタリングデータを表示して作業するには、Prometheusに直接接続するか、Grafanaのようなダッシュボードツールを利用します。

Prometheus の設定

注:ソースからインストールする場合は、自分でインストールして設定する必要があります。

GitLab9.0から、PrometheusとそのExporterはデフォルトでオンになっています。 Prometheusはgitlab-prometheus ユーザーとして実行され、http://localhost:9090をリッスンします。 デフォルトでは、PrometheusはGitLabサーバー自体からしかアクセスできません。各Exporterは、個別に無効にしない限り、Prometheusの監視対象として自動的に設定されます。

PrometheusとそのすべてのExporter、および今後追加されるExporterを無効にします:

  1. 編集/etc/gitlab/gitlab.rb
  2. 以下の行を追加または検索してコメントアウトし、falseに設定されていることを確認してください:

    prometheus_monitoring['enable'] = false
    
  3. ファイルを保存し、変更を有効にするために GitLab を再設定します。

Prometheusがリッスンするポートとアドレスの変更

注意:Omnibus GitLab 8.17で以下の変更が追加されました。可能ではありますが、Prometheusがリッスンするポートを変更することは推奨されません。 GitLabサーバーで稼働している他のサービスに影響を与えたり、競合したりする可能性があります。 自己責任で行ってください。

GitLabサーバーの外部からPrometheusにアクセスするには、prometheus['listen_address']でFQDNまたはIPを設定する必要があります。 Prometheusがリッスンするアドレス/ポートを変更するには、 でFQDNまたはIPを設定する必要があります:

  1. 編集/etc/gitlab/gitlab.rb
  2. 以下の行を追加するか、または見つけてコメントを外します:

    prometheus['listen_address'] = 'localhost:9090'
    

    localhost:9090 を Prometheus にリッスンさせたいアドレスまたはポートに置き換えてください。localhost以外のホストに Prometheus へのアクセスを許可したい場合は、ホストを省略するか、0.0.0.0 を使用して公開アクセスを許可してください:

    prometheus['listen_address'] = ':9090'
    # or
    prometheus['listen_address'] = '0.0.0.0:9090'
    
  3. ファイルを保存し、変更を有効にするためにGitLabを再設定します。

カスタムスクレイプ設定の追加

OmnibusのGitLabバンドルされたPrometheusのために、Prometheusのスクレープターゲット・コンフィギュレーション構文を使って/etc/gitlab/gitlab.rbprometheus['scrape_configs'] を編集することで、追加のスクレープターゲットを設定することができます。

以下はhttp://1.1.1.1:8060/probe?param_a=test&param_b=additional_testをスクレイピングするための設定例です:

prometheus['scrape_configs'] = [
  {
    'job_name': 'custom-scrape',
    'metrics_path': '/probe',
    'params' => {
      'param_a' => ['test'],
      'param_b' => ['additional_test']
    },
    'static_configs' => [
      'targets' => ['1.1.1.1:8060'],
    ],
  },
]

外部Prometheusサーバーの使用

注意:PrometheusとほとんどのExporterは認証をサポートしていません。 ローカルネットワーク外に公開することはお勧めしません。

GitLabを外部のPrometheusサーバーで監視できるようにするには、いくつかの設定変更が必要です。GitLabを複数ノードでデプロイする場合は、外部サーバーを推奨します。

外部の Prometheus サーバーを使用する場合:

  1. /etc/gitlab/gitlab.rbを編集します。
  2. バンドルされているPrometheusを無効にしてください:

    prometheus['enable'] = false
    
  3. 例えば、各バンドルサービスのエクスポータをネットワークアドレスでリッスンするように設定します:

    gitlab_exporter['listen_address'] = '0.0.0.0'
    sidekiq['listen_address'] = '0.0.0.0'
    gitlab_exporter['listen_port'] = '9168'
    node_exporter['listen_address'] = '0.0.0.0:9100'
    redis_exporter['listen_address'] = '0.0.0.0:9121'
    postgres_exporter['listen_address'] = '0.0.0.0:9187'
    gitaly['prometheus_listen_addr'] = "0.0.0.0:9236"
    gitlab_workhorse['prometheus_listen_addr'] = "0.0.0.0:9229"
    
  4. Prometheus専用インスタンスのインストールとセットアップを行います
  5. Prometheus サーバー IP アドレスを監視 IP ホワイトリストに追加します:

    gitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', '192.168.0.1']
    
  6. すべてのGitLab Rails(Puma/Unicorn、Sidekiq)サーバーで、PrometheusサーバーのIPアドレスとリッスンポートを設定します。 例えば、以下のようにします:

    gitlab_rails['prometheus_address'] = '192.168.0.1:9090'
    
  7. Nginxメトリクスをスクレイピングするには、PrometheusサーバIPを許可するようにNGINXを設定する必要があります。 例えば、以下のようになります:

    nginx['status']['options'] = {
          "server_tokens" => "off",
          "access_log" => "off",
          "allow" => "192.168.0.1",
          "deny" => "all",
    }
    
  8. GitLab を再設定して変更を適用します。
  9. Prometheus サーバーの設定ファイルを編集します。
  10. 各ノードの exporter を Prometheus サーバーのスクレープターゲット設定に追加します。 例えば、static_configsを使用したサンプルのスニペットです:

    scrape_configs:
      - job_name: nginx
        static_configs:
          - targets:
            - 1.1.1.1:8060
      - job_name: redis
        static_configs:
          - targets:
            - 1.1.1.1:9121
      - job_name: postgres
        static_configs:
          - targets:
            - 1.1.1.1:9187
      - job_name: node
        static_configs:
          - targets:
            - 1.1.1.1:9100
      - job_name: gitlab-workhorse
        static_configs:
          - targets:
            - 1.1.1.1:9229
      - job_name: gitlab-rails
        metrics_path: "/-/metrics"
        static_configs:
          - targets:
            - 1.1.1.1:8080
      - job_name: gitlab-sidekiq
        static_configs:
          - targets:
            - 1.1.1.1:8082
      - job_name: gitlab_exporter_database
        metrics_path: "/database"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitlab_exporter_sidekiq
        metrics_path: "/sidekiq"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitlab_exporter_process
        metrics_path: "/process"
        static_configs:
          - targets:
            - 1.1.1.1:9168
      - job_name: gitaly
        static_configs:
          - targets:
            - 1.1.1.1:9236
    
  11. Prometheus サーバーをリロードします。

パフォーマンス・メトリクスの表示

Prometheusがデフォルトで提供しているダッシュボードについては、http://localhost:9090

注:GitLabインスタンスでSSLが有効になっている場合、同じFQDNを使用するとHSTSのためGitLabと同じブラウザでPrometheusにアクセスできないことがあります。GitLab経由でアクセスできるようにする予定ですが、暫定的にいくつかの回避策があります:別のFQDNを使用する、サーバーIPを使用する、Prometheus用に別のブラウザを使用する、HSTSをリセットする、またはNGINXにプロキシさせる。

Prometheusによって収集されたパフォーマンスデータは、Prometheusコンソールで直接、または互換性のあるダッシュボードツールを介して表示することができます。 Prometheusインターフェースは、収集されたデータを扱うための柔軟なクエリ言語を提供し、出力を視覚化することができます。 より完全な機能を備えたダッシュボードには、Grafanaを使用することができ、Prometheusの公式サポートがあります。

Prometheusクエリのサンプル:

  • メモリが使用可能です: ((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) or ((node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes) / node_memory_MemTotal_bytes)) * 100
  • CPU使用率: 1 - avg without (mode,cpu) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
  • データ送信 rate(node_network_transmit_bytes_total{device!="lo"}[5m])
  • データを受け取りました: rate(node_network_receive_bytes_total{device!="lo"}[5m])

GrafanaデータソースとしてのPrometheus

Grafanaでは、Prometheusのパフォーマンスメトリクスをデータソースとしてインポートし、メトリクスをグラフやダッシュボードとしてレンダリングできるため、可視化に役立ちます。

単一サーバーのGitLabセットアップにPrometheusダッシュボードを追加するには:

  1. Grafanaで新しいデータソースを作成します。
  2. データソースに名前を付けます(GitLabなど)。
  3. タイプのドロップダウンボックスでPrometheus を選択します。
  4. PrometheusのリスナーアドレスをURLとして追加し、アクセスをBrowserに設定します。
  5. HTTP メソッドをGETに設定します。
  6. 設定を保存してテストし、動作することを確認します。

GitLabメトリクス

GitLab 9.3から導入されました。

GitLabは独自の内部サービス・メトリクスを監視し、/-/metrics エンドポイントで利用できるようにしています。他のexporterとは異なり、このエンドポイントはユーザ・トラフィックと同じURLとポートで利用できるため、認証が必要です。

➰ GitLabメトリクスについてもっと読む.

バンドル・ソフトウェアメトリクス

Omnibus GitLabにバンドルされているGitLab依存関係の多くは、Prometheusメトリクスをエクスポートするように事前に設定されています。

ノードエクスポーター

ノードエクスポーターを使用すると、メモリ、ディスク、CPU使用率など、さまざまなマシンリソースを測定できます。

ノードエクスポーターの詳細はこちらをご覧ください。

Redis エクスポーター

Redisエクスポータを使用すると、Redisのさまざまなメトリクスを測定できます。

Redisエクスポータの詳細はこちらをご覧ください。

PostgreSQL exporter

PostgreSQLエクスポータでは、PostgreSQLの様々なメトリクスを測定することができます。

PostgreSQLエクスポータの詳細はこちらをご覧ください。

PgBouncer exporter

PgBouncerエクスポータは様々なPgBouncerのメトリクスを測定することができます。

PgBouncer exporterについてもっと読む.

レジストリエクスポーター

レジストリ・エクスポーターを使用すると、さまざまなレジストリ・メトリクスを測定できます。

レジストリ・エクスポーターの詳細はこちら

GitLab エクスポーター

GitLab exporterでは、Redisやデータベースから取得した様々なGitLabメトリクスを測定することができます。

GitLab exporter についてもっと読む.

Kubernetesを監視するためのPrometheusの設定

  • GitLab 9.0で導入されました。
  • GitLab 9.4で導入されたポッドモニタリング。

GitLab サーバーが Kubernetes 内で動作している場合、Prometheus は各コンテナのパフォーマンスデータを含む、クラスター内のノードとアノテーションされたポッドからメトリクスを収集します。 これは、CI/CD 環境が同じクラスター内で動作している場合に特に便利で、Prometheusプロジェクトインテグレーションを使用してそれらを監視できます。

Kubernetesのモニタリングを無効にするには:

  1. /etc/gitlab/gitlab.rbを編集します。
  2. 以下の行を追加(または見つけてコメント解除)し、falseに設定します:

    prometheus['monitor_kubernetes'] = false
    
  3. ファイルを保存し、変更を有効にするために GitLab を再設定します。