Мониторинг Prometheus

В этом руководстве мы расскажем, что такое мониторинг 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» укажите пароль от почтового ящика. 

Готово, при правильных настройках на почту придет письмо.
 

Если вы не нашли ответ, спросите у нас!
Написать в поддержку