Перейти к содержанию

CertManagerMetricsMissing / CertManagerMetricsMissingMultiaz

Что означает алерт

Алерт Условие Severity
CertManagerMetricsMissing в хранилище нет метрики certmanager_certificate_expiration_timestamp_seconds локального кластера (prod или stage) 15 минут critical
CertManagerMetricsMissingMultiaz нет той же метрики с cluster="prod-multiaz" 15 минут (только в prod) critical

Все остальные алерты cert-manager-alerts для этого кластера не работают, пока метрик нет. Сертификаты при этом продолжают обслуживаться, проблема в мониторинге.

Как собираются метрики

Кластер Сбор Путь до хранилища
prod PodMonitor cert-manager в namespace cert-manager (создан вручную, в репозиториях отсутствует), порт http-metrics vmagent prod → vminsert prod
prod-multiaz VMPodScrape cert-manager в namespace vm-stack (репозиторий vm-stack, ветка prod-multiaz), порт http vmagent multiaz → https://vmalertmanager.sarex.tech/insert/0/prometheus/api/v1/write (basic auth, секрет vmuser-multiaz-remote-write) → vmauth-remote-write prod → vminsert prod
stage VMPodScrape cert-manager в namespace vm-stack (репозиторий vm-stack, ветка stage), порт http vmagent stage → vminsert stage

Диагностика (по шагам)

  1. Проверить, что контроллер cert-manager работает:
kubectl --context <ctx> -n cert-manager get pods
  1. Проверить, что объект сбора существует:
kubectl --context yc-sarex-prod -n cert-manager get podmonitor cert-manager
kubectl --context <ctx> -n vm-stack get vmpodscrape cert-manager
  1. Проверить, что vmagent работает и видит цель:
kubectl --context <ctx> -n vm-stack get pods -l app.kubernetes.io/name=vmagent
kubectl --context <ctx> -n vm-stack logs -l app.kubernetes.io/name=vmagent -c vmagent --since=30m | grep -iE 'error|cert-manager'
  1. Для prod-multiaz: проверить запись в prod. Ошибки 401 в логе vmagent multiaz означают, что пароль в секрете vmuser-multiaz-remote-write в multiaz не совпадает с паролем в prod. Ошибки 503 или таймауты означают, что недоступен vmauth-remote-write в prod или маршрут в istio-config.
kubectl --context yc-sarex-prod -n vm-stack get pods | grep vmauth-remote-write
curl -s -o /dev/null -w '%{http_code}\n' -X POST https://vmalertmanager.sarex.tech/insert/0/prometheus/api/v1/write

Без учётных данных эндпоинт отвечает 401. Другой код означает проблему на пути до vmauth.

Как починить

Причина Действие
контроллер cert-manager не работает восстановить deployment контроллера
отсутствует VMPodScrape (prod-multiaz, stage) задеплоить репозиторий vm-stack соответствующей ветки
отсутствует PodMonitor (prod) создать заново по спецификации ниже
пароль VMUser изменён в prod скопировать секрет vmuser-multiaz-remote-write из yc-sarex-prod в yc-sarex-prod-multiaz (namespace vm-stack), перезапустить vmagent multiaz
не работает vmauth-remote-write проверить поды и образ cr.yandex/crp3ccidau046kdj8g9q/vm-stack/vmauth

Спецификация PodMonitor в prod (kubectl --context yc-sarex-prod apply -f):

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: cert-manager
  namespace: cert-manager
  labels:
    app: cert-manager
    app.kubernetes.io/instance: cert-manager
    app.kubernetes.io/name: cert-manager
spec:
  jobLabel: app.kubernetes.io/name
  podMetricsEndpoints:
    - port: http-metrics
  selector:
    matchExpressions:
      - key: app.kubernetes.io/name
        operator: In
        values: [cainjector, cert-manager, webhook]
      - key: app.kubernetes.io/instance
        operator: In
        values: [cert-manager]
      - key: app.kubernetes.io/component
        operator: In
        values: [cainjector, controller, webhook]

Критерий закрытия

  1. Метрика certmanager_certificate_expiration_timestamp_seconds для кластера снова появилась в хранилище.
  2. Алерт перешёл в inactive.