Введение
Оповещения и уведомления являются важной частью вашего рабочего процесса внедрения. При работе с кластером Kubernetes часто необходимо незамедлительно получать уведомления о любых критических проблемах в вашем кластере.
Alertmanager является частью kube-prom-stack
, установленной в вашем кластере в Prometheus Stack. Он позволяет получать оповещения из различных источников, таких как Prometheus. Правила создаются на стороне Prometheus, которые в свою очередь могут генерировать оповещения. Обязанность Alertmanager заключается в перехвате этих оповещений, их группировке (агрегации), применении других преобразований и, наконец, направлении их к настроенным получателям. Уведомительные сообщения могут быть дополнительно форматированы для включения дополнительной информации, если это необходимо. Можно использовать такие инструменты, как Slack, Gmail и т. д., для отправки уведомлений в реальном времени.
В этом разделе вы узнаете, как проверить существующие оповещения, создать новые и затем настроить Alertmanager для отправки уведомлений через Slack, используя тот же файл манифеста, используемый для настройки Prometheus.
Содержание
- Предварительные требования
- Шаг 1 – Проверка включенных оповещений
- Шаг 2 – Создание нового оповещения
- Шаг 3 – Настройка Alertmanager для отправки уведомлений в Slack
- Шаг 4 – Отладка сработавшего оповещения
- Вывод
Предварительные требования
Для завершения этого руководства вам понадобится:
- Установленный стек мониторинга Prometheus в вашем кластере, как объясняется в Стеке Prometheus.
- Установленный стек Loki в вашем кластере, как объясняется в Стеке Loki.
- Пример приложения Emojivoto, развернутого в кластере. Пожалуйста, следуйте шагам из основного репозитория. Вы будете создавать оповещения для этого приложения.
- Административные права в рабочем пространстве Slack. Позднее вы создадите приложение с входящим вебхуком, который будет использоваться для отправки уведомлений от Alertmanager.
Шаг 1 – Проверьте включенные оповещения
kube-prom-stack
уже активировано более ста правил. Чтобы получить доступ к консоли Prometheus, сначала выполните перенаправление портов на свою локальную машину.
Откройте веб-браузер на localhost:9091 и перейдите к пункту меню Оповещения. Вы должны увидеть несколько предопределенных оповещений, которые должны выглядеть следующим образом:
Нажмите на любое из оповещений, чтобы развернуть его. Вы можете увидеть информацию о выражении, по которому оно запрашивает данные, о метках, которые настроены, и о аннотациях, что очень важно с точки зрения шаблонизации. Prometheus поддерживает шаблонизацию в аннотациях и метках оповещений. Дополнительную информацию можно найти в официальной документации.
Шаг 2 – Создание нового оповещения
Для создания нового оповещения необходимо добавить новое определение в раздел additionalPrometheusRule
файла значений Helm kube-prom-stack
.
Вы создадите образец оповещения, которое будет срабатывать, если пространство имен emojivoto
не имеет ожидаемого количества экземпляров. Ожидаемое количество капсул для приложения emojivoto
– 4.
Сначала откройте файл 04-setup-observability/assets/manifests/prom-stack-values.yaml
, предоставленный в репозитории Starter Kit, с помощью текстового редактора по вашему выбору (предпочтительно с поддержкой проверки YAML). Затем раскомментируйте блок additionalPrometheusRules
.
Наконец, примените настройки с помощью helm
:
Чтобы проверить успешное создание оповещения, перейдите в Консоль Prometheus, нажмите на пункт меню Оповещения и найдите оповещение EmojivotioInstanceDown
. Оно должно быть видно внизу списка.
Шаг 3 – Настройка Alertmanager для отправки уведомлений в Slack
Чтобы завершить этот раздел, вам нужно иметь административные права в рабочем пространстве Slack. Это позволит вам создать входящий вебхук, который вам понадобится на следующих этапах. Вам также нужно создать канал, в котором вы хотели бы получать уведомления от Alertmanager.
Вы настроите Alertmanager на обработку всех полученных оповещений, печатая их соответствующие резюме и описания на новых строках.
- Откройте веб-браузер и перейдите по адресу
https://api.slack.com/apps
. Нажмите на кнопку Создать новое приложение. - В окне Создать приложение выберите опцию С нуля. Затем дайте вашему приложению имя и выберите соответствующее рабочее пространство.
- На странице Основная информация нажмите на опцию Входящие вебхуки, включите их, и нажмите на кнопку Добавить новый вебхук в рабочее пространство внизу.
- На следующей странице используйте выпадающий список Поиск канала…, чтобы выбрать желаемый канал, куда вы хотите отправлять уведомления. Когда будете готовы, нажмите кнопку Разрешить.
- Скопируйте значение URL вебхука, отображаемое на странице. Вам понадобится это на следующем этапе.
Затем вы укажете Alertmanager, как отправлять уведомления в Slack. Откройте файл 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
, предоставленный в репозитории Starter Kit, с помощью текстового редактора на ваш выбор. Раскомментируйте весь блок alertmanager.config
. Убедитесь, что обновили значения slack_api_url
и channel
, заменив соответствующие заполнители <>
.
В вышеприведенной конфигурации,
slack_api_url
: входящий URL веб-крюка Slack, созданный на шаге 4receivers.[].slack_configs
: определяет канал Slack, используемый для отправки уведомлений, заголовок уведомления и само сообщение. Также возможно форматировать сообщение уведомления (или тело) в соответствии с вашими требованиями.title
иtext
: перебирают активные оповещения и выводят их сводку и описание с использованием системы шаблонов Prometheus.send_resolved
: булево значение, указывающее, должен ли Alertmanager отправлять уведомление, когда оповещение больше не активно.
Параметры matcher
и continue
все еще находятся в комментариях, так как вы будете откомментировать их позже в руководстве. Пока они должны оставаться закомментированными.
Наконец, выполните обновление kube-prometheus-stack
, используя helm
:
На этом этапе вы должны получать уведомления в Slack для всех активных оповещений.
Далее вы проверите, работает ли предварительно добавленное оповещение EmojivotoInstanceDown
и отправляет ли уведомление в Slack путем уменьшения количества реплик для развертывания /emoji
в пространстве имен emojivoto
.
Из вашего терминала выполните следующую команду, чтобы установить количество реплик для развертывания /emoji
в 0:
Откройте веб-браузер на localhost:9091 и перейдите к пункту меню Alerts. Найдите ранее созданное предупреждение EmojivotoInstanceDown. Состояние предупреждения должно измениться на Firing после примерно одной минуты масштабирования развертывания.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
В настоящее время все активации предупреждений будут отправляться в канал Slack. Это может вызвать утомление от уведомлений. Чтобы уточнить, какое уведомление отправляется, вы можете ограничить Alertmanager, чтобы он отправлял уведомления только для предупреждений, которые соответствуют определенному шаблону. Это делается с помощью параметра matcher
.
Откройте файл 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
, предоставленный в репозитории Starter Kit, с помощью выбранного вами текстового редактора. Раскомментируйте весь блок alertmanager.config
. Убедитесь, что раскомментированы параметры matcher
и continue
:
Наконец, выполните обновление kube-prometheus-stack
с помощью helm
:
Теперь вы должны получать уведомления только от предупреждения с совпадающим именем EmojivotoInstanceDown
. Поскольку параметр continue
установлен в false, Alertmanager будет отправлять уведомления только от этого предупреждения и прекратит отправлять их для остальных.
Нажатие на имя уведомления в Slack откроет веб-браузер на недоступной веб-странице с внутренним DNS-именем pod Alertmanager в Kubernetes. Это ожидаемо. Некоторые полезные ссылки для проверки: Для получения дополнительной информации вы можете проверить службу DNS pod,
Параметры конфигурации для AlertManager и некоторые Примеры уведомлений.
Шаг 4 – Отладка сработавшего оповещения
Когда срабатывает оповещение и отправляет уведомление в Slack, важно, чтобы вы могли легко отладить проблему и быстро найти корень проблемы.
Для этого вы можете воспользоваться Grafana, который уже установлен в учебниках Стека Prometheus и Стека Loki.
Создайте переадресацию порта для Grafana на порт 3000
:
Откройте веб-браузер на localhost:3000 и войдите, используя учетные данные по умолчанию admin/prom-operator
.
Перейдите на раздел Оповещение. В фильтре Состояние нажмите на опцию Срабатывание. Найдите оповещение emojivoto-instance-down
, определённое в разделе Создание нового оповещения, и разверните его. Вы должны увидеть следующее:
Нажмите на кнопку Посмотреть график. На следующей странице вы можете наблюдать количество подов в пространстве имён emojivoto
, отображаемое как метрика. Обратите внимание, что Grafana фильтрует результаты, используя временной диапазон Последний 1 час по умолчанию. Измените его на временной интервал, когда произошло оповещение. Вы можете настроить временной диапазон, используя опцию От До для получения более детального результата или используя Быстрый диапазон, например, Последние 30 минут
.
На вкладке Исследовать выберите источник данных Loki. В поле поиска журналов введите следующее: {namespace="emojivoto"}
и нажмите кнопку Запустить запрос в правом верхнем углу страницы. Вы должны увидеть следующее:
Убедитесь, что вы правильно настроили временной интервал.
С этой страницы вы можете дополнительно фильтровать результаты журналов. Например, чтобы отфильтровать журналы для контейнера web-svc
в пространстве имён emojivoto
, вы можете ввести следующий запрос: {namespace="emojivoto", container="web-svc"}
Более подробные объяснения о использовании LogQL
можно найти в Шаг 3 – Использование LogQL.
Вы также можете воспользоваться Экспортированными событиями Kubernetes, установленными ранее, и отфильтровать события, связанные с пространством имен emojivoto
.
Введите следующий запрос в браузере журналов: {app="event-exporter"} |= "emojivoto"
. Это вернет события Kubernetes, связанные с пространством имен emojivoto
.
Заключение
В этом руководстве вы узнали, как осуществлять проверку существующих оповещений, создавать новые и настраивать AlertManager
для отправки уведомлений в Slack.
Узнать больше
- Настройка стека мониторинга Kubernetes с помощью Prometheus, Grafana и Alertmanager на DigitalOcean
- Создание оповещений с использованием DigitalOcean Uptime
Следующим шагом будет настройка резервного копирования и восстановления с использованием Velero или TrilioVault в вашем кластере DOKS.