Я использую Promtail + Loki для сбора журналов, и я не могу понять, как я могу предупреждать о каждой ошибке в моих файлах журналов. Я также использую Prometheus, Alertmanager и Grafana. Я видел, как некоторым людям это удавалось, но никто из них не объяснил деталей. Чтобы быть ясным, я не ищу оповещения, которые остаются в состоянии FIRING, или панели инструментов Grafana со статусом «Alerting». Все, что мне нужно, это знать каждый раз, когда в одном из моих журналов возникает ошибка. Если это невозможно сделать именно таким образом, следующим лучшим решением будет очистить каждые X секунд, а затем предупредить что-то вроде: «6 новых сообщений об ошибках».
Как отправлять оповещения о каждой ошибке в моих журналах с помощью Promtail / Loki - AlertManager?
Ответы (3)
В Loki v2.0 появился новый способ оповещения: https://grafana.com/docs/loki/latest/alerting/
Теперь вы можете настроить его прямо в Loki и отправить в Alertmanager.
Обновлять:
В соответствии с запросом простой пример предупреждения:
groups:
- name: NumberOfErrors
rules:
- alert: logs_error_count_kube_system
expr: rate({namespace="kube-system"} |~ "[Ee]rror"[5m]) > 5
for: 5m
labels:
severity: P4
Source: Loki
У меня такой же вопрос.
Немного изучив, я обнаружил, что 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.