Как отправлять уведомления о каждой ошибке в моих журналах с помощью 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.