Мониторинг Prometheus
- Prometheus: описание
- Как установить Prometheus
- Как добавить объекты в мониторинг
- Как установить Alertmanager
- Как настроить отправку уведомлений на почту
В этом руководстве мы расскажем, что такое мониторинг Prometheus и как установить его на Ubuntu и CentOS. Кроме этого, мы покажем, как настроить отправку оповещений о событиях на почту.
Prometheus: описание
Prometheus [Прометеус] ― система мониторинга с открытым исходным кодом. Большинство её компонентов написаны на языке программирования Go и лишь небольшая часть на Ruby и Java.
Мониторинг сервисов Prometheus начали разрабатывать в 2012 году несколько сотрудников компании SoundCloud. Они обнаружили, что существующих на рынке решений им недостаточно, поэтому решили создать свой инструмент для мониторинга микросервисной архитектуры.
Микросервисная архитектура подразумевает, что приложение работает как набор отдельных сервисов. Каждый сервис взаимодействует с окружением при помощи протокола HTTP или другого простого механизма. У таких систем нужно отслеживать как общее состояние, так и состояние каждого отдельного компонента. Разработчики SoundCloud создали такой механизм, который соответствует этим требованиям. Поэтому архитектура, для которой идеально подходит Prometheus ― микросервисы.
Prometheus-мониторинг может работать с самыми разными системами: серверами Apache и Nginx, базами данных, виртуальными серверами, машинами и др. Для этого используются экспортёры (Exporters). Они позволяют получить данные из сторонней системы и преобразовать в формат данных, который будет понятен Prometheus Server. Полный список экспортёров есть на сайте Prometheus.
В отличии от Zabbix (ещё одна популярная система мониторинга), в Prometheus нет встроенного средства визуализации. Чтобы визуализировать данные, можно установить дополнение Grafana. Оно позволяет строить в Prometheus графики, таблицы, диаграммы и собирать их на один экран (dashboard). Для передачи данных с Prometheus Server к Grafana используется язык PromQL.
Система мониторинга Prometheus собирает данные с целевых объектов автономно при помощи HTTP-запросов. Другие системы мониторинга работают ровно наоборот: все данные им отправляет сам объект мониторинга. Таким образом, Prometheus метрики собирает самостоятельно, а пользователь только задаёт интервал сбора параметров с объектов.
Как установить Prometheus
1. Скопируйте ссылку на архив с установочными файлами для нужной операционной системы с официального сайта.
2. Скачайте Prometheus на сервер:
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
3. Распакуйте архив:
tar -xvzf prometheus-2.30.3.linux-amd64.tar.gz prometheus-2.30.3.linux-amd64
4. Скопируйте файлы в /usr/local/bin:
cd prometheus-2.30.3.linux-amd64
cp prometheus /usr/local/bin/
cp promtool /usr/local/bin/
5. Создайте директорию для конфигурационных файлов и скопируйте в неё файлы:
cp -r consoles/ /etc/prometheus/consoles/
cp -r console_libraries/ /etc/prometheus/console_libraries/
cp prometheus.yml /etc/prometheus/
6. Создайте каталог, в котором будут храниться данные мониторинга:
mkdir /var/lib/prometheus
7. Создайте нового пользователя и смените владельца для файлов и папок:
useradd -M -r -s /bin/nologin prometheus
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
8. Создайте юнит systemd для управления службой:
vim /etc/systemd/system/prometheus.service
9. Добавьте в config-файл:
[Unit]
Description=Prometheus systemd service unit
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
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.listen-address=0.0.0.0:9090
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
Сохраните файл и закройте текстовый редактор.
10. Обновите список юнитов:
systemctl daemon-reload
11. Запустите программу Prometheus:
systemctl start prometheus.service
12. Настройте автоматический запуск Prometheus:
systemctl enable prometheus.service
created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service
Готово, вы установили Prometheus. Он доступен по адресу http://$IP:9090:
Как добавить объекты в мониторинг
Для сбора данных с целевых объектов, установите node_exporter. Для этого:
1. Скопируйте ссылку на архив с установочными файлами node_exporter с официального сайта.
2. Скачайте архив с node_exporter на сервер:
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
3. Разархивируйте содержимое:
tar -xvzf node_exporter-1.2.2.linux-amd64.tar.gz
4. Скопируйте bin-файл в директорию /usr/local/bin:
cp node_exporter-1.2.2.linux-amd64/node_exporter /usr/local/bin
5. Создайте пользователя node_exporter:
useradd -M -r -s /bin/nologin node_exporter
6. Создайте юнит systemd:
vim /etc/systemd/system/node_exporter.service
7. Скопируйте в файл конфигурацию:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=default.target
Сохраните файл и закройте текстовый редактор.
8. Обновите список юнитов:
systemctl daemon-reload
9. Включите сервис node_exporter:
systemctl start node_exporter.service
10. Включите автозапуск node_exporter:
systemctl enable node_exporter.service
11. Чтобы настроить сбор данных с node_exporter, измените файл /etc/prometheus/prometheus.yml следующим образом:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_localhost'
static_configs:
- targets: ['localhost:9100']
Обратите внимание, yml-формат чувствителен к пробелам и табуляциям.
12. Перезапустите Prometheus:
systemctl restart prometheus.service
13. В интерфейсе Prometheus в выпадающем списке «Status» выберите пункт Targets. Здесь вы увидите новый целевой объект для мониторинга:
14. Чтобы установить node_exporter на другую машину и включить её в мониторинг, измените конфиг:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_localhost'
static_configs:
- targets: ['localhost:9100']
- job_name: 'node_exporter_clients'
static_configs:
- targets: ['194.12.345.6:9100']
15. Чтобы добавить в мониторинг сразу несколько серверов, данные с которых будут собираться совместно, введите:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter_clients'
static_configs:
- targets: ['194.12.345.6:9100','localhost:9100']
Готово, вы добавили объекты в мониторинг.
Как установить Alertmanager
При помощи Alertmanager можно настраивать рассылку уведомлений по заданным правилам. Чтобы установить Alertmanager:
1. Скопируйте ссылку на архив с установочными файлами Alertmanager с официального сайта.
2. Скачайте Alertmanager на сервер:
wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz
3. Разархивируйте содержимое:
tar -xvzf alertmanager-0.23.0.linux-amd64.tar.gz
4. Создайте новую директорию:
mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
5. Скопируйте файлы в нужные директории:
cd alertmanager-*linux-amd64/
cp amtool alertmanager /usr/local/bin/
cp alertmanager.yml /etc/alertmanager
6. Создайте пользователя для Alertmanager и смените владельца для файлов и папок:
useradd -M -r -s /bin/nologin alertmanager
chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
7. Создайте юнит systemd:
vim /etc/systemd/system/alertmanager.service
8. Скопируйте в файл следующую конфигурацию:
[Unit]
Description=Alertmanager Service
After=network.target
[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/prometheus/alertmanager \
--cluster.advertise-address=127.0.0.1:9093
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Сохраните файл и закройте текстовый редактор.
9. Обновите список юнитов:
systemctl daemon-reload
10. Запустите Alertmanager:
systemctl start alertmanager
11. Включите Alertmanager в автозагрузку:
systemctl enable alertmanager
12. Создайте файл:
vim /etc/prometheus/alert.rules.yml
13. Поместите в него правило, по которому сервер, по мнению системы, будет работать неправильно:
groups:
- name: alert.rules
rules:
- alert: InstanceDown
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down
for more than 30 seconds. '
summary: Instance {{ $labels.instance }} down
14. Добавьте правило в конфигурационные файлы Prometheus и Alertmanager:
rule_files:
- 'alert.rules.yml'
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 'localhost:9093'
15. Перезапустите Prometheus:
systemctl restart prometheus.service
Готово, Alertmanager установлен и настроен. Он доступен по адресу http://$IP:9090/alerts.
Как настроить отправку уведомлений на почту
1. Откройте конфигурационный файл Alertmanager:
vim /etc/alertmanager/alertmanager.yml
2. Скопируйте в него конфиг:
global:
resolve_timeout: 5m
smtp_from: "test@yandex.ru"
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
routes:
- receiver: 'send_email'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
- name: 'send_email'
email_configs:
- to: 'test@yandex.ru'
smarthost: 'smtp.yandex.ru:587'
require_tls: true
auth_username: "test@yandex.ru"
auth_identity: "test@yandex.ru"
auth_password: "password"
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
Вместо «test@yandex.ru» введите имя вашего ящика, а вместо «password» укажите пароль от почтового ящика.
Готово, при правильных настройках на почту придет письмо.