Как настроить алертинг по логам

VMRule и VMAlert для VictoriaLogs.

В платформе «Штурвал» для клиентских кластеров и кластера управления логи хранятся в VictoriaLogs. При необходимости можно настроить оповещение (алертинг) по логам кластера — через кастомные ресурсы VMRule и VMAlert. Ниже — пошаговая инструкция с примерами.


Предварительные условия


Шаг 1: Создание VMRule

VMRule задаёт правило: при каком условии в логах срабатывает алерт.

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMRule
metadata:
  labels:
    cluster: clustername
    role: user
    vmalert-type: vlogs
  name: vlogs-rule
  namespace: clustername
spec:
  groups:
    - headers:
        - 'ProjectID: 4'
      interval: 5m
      name: vlogsgroup
      type: vlogs
      rules:
        - alert: vlogsrule
          annotations:
            description: 'SSC {{ index $labels "objectRef.name" }} was updated by {{ index $labels "user.username" }} in the last {{$for}}'
          expr: objectRef.resource:"shturvalserviceconfigs" verb:~"patch|update" | stats by(objectRef.name, objectRef.resource, user.username) count() as updateSSC | filter updateSSC:>1
          labels:
            source: vlogs
ПараметрОписание
metadata.labels.clusterИмя кластера, где требуется алертинг по логам
metadata.nameИмя правила
metadata.namespaceНеймспейс кластера (имя кластера)
groups.nameИмя группы правил
groups.headersProjectID в VictoriaLogs. Можно указать только один проект. Соответствие проекта и идентификатора смотрите в таблице ниже
groups.typevlogs
rules.alertИмя алерта (оповещения)
rules.exprВыражение для оповещения по логам (поле expr в правиле)

Согласно установленному правилу в expr оповещения будут приходить при изменении сервисов (SSC) в кластере.

Проект в UIProjectIDОписание
kube system namespaces1Системные логи /var/log/containers/*.log
cluster namespace2Пользовательские неймспейсы; отдельный поток в values, по умолчанию отключён
kube events3События объектов кластера
kube audit4Аудит API Kubernetes
journald5shturvald, containe

Шаг 2: Создание VMAlert

VMAlert оценивает правила и отправляет алерты в Alertmanager.

apiVersion: operator.victoriametrics.com/v1beta1
kind: VMAlert
metadata:
  labels:
    cluster: clustername
  name: vlogs
  namespace: clustername
spec:
  datasource:
    url: http://vlogs-logs.clustername:9428
  evaluationInterval: 30s
  externalLabels:
    cluster: clustername
  extraArgs:
    rule.defaultRuleType: vlogs
  notifiers:
    - selector:
        labelSelector:
          matchLabels:
            app.kubernetes.io/instance: shturval-metrics-collector
            app.kubernetes.io/name: vmalertmanager
        namespaceSelector:
          matchNames:
            - victoria-metrics
  remoteRead:
    url: http://shturval-monitoring-vmselect.victoria-metrics:8481/select/monitoring_id:3/prometheus
  remoteWrite:
    url: http://shturval-monitoring-vminsert.victoria-metrics:8480/insert/monitoring_id:3/prometheus
  resources:
    limits:
      cpu: 200m
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 128Mi
  ruleSelector:
    matchLabels:
      vmalert-type: vlogs
      cluster: clustername
  ruleNamespaceSelector: {}
  selectAllByDefault: false
ПараметрОписание
metadata.namespaceНеймспейс кластера, в котором настраивается алертинг по логам
metadata.labels.clusterИмя кластера, в котором настраивается алертинг по логам
spec.datasource.urlURL источника логов кластера: http://vlogs-logs.<имя_кластера>:9428
externalLabels.clusterИмя кластера, в котором настраивается алертинг по логам
spec.notifiers.selectorСелектор для выбора Alertmanager вместо прямого URL
labelSelector.matchLabelsЛейблы, по которым выбирается Alertmanager: app.kubernetes.io/instance — имя экземпляра сервиса; app.kubernetes.io/name — имя компонента Alertmanager
namespaceSelector.matchNamesНеймспейсы, в которых искать Alertmanager
spec.remoteRead.urlVictoriaMetrics Select; вместо monitoring_id укажите значение аннотации кластера с таким ключом
spec.remoteWrite.urlVictoriaMetrics Insert; аналогично monitoring_id
spec.resourcesРесурсы requests и limits (например: limits cpu 200m, memory 256Mi; requests cpu 100m, memory 128Mi)

Шаг 3: Загрузка в платформу

В кластере управления с помощью импорта манифестов, загрузите VMRule и VMAlert.

Скриншот интерфейса платформы

Импорт манифестов алертинга по логам


Проверка алертинга

Проверить алертинг по логам можно с помощью уведомления на devmail. Настройте devmail: создайте получателя типа email в разделе Оповещения → Получатели. Подробнее — пример настройки отправки уведомления на devmail.