Как использовать Alertmanager и Blackbox Exporter для мониторинга вашего веб-сервера в Ubuntu 16.04

Автор выбрал 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: ''

Существует два способа отправки оповещений нескольким получателям:

  1. Включите несколько конфигураций приемника под одной записью. Это наименее подверженное ошибкам решение и самый простой метод.

  2. Создайте несколько записей получателей и вложите несколько директив + 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.

Related