Как отправлять уведомления о каждой ошибке в моих журналах с помощью Promtail / Loki - AlertManager?

Я использую Promtail + Loki для сбора моих журналов, и я не могу понять, как я могу предупреждать о каждой ошибке в моих файлах журналов. Я также использую Prometheus, Alertmanager и Grafana. Я видел, как некоторым людям это удавалось, но никто из них не объяснил деталей. Чтобы быть ясным, я не ищу оповещения, которые остаются в состоянии FIRING, или панели инструментов Grafana со статусом "Alerting". Все, что мне нужно, это знать каждый раз, когда в одном из моих журналов возникает ошибка. Если это невозможно сделать именно таким образом, следующим лучшим решением будет очистка каждые X секунд, а затем предупреждение о чем-то вроде: "6 новых сообщений об ошибках".

4 ответа

В Loki v2.0 появился новый способ оповещения: https://grafana.com/docs/loki/latest/alerting/

Теперь вы можете настроить его прямо в Loki и отправить в Alertmanager.

Вы можете попробовать использовать экспортер mtail . Mtail позволяет «просматривать» журналы по одной строке за раз, поэтому вы можете настроить условие, чтобы оно соответствовало строке журнала «ошибка». Он будет увеличивать свой внутренний счетчик всякий раз, когда обнаруживает строку журнала ошибок, которую вы очищаете, а затем предупреждаете.

У меня такой же вопрос.

Немного изучив, я обнаружил, что AlertManager просто получает предупреждения и направляет их. Если у вас есть служба, которая может переводить поисковые запросы Loki в вызовы AlertManager API, это готово. И, наверное, у вас их уже двое.

Я нашел эту тему: https://github.com/grafana/loki/issues/1753

Что содержало это видео: https://www.youtube.com/watch?v=GdgX46KwKqo

Вариант 1: Использование графана

Они показывают, как создать оповещение из поиска в Grafana. Если вы просто добавите канал оповещения с типом "Prometheus Alertmanager", вы его получите.

Итак, Grafana выдаст предупреждение, а Prometheus-AlertManager будет управлять им.

Вариант 2: использование подсказки

Есть другой способ: добавить хвостик pipeline_stage чтобы создать метрику Prometheus с вашим поиском и управлять ею, как любой другой метрикой: просто добавьте предупреждение Prometheus и управляйте им из AlertManager.

Вы можете просто прочитать пример по предыдущей ссылке:

pipeline_stages:
  - match:
      selector: '{app="promtail"} |= "panic"'
  - metrics:
      panic_total:
        type: Counter
        description: "total number of panic"
        config:
          match_all: true
          action: inc

И у вас будет метрика Prometheus, которой можно будет управлять как обычное предупреждение.

Для получения предупреждений в Loki добавьте файлы правил в папку, указанную в разделе линейки в вашем файле конфигурации.

      ruler:
  storage:
    type: local
    local:
      directory: /etc/loki/rules
  rule_path: /tmp/loki/rules-temp
  alertmanager_url: http://alertmanager:9093
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  enable_alertmanager_v2: true

Если ваша конфигурация такая же, как указано выше, добавьте файлы правил в /etc/loki/rules/ подобно /etc/loki/rules/app/rules1.yaml

( /tmp/loki/rules/<tenant id>/rules1.yaml)

Чтобы предупредить что-то вроде: «6 новых сообщений об ошибках», вы можете использовать сумму (count_over_time ()) или count_over_time().

Если у вас есть такие ярлыки, как job="error" и job="info", и общий ярлык для обеих должностей как app="myapp", тогда count_over_time({app="myapp"}) перечислит значения для отдельных заданий. sum(count_over_time({app="myapp"})) перечислит сумму всех значений в обоих заданиях

Пример конфигурации для rules1.yaml:

      groups:
  - name: logs
    rules:
      - alert: ErrorInLogs
        expr: sum(count_over_time({app="myapp"}|~ "[Ee]rror"[1m]) >= 1
        for: 10s
        labels:
          severity: critical
          category: logs
        annotations:
          title: "{{$value}} Errors occurred in application logs"

Здесь {{$value}} даст счет, возвращенный из expr.

Другие вопросы по тегам