Как получить метки модуля в Prometheus при извлечении метрик из Kube State Metrics - PullRequest
0 голосов
/ 25 октября 2018

У меня есть модуль Prometheus, работающий вместе с моим модулем Kube-State-Metrics (KSM).KSM собирает все метрики из всех модулей во всех пространствах имен в кластере.Prometheus просто извлекает метрики из KSM - таким образом, Prometheus не нужно очищать отдельные модули.

При развертывании модулей их развертывание имеет определенные метки, связанные с модулями, как показано ниже.У них есть две важные метки: APP и TEAM :

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    APP: AppABC
    TEAM: TeamABC
...

В Prometheus моя конфигурация очистки выглядит следующим образом:

scrape_configs:
  - job_name: 'pod monitoring'
    honor_labels: true
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - action: labelmap
      regex: __meta_kubernetes_pod_label_(.+)
...

Проблема в том, что когда Прометей собирает информацию из метрик состояния куба, он перезаписывает APP с помощью kube-state-metrics.Например, этот показатель ниже относится к приложению под названием "AppABC" , но Прометей переписал метку app на kube-state-metrics.

kube_pod_container_status_restarts_total{
    app="kube-state-metrics",
    container="appabccontainer",
    job="pod monitoring",
    namespace="test-namespace",
    pod="appabc-766cbcb68d-29smr"
}

Есть ли у меня что-нибудь, чтобы очиститьметрики из kube-state-метрики, НО хранить метки APP и TEAM вместе, не перезаписывая их?

РЕДАКТИРОВАТЬ - я понялон вышел

Моя проблема: Для моего развертывания и модулей определены определенные метки (APP, TEAM).Kube-state-metrics получает их от K8 API.Когда Прометей очищает метрики состояния куба, он не имеет этих меток.

Моя цель: Экспонировать эти метки в Прометей.

Мое решение: Используя PromQL, вы можете группировать по.Итак, в моем файле prometheus-rules.yaml я изменил это:

expr: kube_pod_status_phase{phase="Failed"} > 0

на следующее:

expr: kube_pod_status_phase{phase="Failed"} * on (pod,namespace) group_right kube_pod_labels > 0

Итак, мое новое правило оповещения выглядит так:

- name: Pod_Failed
  rules:
  - alert: pod_failed
    expr: kube_pod_status_phase{phase="Failed"} * on (pod,namespace) group_right kube_pod_labels > 0
    labels:
      appname: '{{ $labels.label_APP }}' # This is what I wanted to capture
      teamname: '{{ $labels.label_TEAM }}' # This is what I wanted to capture
    annotations:
      summary: 'Pod: {{ $labels.pod }} is down'
      description: 'Pod: {{ $labels.pod }} is down in {{ $labels.namespace }} namespace.'

1 Ответ

0 голосов
/ 05 ноября 2018

Решение: Используя PromQL, вы можете группировать по.Поэтому в моем файле prometheus-rules.yaml я изменил это:

expr: kube_pod_status_phase{phase="Failed"} > 0

на следующее:

expr: kube_pod_status_phase{phase="Failed"} * on (pod,namespace) group_right kube_pod_labels > 0

Поэтому мое новое правило оповещения выглядит так:

- name: Pod_Failed
  rules:
  - alert: pod_failed
    expr: kube_pod_status_phase{phase="Failed"} * on (pod,namespace) group_right kube_pod_labels > 0
    labels:
      appname: '{{ $labels.label_APP }}' # This is what I wanted to capture
      teamname: '{{ $labels.label_TEAM }}' # This is what I wanted to capture
    annotations:
      summary: 'Pod: {{ $labels.pod }} is down'
      description: 'Pod: {{ $labels.pod }} is down in {{ $labels.namespace }} namespace.'
...