Документацияbreadcrumb arrow Grafanabreadcrumb arrow Документация GlaberGraphbreadcrumb arrow Учебные материалыbreadcrumb arrow Как создавать правила оповещения с данными журналов

Как создавать правила оповещения с данными журналов

Loki хранит ваши журналы и индексирует только метки для каждого потока журналов. Использование Loki с Grafana Alerting — это мощный способ отслеживать происходящее в вашей среде. Вы можете создавать правила оповещения по метрикам на основе содержимого строк ваших журналов, чтобы уведомлять свою команду. Что ещё лучше — вы можете добавлять данные меток из сообщения журнала непосредственно в ваше уведомление об оповещении.

В этом учебном руководстве вы:

  • Сгенерируете образцы журналов и направите их с помощью Promtail в Grafana.
  • Создадите правило оповещения на основе запроса Loki (LogQL).
  • Создадите точку контакта Webhook для отправки уведомлений об оповещениях.

Tip

В Начало работы с Grafana Alerting — часть 2 вы можете повысить свои навыки, изучив экземпляры оповещений и маршрутизацию уведомлений.

Перед началом работы

Существует несколько способов пройти это учебное руководство.

Настройка стека Grafana

Чтобы продемонстрировать наблюдение за данными с помощью стека Grafana, загрузите и запустите следующие файлы.

  1. Загрузите и сохраните файл Docker Compose для запуска Grafana, Loki и Promtail.

    Bash
    wget https://raw.githubusercontent.com/grafana/loki/refs/heads/main/production/docker-compose.yaml -O docker-compose.yaml
  2. Запустите стек Grafana.

    Bash
    docker compose up -d

При первом запуске docker compose up -d Docker загружает все необходимые для учебного руководства ресурсы. В зависимости от скорости вашего интернет-соединения это может занять несколько минут.

Note

Если на вашей системе уже запущены Grafana, Loki или Prometheus, вы можете увидеть ошибки, потому что Docker-образ пытается использовать порты, которые уже заняты вашими локальными установками. Если это так, остановите службы, а затем снова выполните команду.

Генерация образцов журналов

Чтобы продемонстрировать, как создавать правила оповещения на основе журналов, вы будете использовать скрипт, который генерирует реалистичные записи журналов для имитации типичных данных мониторинга в Grafana. При запуске этот скрипт непрерывно выводит журналы, каждая запись которого содержит временную метку, HTTP-метод (GET или POST), код состояния (200 для успеха или 500 для ошибок) и длительность запроса в миллисекундах.

  1. Загрузите и сохраните Python-файл, который генерирует журналы.

    Bash
    wget https://raw.githubusercontent.com/grafana/tutorial-environment/master/app/loki/web-server-logs-simulator.py
  2. Выполните Python-скрипт, генерирующий журналы.

    Bash
    python3 ./web-server-logs-simulator.py | sudo tee -a /var/log/web_requests.log

Устранение неполадок скрипта

Если вы не видите образцы журналов в Explore:

  • Проверьте, существует ли выходной файл: посмотрите /var/log/web_requests.log, чтобы убедиться, что он содержит журналы.
  • Если файл пуст, проверьте, что вы выполнили описанные выше действия для создания файла.
  • Если файл существует, убедитесь, что контейнер promtail запущен.
  • В Grafana Explore проверьте, что временной диапазон охватывает только последние 5 минут.

Создание точки контакта

Помимо того что Grafana является инструментом наблюдения с открытым исходным кодом, она имеет собственную встроенную службу оповещения. Это означает, что вы можете получать уведомления всякий раз, когда в ваших данных происходит интересующее вас событие, и даже видеть эти события, нанесённые на график в ваших визуализациях.

На этом шаге мы создадим новую точку контакта. Эта точка контакта использует интеграцию webhook. Эта точка контакта использует интеграцию webhooks. Чтобы это заработало, нам также понадобится конечная точка для приёма оповещения нашей интеграцией webhook. Мы можем использовать Webhook.site, чтобы быстро настроить эту тестовую конечную точку. Так мы сможем убедиться, что наше оповещение действительно отправляет уведомление куда-либо.

  1. В браузере войдите в свою учётную запись Grafana Cloud.

    Пользователям OSS: для входа перейдите по адресу http://localhost:3000, где должна быть запущена Grafana.

  2. В другой вкладке перейдите на Webhook.site.

  3. Скопируйте свой уникальный URL.

Ваша конечная точка webhook теперь ожидает первый запрос.

Далее настроим точку контакта в интерфейсе Alerting Grafana, чтобы отправлять уведомления на нашу конечную точку webhook.

  1. Вернитесь в Grafana. В боковом меню Grafana наведите указатель на значок Alerting (колокольчик), а затем нажмите Contact points.

  2. Нажмите + New contact point.

  3. В поле Name введите Webhook.

  4. В поле Integration выберите Webhook.

  5. В поле URL вставьте конечную точку вашего webhook.

  6. Нажмите Test, а затем Send test notification, чтобы отправить тестовое оповещение на вашу конечную точку webhook.

  7. Вернитесь на Webhook.site. Слева теперь появилась запись POST /. Нажмите на неё, чтобы увидеть, какую информацию отправила Grafana.

    Запись POST в Webhook.site
    Запись POST в Webhook.site
  8. Вернитесь в Grafana и нажмите Save contact point.

Мы создали тестовую конечную точку Webhook и создали новую точку контакта Alerting в Grafana. Теперь можно создать правило оповещения и привязать его к этой новой интеграции.

Создание правила оповещения

Далее мы создадим правило оповещения в Grafana Alerting, чтобы оно уведомляло нас всякий раз, когда правила оповещения срабатывают и разрешаются.

  1. В Grafana перейдите в Alerting > Alert rules.
  2. Нажмите New alert rule.
  3. Введите имя для вашего правила оповещения. Сделайте его коротким и описательным, так как оно отображается в вашем уведомлении об оповещении. Например, web-requests-logs.

Определение запроса и условия оповещения

В этом разделе мы используем параметры по умолчанию для создания правила оповещения под управлением Grafana. Параметры по умолчанию позволяют определить запрос, выражение (используется для обработки данных — поле WHEN в интерфейсе) и условие, которое должно быть выполнено для срабатывания оповещения (в режиме по умолчанию это порог).

  1. Выберите источник данных Loki в раскрывающемся списке.

  2. В редакторе запросов переключитесь в режим Code, нажав кнопку справа.

  3. Вставьте приведённый ниже запрос.

    sum by (message)(count_over_time({filename="/var/log/web_requests.log"} != "status=200" | pattern "<_> <message> duration<_>" [10m]))

    Этот запрос подсчитывает количество строк журнала с кодом состояния, отличным от 200 (OK), а затем суммирует результирующий набор по типу сообщения с помощью мгновенного запроса и временного интервала, указанного в скобках. Он использует синтаксический анализатор шаблонов LogQL для добавления новой метки message, содержащей уровень, метод, URL и статус из строки журнала.

    Вы можете использовать переключатель explain query для полного объяснения синтаксиса запроса. Необязательный скрипт, генерирующий журналы, создаёт строку образца журнала, похожую на приведённую ниже:

    2023-04-22T02:49:32.562825+00:00 level=info method=GET url=test.com status=200 duration=171ms

    Note

    Если вы используете собственные журналы, измените запрос LogQL, чтобы он соответствовал вашему сообщению журнала. Обратитесь к документации Loki, чтобы понять синтаксический анализатор шаблонов.

  4. В разделе Alert condition:

    • Оставьте Last в качестве значения функции приведения (WHEN) и 0 в качестве порогового значения. Это значение, выше которого должно срабатывать правило оповещения.
  5. Нажмите Preview alert rule condition, чтобы выполнить запрос.

    Он должен вернуть экземпляры оповещений из строк журнала с кодом состояния, отличным от 200 (OK), которые выполнили условие оповещения. Условие срабатывания правила оповещения — любое появление значения, превышающего порог 0. Поскольку запрос Loki вернул более нуля экземпляров оповещений, правило оповещения находится в состоянии Firing.

    Предварительный просмотр сработавших экземпляров оповещений
    Предварительный просмотр сработавших экземпляров оповещений

Настройка поведения оценки

Группа оценки определяет, когда срабатывает правило оповещения, и основана на двух настройках:

  • Evaluation group: как часто оценивается правило оповещения.
  • Evaluation interval: как долго должно выполняться условие, чтобы начать срабатывание. Это даёт вашим данным время для стабилизации перед запуском оповещения, помогая снизить частоту ненужных уведомлений.

Чтобы настроить оценку:

  1. В поле Folder нажмите + New folder и введите имя. Например: web-server-alerts. Эта папка будет содержать наши оповещения.
  2. В поле Evaluation group повторите описанный выше шаг, чтобы создать новую группу оценки. Назовите её 1m-evaluation.
  3. Выберите Evaluation interval (как часто оцениваются оповещения). Например, каждые 1m (1 минуту).
  4. Установите период ожидания равным 0s (ноль секунд), чтобы правило оповещения срабатывало сразу после выполнения условия.

Настройка меток и уведомлений

Выберите точку контакта, на которую вы хотите получать уведомления об оповещениях.

  1. В поле Contact point выберите Webhook из раскрывающегося меню.
  2. Нажмите Save rule and exit в правом верхнем углу.

Срабатывание правила оповещения

Поскольку Python-скрипт продолжает генерировать данные журналов, соответствующие условию правила оповещения, по завершении интервала оценки вы должны получить уведомление об оповещении в конечной точке Webhook.

Детали уведомления о сработавшем оповещении
Детали уведомления о сработавшем оповещении

Tip

В Начало работы с Grafana Alerting — часть 2 вы можете повысить свои навыки, изучив экземпляры оповещений и маршрутизацию уведомлений.