NGINX Ingress Controllerの監視

GitLab 11.7 で導入されました

注意:NGINX Ingressの0.16.0より前のバージョンには、組み込みのメトリクスとは異なるメトリクスをエクスポートするVTS Prometheusメトリクスエクスポーターが含まれています。

GitLabは、Kubernetes NGINX Ingressコントローラを自動的に検出して監視するためのサポートを持っています。 これは、Kubernetes NGINX Ingressコントローラのバージョン0.16.0以降に含まれる組み込みのPrometheusメトリクスを活用することで提供されます。

要件

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

対応メトリクス

名称 クエリ
スループット(req/秒) sum(label_replace(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m]), "status_code", "${1}xx", "status", "(.)..")) by (status_code)
待ち時間 (ms) sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_sum{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_count{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 1000
HTTPエラー率(%) sum(rate(nginx_ingress_controller_requests{status=~"5.*",namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 100

NGINX Ingressモニタリングの設定

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

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

  • NGINX Ingressのバージョンは0.16.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 YMLを直接編集することも可能です。

環境ラベルの指定

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

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