VTSメトリクスによるNGINX Ingress Controllerの監視

GitLab 9.5で導入されました

注:NGINXIngressバージョン0.16以上では、VTSベースのメトリクスとは異なるPrometheusメトリクスが組み込まれています。

GitLabには、Kubernetes NGINX Ingressコントローラを自動的に検出して監視するためのサポートがあります。 これは、バージョン0.9.0から 0.15.xに含まれるVTS Prometheusメトリクスエクスポーターを活用することで提供されます。

要件

Prometheusインテグレーションがアクティブである必要があります。

対応メトリクス

名称 クエリ
スループット(req/秒) sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code)
待ち時間 (ms) avg(nginx_upstream_response_msecs_avg{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"})
HTTPエラー率(%) sum(rate(nginx_upstream_responses_total{status_code="5xx", upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) / sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) * 100

NGINX Ingressモニタリングの設定

GitLabのKubernetesクラスター・インテグレーションを使用してNGINX Ingressをデプロイした場合、自動的にPrometheusによって監視されます。

その他のデプロイについては、インストールに応じていくつかの設定が必要です:

  • NGINX Ingressのバージョンは0.9.0以上で、メトリクスが有効になっている必要があります。
  • NGINX IngressはPrometheusモニタリング用にアノテーションされるべきです。
  • Prometheus はアノテーションされたポッドを監視するように設定する必要があります。

マネージドNGINX Ingressデプロイについて

NGINX Ingressは、公式のHelmチャートを使用して、gitlab-managed-apps ネームスペースにデプロイされます。 NGINX Ingressは、ロードバランサーのエンドポイント経由で外部からアクセス可能になります。

NGINXはPrometheusモニタリング用に設定されています:

  • enable-vts-status: "true"Prometheusのメトリクスをエクスポートします。
  • prometheus.io/scrape: "true"自動検出を有効にするには
  • prometheus.io/port: "10254"でメトリクス・ポートを指定します。

GitLabにデプロイされたPrometheusサービスと組み合わせて使用すると、レスポンスメトリクスが自動的に収集されます。

Prometheus モニタリングのための NGINX Ingress の手動設定

NGINXIngressのバージョン0.9.0以降では、Prometheusメトリクスのエクスポートがビルトインでサポートされています。 有効にするには、ConfigMap設定にenable-vts-status: "true"。 有効にすると、Prometheusメトリクスのエンドポイントがポート10254で実行されるようになります。

次に、IngressをPrometheusモニタリング用にアノテーションする必要があります。 2つの新しいアノテーションを追加する必要があります:

  • prometheus.io/scrape: "true"
  • prometheus.io/port: "10254"

これらの設定の管理は、NGINX Ingressのデプロイ方法によって異なります。公式Helmチャート経由でデプロイした場合は、必要なアノテーションとともにcontroller.stats.enabled 、メトリクスを有効にすることができます。 また、KubernetesダッシュボードでNGINX Ingress YAMLを直接編集することも可能です。

環境ラベルの指定

与えられた環境に対して関連するメトリクスを分離して表示するためには、GitLabはどのラベルが関連付けられているかを検出する方法が必要です。 これを行うために、GitLabは適切なラベルを持つメトリクスを検索します。 この場合、upstream ラベルは<KUBE_NAMESPACE>-<CI_ENVIRONMENT_SLUG>-*という形式でなければなりません。

アプリのデプロイにAuto Deployを使用した場合、この形式が自動的に使用され、あなたがアクションを起こさなくてもメトリクスが検出されます。