Автор выбрал Tech Education Fund, чтобы получить пожертвование в размере 300 долларов США в рамках программы Write for DOnations .
Вступление
При возникновении проблем отправка оповещений соответствующей группе значительно ускоряет выявление основной причины проблемы, позволяя группам быстро разрешать инциденты.
Prometheus - это система мониторинга с открытым исходным кодом, которая собирает показатели из ваших служб и сохраняет их в базе данных временных рядов. Alertmanager - это инструмент для обработки оповещений, который устраняет дубликаты, группирует и отправляет оповещения соответствующему получателю. Он может обрабатывать оповещения от клиентских приложений, таких как Prometheus, и поддерживает множество получателей, включая электронную почту, PagerDuty, OpsGenie и https. : //slack.com/ [натяжной].
Благодаря множеству доступных экспортеров Prometheus вы можете настроить оповещения для каждой части вашей инфраструктуры, включая web и https://prometheus.io/docs/ инструменты / экспортеры / # базы данных [серверы баз данных], messaging systems или https://prometheus.io/docs/instrumenting/exporters/#apis [API,].
Blackbox Exporter исследует конечные точки по протоколам HTTP, HTTPS, DNS, TCP или ICMP, возвращая подробные метрики о запросе, в том числе о том, был ли он успешным и сколько времени потребовалось для его получения. ответ.
В этом руководстве вы установите и сконфигурируете Alertmanager и Blackbox Exporter для мониторинга скорости отклика веб-сервера Nginx. Затем вы настроите Alertmanager так, чтобы он уведомлял вас по электронной почте и Slack, если ваш сервер не отвечает.
Предпосылки
Для этого урока вам понадобятся:
-
Один сервер Ubuntu 16.04, настроенный с помощью Initial Server Setup с учебником Ubuntu 16.04, включая sudo пользователь без полномочий root и брандмауэр.
-
Nginx устанавливается, выполнив первые два шага из учебника Как установить Nginx в Ubuntu 16.04.
-
Сервер Nginx блокирует прослушивание через порт «+ 8080 +», который можно настроить, следуя https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual- hosts-on-ubuntu-16-04 [Как настроить блоки серверов Nginx (виртуальные хосты) в Ubuntu 16.04]. Вы будете использовать это как конечную точку для мониторинга в этом руководстве.
-
Измените порт, изменив директиву
+ listen +
с+ 80 +
на+ 8080 +
. Вы можете использовать домен или поддомен, но не забудьте заменить адрес конечной точки в учебном пособии. -
Prometheus 2.x устанавливается, следуя инструкциям Как установить Prometheus в Ubuntu 16.04.
-
SMTP-сервер для отправки электронной почты. Вы можете использовать любой SMTP-сервер или настроить свой собственный, следуя инструкциям https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only- smtp-server-on-ubuntu-16-04 [Как установить и настроить Postfix как SMTP-сервер только для отправки в Ubuntu 16.04].
-
По желанию, учетная запись https://slack.com [Slack] и рабочее пространство, если вы хотите получать оповещения от Alertmanager через Slack.
Шаг 1 - Создание пользователей сервиса
В целях безопасности мы создадим две новые учетные записи пользователей: * blackbox_exporter * и * alertmanager *. Мы будем использовать эти учетные записи на протяжении всего учебного курса для запуска Blackbox Exporter и Alertmanager, а также для изоляции владельцев соответствующих основных файлов и каталогов. Это гарантирует, что Blackbox Exporter и Alertmanager не смогут получить доступ и изменить данные, которыми они не владеют.
Создайте этих пользователей командой + useradd +
с помощью флагов + - no-create-home +
и + - shell / bin / false +
, чтобы эти пользователи не могли войти на сервер:
sudo useradd --no-create-home --shell /bin/false blackbox_exporter
sudo useradd --no-create-home --shell /bin/false alertmanager
Имея пользователей, давайте загрузим и настроим Blackbox Exporter.
Шаг 2 - Установка Blackbox Exporter
Сначала загрузите последнюю стабильную версию Blackbox Exporter в свой домашний каталог. Вы можете найти последние двоичные файлы вместе с их контрольными суммами на странице загрузки Prometheus.
cd ~
curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v/blackbox_exporter-.linux-amd64.tar.gz
Перед распаковкой архива проверьте контрольные суммы файла с помощью следующей команды + sha256sum +
:
sha256sum blackbox_exporter-.linux-amd64.tar.gz
Сравните вывод этой команды с контрольной суммой на странице загрузки Prometheus, чтобы убедиться, что ваш файл является подлинным и не поврежден:
Output blackbox_exporter-.linux-amd64.tar.gz
Если контрольные суммы не совпадают, удалите загруженный файл и повторите предыдущие шаги, чтобы повторно загрузить файл.
Когда вы уверены, что контрольные суммы совпадают, распакуйте архив:
tar xvf blackbox_exporter-.linux-amd64.tar.gz
Это создаст каталог с именем + blackbox_exporter-.linux-amd64 +
, содержащий двоичный файл + blackbox_exporter +, лицензию и файлы примеров.
Скопируйте двоичный файл в каталог + / usr / local / bin +
.
sudo mv ./blackbox_exporter-.linux-amd64/blackbox_exporter /usr/local/bin
Задайте для пользователя и группы владение двоичным файлом пользователя * blackbox_exporter *, чтобы пользователи без полномочий root не могли изменять или заменять файл:
sudo chown /usr/local/bin/blackbox_exporter
Наконец, мы удалим архив и распакованный каталог, поскольку они больше не нужны.
rm -rf ~/blackbox_exporter-.linux-amd64.tar.gz ~/blackbox_exporter-.linux-amd64
Далее, давайте настроим Blackbox Exporter для проверки конечных точек по протоколу HTTP и запускаем его.
Шаг 3 - Настройка и запуск Blackbox Exporter
Давайте создадим файл конфигурации, определяющий, как Blackbox Exporter должен проверять конечные точки. Мы также создадим системный файл systemd, чтобы мы могли управлять службой Blackbox с помощью + systemd +
.
На следующем шаге мы укажем список конечных точек для проверки в конфигурации Prometheus.
Сначала создайте каталог для конфигурации Blackbox Exporter. В соответствии с соглашениями Linux файлы конфигурации находятся в каталоге + / etc +
, поэтому мы будем использовать этот каталог для хранения файла конфигурации Blackbox Exporter:
sudo mkdir /etc/blackbox_exporter
Затем установите владельца этого каталога для пользователя * blackbox_exporter *, созданного на шаге 1:
sudo chown /etc/blackbox_exporter
В только что созданном каталоге создайте файл + blackbox.yml +
, в котором будут храниться параметры конфигурации Blackbox Exporter:
sudo nano /etc/blackbox_exporter/blackbox.yml
Мы настроим Blackbox Exporter для использования пробера + http +
по умолчанию для проверки конечных точек. Probers определяет, как Blackbox Exporter проверяет, работает ли конечная точка. Prober + http +
проверяет конечные точки, отправляя HTTP-запрос конечной точке и проверяя ее код ответа. Вы можете выбрать, какой метод HTTP использовать для исследования, а также какие коды состояния следует принимать в качестве успешных ответов. Другие популярные тестеры включают в себя пробник + tcp +
для зондирования по протоколу TCP, пробник + icmp +
для зондирования через протокол ICMP и пробел + dns +
для проверки записей DNS.
В этом руководстве мы будем использовать пробер + http +
для проверки конечной точки, работающей на порту + 8080 +
, по методу HTTP + GET +
. По умолчанию злоумышленник предполагает, что действительные коды состояния в диапазоне «+ 2xx +» действительны, поэтому нам не нужно предоставлять список действительных кодов состояния.
Мы настроим тайм-аут * 5 * секунд, что означает, что Blackbox Exporter будет ждать ответа в течение 5 секунд, прежде чем сообщать об ошибке. В зависимости от типа приложения выберите любое значение, соответствующее вашим потребностям.
Добавьте следующую конфигурацию в файл:
/etc/blackbox_exporter/blackbox.yml
modules:
http_2xx:
prober: http
timeout:
http:
valid_status_codes: []
method: GET
Вы можете найти больше информации о параметрах конфигурации в the документация Blackbox Exporter.
Сохраните файл и выйдите из текстового редактора.
Перед тем, как создать файл службы, установите владельца пользователя и группы в файле конфигурации на пользователя * blackbox_exporter *, созданного на шаге 1.
sudo chown /etc/blackbox_exporter/blackbox.yml
Теперь создайте служебный файл, чтобы вы могли управлять Blackbox Exporter, используя + systemd +
:
sudo nano /etc/systemd/system/blackbox_exporter.service
Добавьте следующее содержимое в файл:
/etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=blackbox_exporter
Group=blackbox_exporter
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml
[Install]
WantedBy=multi-user.target
Этот служебный файл сообщает + systemd +
для запуска Blackbox Exporter от имени пользователя * blackbox_exporter * с файлом конфигурации, расположенным в + / etc / blackbox_exporter / blackbox.yml +
. Подробная информация о служебных файлах + systemd +
выходит за рамки этого учебного пособия, но если вы хотите узнать больше, см. Https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and- unit-files # where-are-systemd-unit-files-found [Общие сведения о системных единицах и файлах модулей].
Сохраните файл и выйдите из текстового редактора.
Наконец, перезагрузите + systemd +
, чтобы использовать вновь созданный файл сервиса:
sudo systemctl daemon-reload
Теперь запустите Blackbox Exporter:
sudo systemctl start blackbox_exporter
Убедитесь, что он успешно запущен, проверив статус сервиса:
sudo systemctl status blackbox_exporter
Вывод содержит информацию о процессе Blackbox Exporter, включая основной идентификатор процесса (PID), использование памяти, журналы и многое другое.
Output● blackbox_exporter.service - Blackbox Exporter
Loaded: loaded (/etc/systemd/system/blackbox_exporter.service; disabled; vendor preset: enabled)
Active: since Thu 2018-04-05 17:48:58 UTC; 5s ago
Main PID: 5869 (blackbox_export)
Tasks: 4
Memory: 968.0K
CPU: 9ms
CGroup: /system.slice/blackbox_exporter.service
└─5869 /usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml
Если статус службы не «++», следуйте инструкциям на экране и просмотрите предыдущие шаги, чтобы устранить проблему, прежде чем продолжить обучение.
Наконец, включите службу, чтобы убедиться, что Blackbox Exporter запустится при перезапуске сервера:
sudo systemctl enable blackbox_exporter
Теперь, когда Blackbox Exporter полностью настроен и работает, мы можем настроить Prometheus для сбора метрик о проверочных запросах к нашей конечной точке, чтобы мы могли создавать оповещения на основе этих метрик и настраивать уведомления для оповещений с помощью Alertmanager.
Шаг 4 - Настройка Prometheus для очистки Blackbox Exporter
Как упоминалось в шаге 3, список конечных точек, которые нужно исследовать, находится в файле конфигурации Prometheus как часть директивы Blackbox Exporter «+ target ». На этом шаге вы сконфигурируете Prometheus для использования Blackbox Exporter для очистки веб-сервера Nginx, работающего на порту ` 8080 +`, который вы настроили в обязательных руководствах.
Откройте файл конфигурации Prometheus в вашем редакторе:
sudo nano /etc/prometheus/prometheus.yml
На данный момент, это должно выглядеть следующим образом:
/etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
В конце директивы + scrape_configs +
добавьте следующую запись, которая скажет Prometheus проверять конечную точку, работающую на локальном порту + 8080 +
, с помощью модуля Blackbox Exporter + http_2xx +
, настроенного на шаге 3.
/etc/prometheus/prometheus.yml
...
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://localhost:8080
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
По умолчанию Blackbox Exporter работает на порту + 9115 +
с метриками, доступными на конечной точке + / probe +
.
Конфигурация + scrape_configs +
для Blackbox Exporter отличается от конфигурации для других экспортеров. Наиболее заметным отличием является директива + target +
, в которой перечисляются конечные точки, которые проверяются, вместо адреса экспортера. Адрес экспортера указывается с использованием соответствующего набора меток + address +
.
Вы найдете подробное объяснение директив + relabel +
в документации Prometheus.
Ваш конфигурационный файл Prometheus теперь будет выглядеть так:
Файл конфигурации Prometheus - /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://localhost:8080
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
Сохраните файл и закройте текстовый редактор.
Перезапустите Прометей, чтобы изменения вступили в силу:
sudo systemctl restart prometheus
Убедитесь, что он работает должным образом, проверив состояние службы Prometheus:
sudo systemctl status prometheus
Если статус службы не «++», следуйте инструкциям на экране и просмотрите предыдущие шаги, чтобы устранить проблему, прежде чем продолжить обучение.
На этом этапе вы настроили Prometheus для очистки метрик от Blackbox Exporter. Чтобы получать оповещения от Alertmanager, на следующем шаге вы создадите соответствующий набор правил оповещения Prometheus.
Шаг 5 - Создание правил оповещения
Prometheus Alerting разделен на две части. Первая часть обрабатывается сервером Prometheus и включает генерацию оповещений на основе правил оповещений и отправку их по адресу Alertmanager. Вторая часть выполняется Alertmanager, который управляет полученными оповещениями и отправляет их соответствующим получателям, в зависимости от конфигурации.
На этом шаге вы изучите базовый синтаксис правил оповещения при создании правила оповещения, чтобы проверить, доступен ли ваш сервер.
Сначала создайте файл для хранения ваших оповещений. Создайте пустой файл с именем + alert.rules.yml +
в каталоге + / etc / prometheus +
:
sudo touch /etc/prometheus/alert.rules.yml
Поскольку этот файл является частью конфигурации Prometheus, убедитесь, что в качестве владельца задан пользователь * prometheus *, которого вы создали в обязательном учебном курсе Prometheus:
sudo chown /etc/prometheus/alert.rules.yml
Имея файл предупреждений, мы должны сообщить об этом Прометею, добавив соответствующую директиву в файл конфигурации.
Откройте файл конфигурации Prometheus в вашем редакторе:
sudo nano /etc/prometheus/prometheus.yml
Добавьте директиву + rule_files +
после директивы + global +
, чтобы Prometheus загружал ваш вновь созданный файл предупреждений при запуске Prometheus.
/etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
...
Сохраните файл и выйдите из текстового редактора.
Теперь давайте создадим правило, которое проверяет, не работает ли конечная точка.
Чтобы создать правило оповещения, вы будете использовать метрику «+ probe_success +» Blackbox Exporter, которая возвращает * 1 *, если конечная точка работает, и * 0 *, если это не так.
Метрика + probe_success +
содержит две метки: метка + instance +
с адресом конечной точки и метка + job +
с именем экспортера, который собрал метрику.
Откройте файл правил оповещений в вашем редакторе:
sudo nano /etc/prometheus/alert.rules.yml
Как и файл конфигурации Prometheus, файл правил предупреждений использует формат YAML, который строго запрещает вкладки и требует два пробела для отступа. Прометей не запустится, если файл будет неправильно отформатирован.
Во-первых, мы создадим правило оповещения под названием + EndpointDown +
, чтобы проверить, равна ли метрика + probe_sucess +
* 0 * с продолжительностью * 10 * секунд. Это гарантирует, что Прометей не будет отправлять оповещения, если конечная точка недоступна менее 10 секунд. Вы можете выбрать любую продолжительность в зависимости от типа вашего приложения и потребностей.
Кроме того, мы добавим две метки, обозначающие критическую серьезность, и сводку оповещений, чтобы мы могли легко управлять и фильтровать оповещения.
Если вы хотите включить больше деталей в ярлыки и аннотации оповещения, вы можете использовать + {{$ ярлыки. }} + `синтаксис для получения значения метки. Мы будем использовать это для включения адреса конечной точки из метрики `+ instance +
метрики.
Добавьте следующее правило в файл предупреждений:
/etc/prometheus/alert.rules.yml
groups:
- name: alert.rules
rules:
- alert: EndpointDown
expr: probe_success == 0
for: 10s
labels:
severity: "critical"
annotations:
summary: "Endpoint {{ $labels.instance }} down"
Сохраните файл и выйдите из текстового редактора.
Перед перезапуском Prometheus убедитесь, что ваш файл предупреждений синтаксически корректен, используя следующую команду + promtool +
:
sudo promtool check rules /etc/prometheus/alert.rules.yml
Вывод содержит количество правил, найденных в файле, а также информацию о том, являются ли правила синтаксически правильными:
OutputChecking /etc/prometheus/alert.rules.yml
SUCCESS: 1 rules found
Наконец, перезапустите Prometheus, чтобы применить изменения:
sudo systemctl restart prometheus
Убедитесь, что служба работает с командой + status +
:
sudo systemctl status prometheus
Если статус службы не + active +
, следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.
С правилами оповещения мы можем загрузить и установить Alertmanager.
Шаг 6 - Загрузка Alertmanager
Blackbox Exporter настроен, и наши правила оповещения действуют. Давайте загрузим и установим Alertmanager для обработки предупреждений, полученных Prometheus.
Вы можете найти последние двоичные файлы вместе с их контрольными суммами на странице загрузки Prometheus. Загрузите и распакуйте текущую стабильную версию Alertmanager в свой домашний каталог:
cd ~
curl -LO https://github.com/prometheus/alertmanager/releases/download/v/alertmanager-.linux-amd64.tar.gz
Перед распаковкой архива проверьте контрольные суммы файла с помощью следующей команды + sha256sum +
:
sha256sum alertmanager-.linux-amd64.tar.gz
Сравните вывод этой команды с контрольной суммой на странице загрузки Prometheus, чтобы убедиться, что ваш файл является подлинным и не поврежден.
Output alertmanager-.linux-amd64.tar.gz
Если контрольные суммы не совпадают, удалите загруженный файл и повторите предыдущие шаги, чтобы повторно загрузить файл.
После подтверждения загрузки распакуйте архив:
tar xvf alertmanager-.linux-amd64.tar.gz
Это создает каталог с именем + alertmanager-.linux-amd64 +
, содержащий два двоичных файла (+ alertmanager +
и + amtool +
), лицензию и пример файла конфигурации.
Переместите два двоичных файла в каталог + / usr / local / bin +
:
sudo mv alertmanager-.linux-amd64/alertmanager /usr/local/bin
sudo mv alertmanager-.linux-amd64/amtool /usr/local/bin
Установите владельца пользователя и группы в двоичных файлах для пользователя * alertmanager *, который вы создали на шаге 1:
sudo chown /usr/local/bin/alertmanager
sudo chown /usr/local/bin/amtool
Удалите оставшиеся файлы из вашего домашнего каталога, так как они больше не нужны:
rm -rf alertmanager-.linux-amd64 alertmanager-.linux-amd64.tar.gz
Теперь, когда необходимые файлы находятся в соответствующем месте, мы можем настроить Alertmanager для отправки уведомлений о предупреждениях по электронной почте.
Шаг 7 - Настройка Alertmanager для отправки оповещений по электронной почте
На этом этапе вы создадите каталог и файлы для хранения данных и параметров конфигурации Alertmanager, а затем сконфигурируете Alertmanager для отправки оповещений по электронной почте.
Следуя стандартным соглашениям Linux, мы создадим каталог в + / etc +
для хранения файла конфигурации Alertmanager.
sudo mkdir /etc/alertmanager
Установите владельца и группу для вновь созданного каталога для пользователя * alertmanager *:
sudo chown /etc/alertmanager
Мы будем хранить файл конфигурации в файле + alertmanager.yml +
, поэтому создайте этот файл и откройте его в редакторе:
sudo nano /etc/alertmanager/alertmanager.yml
Как и другие файлы, связанные с Prometheus, в этом также используется формат YAML, поэтому для отступа используйте два пробела вместо вкладок.
Мы настроим Alertmanager для отправки электронных писем с использованием Postfix, который вы установили в соответствии с обязательным учебным пособием. Нам нужно предоставить адрес SMTP-сервера, используя директиву + smtp_smarthost +
, а также адрес, с которого мы хотим отправлять электронные письма, используя директиву + smtp_from . Поскольку Postfix работает на том же сервере, что и Alertmanager, адрес сервера равен « localhost: 25 +». Мы будем использовать пользователя * alertmanager * для отправки электронных писем.
По умолчанию в Postfix не настроен TLS, поэтому мы должны указать Alertmanager разрешить SMTP-серверы не-TLS, используя директиву + smtp_require_tls +.
Поместите конфигурацию SMTP в директиву + global +
, так как она используется для указания параметров, допустимых во всех других контекстах конфигурации. В нашем случае это включает настройку SMTP, а также может включать токены API для различных интеграций:
Файл конфигурации Alertmanager, часть 1 - /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@'
smtp_require_tls: false
На данный момент Alertmanager знает, как отправлять электронные письма, но нам нужно определить, как он будет обрабатывать входящие оповещения, используя директиву + route . Директива ` route +` применяется ко всем входящим оповещениям и определяет такие свойства, как то, как Alertmanager будет группировать оповещения, кто является получателем по умолчанию или сколько времени Alertmanager будет ждать перед отправкой исходного оповещения.
Чтобы сгруппировать оповещения, используйте поддиректорию + group_by +
, которая принимает встроенный массив меток (например, + ['', ''] +
). Группировка гарантирует, что оповещения, содержащие одинаковые метки, будут сгруппированы и отправлены в одном пакете.
Каждая директива + route +
имеет одного получателя, определенного с помощью поддирективы + receive +
. Если вы хотите добавить несколько получателей, вам нужно либо определить несколько получателей под одной и той же директивой, либо вложить несколько директив + route +
, используя подкатегорию + rout +
. В этом руководстве мы рассмотрим первый подход к настройке предупреждений Slack.
В этом случае мы будем группировать только по метке «+ instance » в Blackbox и метке « severity +», которые мы прикрепили к предупреждению на шаге 6, что обеспечит получение нескольких предупреждений для нашей конечной точки с критической серьезностью в одном письме.
Добавьте следующую директиву + group_by +
:
Конфигурационный файл Alertmanager, часть 2 - /etc/alertmanager/alertmanager.yml
...
route:
group_by: ['instance', 'alert']
Далее мы определим интервалы, например, как долго Alertmanager будет ждать перед отправкой начальных и новых предупреждений.
Используя директиву + group_wait +
, мы определим, как долго Alertmanager будет ждать перед отправкой начального предупреждения. В течение этого периода Alertmanager будет ожидать, пока Прометей отправит другие оповещения, если они существуют, чтобы их можно было отправлять в одном пакете. Поскольку у нас есть только одно предупреждение, мы выберем произвольное значение 30 секунд.
Затем, используя интервал + group_interval +
, мы определим, как долго Alertmanager будет ждать перед отправкой следующего пакета предупреждений, если в этой группе есть новые предупреждения. Вы можете выбрать любое значение в зависимости от ваших потребностей, но мы будем устанавливать его каждые 5 минут.
Последний интервал, который мы настроим, это + repeat_interval +
, который определяет, как долго Alertmanager будет ждать, прежде чем отправит уведомление, если предупреждения еще не разрешены. Вы можете выбрать любое значение, соответствующее вашим потребностям, но мы будем использовать произвольное значение 3 часа.
Наконец, используя поддиректорию + receive +
, определите, кто будет получать уведомления для предупреждений. Мы будем использовать приемник с именем + team-1 +
, который мы определим позже.
Измените директиву маршрута так, чтобы она выглядела так:
Конфигурационный файл Alertmanager, часть 2 - /etc/alertmanager/alertmanager.yml
route:
group_by: ['instance', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver:
Если вы хотите сопоставлять и отправлять уведомления только о конкретных оповещениях, вы можете использовать под-директивы + match +
и + match_re +
, чтобы отфильтровать оповещения по значению их метки. Субдиректива + match +
представляет совпадение по равенству, а поддиректива + match_re +
представляет сопоставление с помощью регулярных выражений.
Теперь мы настроим приемник + team-1 +
, чтобы вы могли получать уведомления о предупреждениях. Под директивой + receivers +
вы можете определить получателей, содержащих имя и соответствующую поддиректорию конфигурации. Список доступных приемников и инструкции по их настройке доступны в документации Alertmanager.
Чтобы настроить приемник электронной почты + team-1 +
, мы будем использовать подкатегорию + email_configs +
в соответствии с директивой + receivers +
:
Файл конфигурации Alertmanager, часть 3 - /etc/alertmanager/alertmanager.yml
receivers:
- name: ''
email_configs:
- to: ''
На данный момент вы настроили Alertmanager для отправки уведомлений о предупреждениях на ваш адрес электронной почты. Ваш файл конфигурации должен выглядеть так:
Файл конфигурации Alertmanager - /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@'
smtp_require_tls: false
route:
group_by: ['instance', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver:
receivers:
- name: ''
email_configs:
- to: ''
На следующем шаге мы настроим Alertmanager для отправки оповещений на ваш канал Slack. Если вы не хотите настраивать Slack, вы можете сразу перейти к шагу 10, где мы создадим файл службы и настроим Prometheus для работы с Alertmanager.
Шаг 8 - Настройка Alertmanager для отправки предупреждений через Slack
Прежде чем продолжить этот шаг, убедитесь, что вы создали учетную запись Slack и что у вас есть доступное рабочее пространство Slack.
Для отправки оповещений в Slack сначала создайте Incoming Webhook.
Направьте ваш браузер на страницу создания Incoming Webhook, доступную по адресу + https: //. Slack.com / services / new /coming-webhook / +
. Вы получите страницу, содержащую подробную информацию о входящих веб-хуках, а также раскрывающийся список, из которого вам нужно выбрать канал, на который вы хотите отправлять оповещения.
изображение: https: //assets.digitalocean.com/articles/prometheus_blackbox_alertmanager_1604/uBKKA4O.png [Slack Incoming Webhook]
Выбрав канал, нажмите кнопку «Добавить интеграцию с входящими WebHooks» *.
Вы увидите новую страницу, подтверждающую, что веб-крючок был успешно создан. Скопируйте * Webhook URL *, отображаемый на этой странице, так как вы будете использовать его для настройки уведомлений Slack Alertmanager.
Откройте файл конфигурации Alertmanager в своем редакторе, чтобы настроить уведомления Slack:
sudo nano /etc/alertmanager/alertmanager.yml
Сначала добавьте под-директиву + slack_api_url +
в часть + global +
вашей конфигурации, используя URL-адрес, полученный при создании Slack Incoming Webhook.
Файл конфигурации Alertmanager, часть 1 - /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@'
smtp_require_tls: false
slack_api_url: ''
Существует два способа отправки оповещений нескольким получателям:
-
Включите несколько конфигураций приемника под одной записью. Это наименее подверженное ошибкам решение и самый простой метод.
-
Создайте несколько записей получателей и вложите несколько директив
+ route +
.
Мы не будем рассматривать второй подход в этом учебном пособии, но если вам интересно, взгляните на часть Route configuration документации Alertmanager.
В приемнике + team-1 +
добавьте новую под-директиву под названием https://prometheus.io/docs/alerting/configuration/#slack_config [+ slack_configs +
] и укажите имя канала, который должен получить оповещения. В этом случае мы будем использовать канал + general
:
Конфигурационный файл Alertmanager, часть 2 - /etc/alertmanager/alertmanager.yml
receivers:
- name: ''
email_configs:
- to: ''
general<^>'
Ваш завершенный файл конфигурации будет выглядеть следующим образом:
Файл конфигурации Alertmanager - /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@'
smtp_require_tls: false
slack_api_url: ''
route:
group_by: ['instance', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver:
receivers:
- name: ''
email_configs:
- to: ''
slack_configs:
- channel: ''
Сохраните файл и выйдите из редактора.
Теперь мы готовы запустить Alertmanager впервые.
Шаг 9 - Запуск Alertmanager
Давайте запустим Alertmanager. Сначала мы создадим системный файл systemd для Alertmanager, чтобы управлять его службой с помощью + systemd +
. Затем мы обновим Prometheus для использования Alertmanager.
Создайте новый файл модуля + systemd +
и откройте его в текстовом редакторе:
sudo nano /etc/systemd/system/alertmanager.service
Добавьте следующее в файл, чтобы сконфигурировать systemd для запуска Alertmanager как пользователь * alertmanager *, используя файл конфигурации, расположенный по адресу + / etc / alertmanager / alertmanager.yml +
, и URL-адрес Alertmanager, настроенный для использования IP-адреса вашего сервера:
/etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
WorkingDirectory=/etc/alertmanager/
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --web.external-url http://:9093
[Install]
WantedBy=multi-user.target
Это запустит Alertmanager как пользователь * alertmanager *. Он также сообщает Alertmanager использовать URL-адрес + http: //: 9093 +
для своего веб-интерфейса, где + 9093 +
- порт Alertmanager по умолчанию. Обязательно укажите протокол (+ http: // +
), иначе все не будет работать.
Сохраните файл и закройте текстовый редактор.
Далее нам нужно сообщить Prometheus о Alertmanager, добавив соответствующий каталог обнаружения службы Alertmanager в файл конфигурации Prometheus. По умолчанию Alertmanager работает на порту + 9093 +
, и поскольку он находится на том же сервере, что и Prometheus, мы будем использовать адрес + localhost: 9093 +
.
Откройте файл конфигурации Prometheus:
sudo nano /etc/prometheus/prometheus.yml
После директивы + rule_files +
добавьте следующую директиву + alertsing +
:
Конфигурационный файл Прометея - /etc/prometheus/prometheus.yml
...
rule_files:
- alert.rules.yml
...
Когда вы закончите, сохраните файл и закройте текстовый редактор.
Чтобы иметь возможность следовать URL-адресам из получаемых вами предупреждений, вам нужно сообщить Prometheus IP-адрес или доменное имя вашего сервера, используя флаг + -web.external-url +
при запуске Prometheus.
Откройте файл модуля + systemd +
для Прометея:
sudo nano /etc/systemd/system/prometheus.service
Замените существующую строку + ExecStart +
следующей:
ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.external-url http://
Ваш новый файл Prometheus будет выглядеть так:
Файл службы Прометея - /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.external-url http://
[Install]
WantedBy=multi-user.target
Сохраните файл и закройте текстовый редактор.
Перезагрузите + systemd +
и перезапустите Prometheus, чтобы применить изменения:
sudo systemctl daemon-reload
sudo systemctl restart prometheus
Убедитесь, что Прометей работает так, как задумано, проверив состояние службы:
sudo systemctl status prometheus
Если статус службы не «++», следуйте инструкциям на экране и просмотрите предыдущие шаги, чтобы устранить проблему, прежде чем продолжить обучение.
Наконец, запустите Alertmanager в первый раз:
sudo systemctl start alertmanager
Проверьте статус службы, чтобы убедиться, что Alertmanager работает должным образом:
sudo systemctl status alertmanager
Если статус службы не «++», следуйте инструкциям на экране и проследуйте предыдущие шаги, чтобы решить проблему, прежде чем продолжить обучение.
Наконец, включите службу, чтобы Alertmanager запускался при загрузке системы:
sudo systemctl enable alertmanager
Чтобы получить доступ к веб-интерфейсу Alertmanager, разрешите трафик на порт + 9093 +
через брандмауэр:
sudo ufw allow 9093/tcp
Alertmanager теперь настроен на отправку уведомлений об оповещениях по электронной почте и Slack. Давайте удостоверимся, что это работает.
Шаг 10 - Тестирование Alertmanager
Давайте удостоверимся, что Alertmanger работает правильно и отправляет электронные письма и уведомления Slack. Мы отключим конечную точку, удалив блок сервера Nginx, созданный вами в необходимых руководствах:
sudo rm /etc/nginx/sites-enabled/
Перезагрузите Nginx, чтобы применить изменения:
sudo systemctl reload nginx
Если вы хотите подтвердить, что он действительно отключен, вы можете указать свой веб-браузер на адрес вашего сервера. Вы должны увидеть сообщение о том, что сайт больше недоступен. Если вы этого не сделаете, повторите предыдущие шаги и убедитесь, что вы удалили правильный блок сервера и перезагрузили Nginx.
В зависимости от интервала + group_wait +
, который в нашем случае составляет * 30 секунд *, вы должны получать уведомления по электронной почте и Slack через 30 секунд.
Если вы этого не делаете, проверьте состояние службы с помощью следующих команд + status +
и следуйте инструкциям на экране, чтобы найти причину проблемы:
sudo systemctl status alertmanager
sudo systemctl status prometheus
Вы также можете проверить состояние оповещения в веб-интерфейсе Prometheus, указав в веб-браузере + http: /// alerts +
. Вам будет предложено ввести имя пользователя и пароль, которые вы выбрали, следуя инструкциям Prometheus. Нажав на имя оповещения, вы увидите статус, правило оповещения и соответствующие ярлыки:
изображение: https: //assets.digitalocean.com/articles/prometheus_blackbox_alertmanager_1604/ikIPV9Q.png [Пользовательский интерфейс Prometheus - оповещения]
После того, как вы убедились, что Alertmanager работает, включите конечную точку, воссоздав символическую ссылку из каталога + sites-available +
в каталог + sites-enabled +
:
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled
Перезагрузите Nginx еще раз, чтобы применить изменения:
sudo systemctl reload nginx
На следующем шаге мы рассмотрим, как использовать интерфейс командной строки Alertmanager.
Шаг 11 - Управление оповещениями с помощью CLI
Alertmanager поставляется с инструментом командной строки + amtool +
, который позволяет отслеживать, управлять и отключать оповещения.
Инструмент + amtool +
требует, чтобы вы указывали URL-адрес Alertmanager, используя флаг + - alertmanager.url +
каждый раз, когда вы выполняете команду. Чтобы использовать + amtool +
без предоставления URL, мы начнем с создания файла конфигурации.
Расположение файла конфигурации по умолчанию: + $ HOME / .config / amtool / config.yml +
, что делает конфигурацию доступной только для вашего текущего пользователя, и + / etc / amtool / config.yml +
, которая делает настройку доступно для каждого пользователя на сервере.
Вы можете свободно выбирать все, что вам нужно, но для этого урока мы будем использовать файл + $ HOME / .config / amtool / config.yml +
.
Сначала создайте каталог. Флаг + -p +
сообщает + mkdir +
о необходимости создания любых необходимых родительских каталогов:
mkdir -p $HOME/.config/amtool
Создайте файл + config.yml +
и откройте его в текстовом редакторе:
nano $HOME/.config/amtool/config.yml
Добавьте следующую строку, чтобы сообщить + amtool +
об использовании Alertmanager с URL-адресом + http: // localhost: 9093 +
:
~ / .Config / amtool / config.yml
alertmanager.url: http://localhost:9093
Сохраните файл и выйдите из текстового редактора.
Теперь посмотрим, что мы можем сделать с помощью инструмента командной строки + amtool +
.
Используя команду + amtool alert query
, вы можете просмотреть все оповещения, которые были отправлены Alertmanager:
amtool alert query
В выходных данных отображается имя оповещения, время его первого появления и сводка оповещения, которую вы предоставили при настройке:
OutputAlertname Starts At Summary
EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down
Вы также можете отфильтровать оповещения по их меткам, используя соответствующее сопоставление. Сопоставитель содержит имя метки, соответствующую операцию, которая может быть + = +
для полного соответствия и + = ~ +
для частичного соответствия, и значение метки.
Если вы хотите перечислить все оповещения, к которым прикреплена метка критической важности, используйте сопоставление + severity = критический +
в команде + alert query +
:
amtool alert query
Как и прежде, выходные данные содержат имя оповещения, время первого появления оповещения и сводку оповещения.
OutputAlertname Starts At Summary
EndpointDown 2018-04-03 08:48:47 UTC Endpoint http://localhost:8080 down
Вы можете использовать регулярные выражения для сопоставления меток с оператором + = ~ +
. Например, чтобы вывести список всех оповещений для конечных точек + http: // localhost +
, не зависящих от порта, вы можете использовать + instance = ~ http: // localhost. * +
Matcher:
amtool alert query
Поскольку у вас есть только одно предупреждение и конечная точка, выходные данные будут такими же, как в предыдущем примере.
Чтобы посмотреть конфигурацию Alertmanager, используйте команду + amtool config +
:
amtool config
Вывод будет содержать содержимое файла + / etc / alertmanager / alertmanager.yml +
.
Теперь давайте посмотрим, как отключить оповещения с помощью + amtool +
.
Предупреждения с глушением позволяют отключить оповещения на основе сопоставления на определенное время. В течение этого периода вы не будете получать никаких писем или уведомлений об отключенном оповещении.
Команда + amtool silence add +
принимает совпадение в качестве аргумента и создает новый silence на основе совпадения.
Чтобы определить срок действия предупреждения, используйте флаг + - expires +
с требуемой продолжительностью молчания, например + 1h +
или флаг + - expire-on +
со временем истечения тишины в https. : //www.ietf.org/rfc/rfc3339.txt [формат RFC3339]. Например, формат + 2018-10-04T07: 50: 00 + 00: 00 +
представляет 7:50 утра 4 октября 2018 года.
Если флаг + - expires +
или + - expires-on +
не предоставлен, оповещения будут отключены на * 1 час *.
Чтобы отключить все оповещения для экземпляра + http: // localhost: 8080 +
на * 3 часа *, вы должны использовать следующую команду:
amtool silence add instance= --expires
Вывод содержит идентификационный номер для тишины, поэтому обязательно запишите его, так как он понадобится вам на случай, если вы захотите удалить молчание:
Output
Если вы хотите предоставить дополнительную информацию при создании молчания, такую как автор и комментарии, используйте флаги + - author +
и + - comment +
:
amtool silence add severity=critical --expires 3h
Как и прежде, вывод содержит идентификатор тишины:
Output
Команда + amtool silence query +
покажет список всех недействительных пауз:
amtool silence query
Вывод содержит идентификатор тишины, список соответствий, отметку времени истечения, автора и комментарий:
OutputID Matchers Ends At Created By Comment
12b7b9e1-f48a-4ceb-bd85-65ac882ceed1 severity=critical 2018-04-04 08:02:58 UTC Sammy The Shark Investigating in the progress
4e89b15b-0814-41d3-8b74-16c513611732 instance=http://localhost:8080 2018-04-04 08:14:21 UTC sammy
Подобно команде + alert query
, вы можете использовать метки соответствия для фильтрации вывода по меткам, прикрепленным при создании:
amtool silence query instance=http://localhost:8080
Как и прежде, выходные данные будут включать идентификационный номер и детали предупреждения:
OutputID Matchers Ends At Created By Comment
4e89b15b-0814-41d3-8b74-16c513611732 instance=http://localhost:8080 2018-04-04 08:14:21 UTC sammy
Наконец, чтобы истечь тишина, используйте + amtool silence expire +
с идентификатором тишины, которую вы хотите истечь:
amtool silence expire
amtool silence expire
Нет вывода представляет успешное выполнение команды. Если вы видите ошибку, убедитесь, что вы указали правильный идентификатор тишины.
Заключение
В этом руководстве вы настроили Blackbox Exporter и Alertmanager для совместной работы с Prometheus, чтобы вы могли получать оповещения по электронной почте и Slack. Вы также использовали интерфейс командной строки Alertmanager + amtool +
для управления и отключения оповещений.
Если вы хотите узнать больше о других интеграциях Alertmanager, взгляните на часть [Configuration] https://prometheus.io/docs/alerting/configuration/ документации Alertmanager.
Кроме того, вы можете посмотреть, как интегрировать оповещения Прометея с другими службами, такими как Grafana.