Kubernetesの監視

GitLab 9.0で導入されました

GitLabはKubernetesのメトリクスを自動的に検出して監視する機能をサポートしています。

要件

Prometheusと Kubernetesインテグレーションサービスを有効にする必要があります。

対応メトリクス

  • 平均メモリ使用量(MB):

     avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024
    
  • 平均CPU使用率(%):

     avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))
    

Kubernetesメトリクスを監視するためのPrometheusの設定

Kubernetesメトリクスを収集するためには、Prometheusをクラスターにデプロイし、適切に設定する必要があります。 GitLabはそのための2つの方法をサポートしています:

環境の指定

ある環境に対して関連するCPUとメモリのメトリクスを分離して表示するには、GitLabがどのコンテナを実行しているかを検出する方法が必要です。 これらのメトリクスはコンテナレベルで追跡されるため、従来のKubernetesラベルは利用できません。

代わりに、デプロイメント名またはデーモンセット名は、CI_ENVIRONMENT_SLUGで始まる必要があります。 必要に応じて、- および追加コンテンツを続けることができます。 たとえば、review-homepage-5620p5 というデプロイメント名は、review/homepage 環境に一致します。

カナリア・メトリクスの表示

GitLab 10.2で導入されました。

GitLabはまた、カナリアデプロイのKubernetesメトリクスを収集し、現在デプロイされているバージョンとカナリアを簡単に比較できるようにします。

これらのメトリクスは、カナリア・メトリクスを分離するために、デプロイまたはデーモン・セット名が$CI_ENVIRONMENT_SLUG-canaryで始まることを期待します。

カナリア・メトリクスに対応

  • 平均メモリ使用量(MB)

     avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024
    
  • 平均CPU使用率(%)

     avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))