В этой статье мы расскажем, что такое мониторинг Prometheus, как установить и как пользоваться Prometheus.
Prometheus описание
Prometheus — система мониторинга серверов и программ с открытым исходным кодом. Она была выпущена в 2012 году для мониторинга музыкальной социальной сети SoundCloud. Из-за специфики архитектуры SoundCloud традиционные системы мониторинга не подходили, поэтому по новой технологии был создан Prometheus-мониторинг. Позже новый мониторинг сервисов стал интересен за пределами музыкальной сети. Создатели доработали систему и предложили её более широкому рынку. Релиз обновлённой программы прошёл в 2015 году.
Система мониторинга Prometheus может собирать информацию о состоянии серверов и систем (Linux-сервера, Apache-сервера, сервера баз данных), а также получать предупреждения о проблемах. Объекты мониторинга называются целевыми объектами.
Главное отличие Prometheus от остальных систем мониторинга — метод сбора данных. Обычно объекты мониторинга отправляют нужные параметры серверам мониторинговых программ. Прометеус же наоборот — сам берёт нужную ему информацию с серверов и устройств, обращаясь к целевым объектам при помощи языка PromQL. Сервер Prometheus считывает параметры целевых объектов с интервалами, которые задаёт пользователь. Данные от целевых объектов передаются на сервер в формате http и хранятся в базе данных временных рядов. В отличие от системы Zabbix, которая написана на языке С и PHP, Prometheus написан на Go и Ruby. Prometheus функционирует благодаря таким компонентам, как:
- 1. Prometheus-server — главное звено всей системы. Он отвечает за сбор и хранение данных. Есть простой веб-интерфейс, но для полноценной работы с системой лучше устанавливать дополнительный.
- 2. Exporters — это часть ПО, которая собирает и передаёт Prometheus-метрики серверу. Существуют разные экспортёры, например HAProxy, StatsD, Graphite. Они устанавливаются на целевые объекты и собирают определённые метрики. Если ни один экспортёр вам не подходит, то можно написать свой.
Работа с Prometheus не обойдётся без дополнения Grafana — с его помощью можно визуализировать полученные данные в виде наглядных графиков, диаграмм и таблиц (dashboard). А также Alertmanager — программы для настройки уведомлений. Если на целевом объекте появятся проблемы, Alertmanager сможет отправить письмо на почту, Slack, Hipchat, Pagerduty или Telegram.
C помощью руководства ниже вы сможете установить Prometheus на CentOS, Debian, Ubuntu. Также мы расскажем, как установить exporter и Alertmanager, чтобы можно было получать сообщения о неисправностях.
Как установить Prometheus
-
1
На официальном сайте Prometheus скопируйте ссылку на установочный пакет для Linux:
Пример ссылки для Linux
-
2
Если у вас нет wget, то перед началом работы с Prometheus установите этот пакет.
wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
-
3
Распакуйте архив:
tar -xvzf prometheus-2.20.1.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64/
-
4
Скопируйте исполняемые файлы в /usr/local/bin/:
cd prometheus-2.20.1.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
Впишите в файл конфигурацию сервиса Prometheus:
[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
Сохраните изменения в файле и выйдите.
-
9
Обновите список юнитов:
systemctl daemon-reload
-
10
Запустите Prometheus:
systemctl start prometheus.service
-
11
Для автоматической загрузки Prometheus введите:
systemctl enable prometheus.service Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service
Готово, теперь Prometheus доступен по адресу $IP:9090:
Как установить exporter
Чтобы Prometheus мог собирать данные с целевых объектов, установите node_exporter.
-
1
На официальном сайте Prometheus скопируйте ссылку для установки node_exporter:
Пример ссылки для Linux
-
2
Установите пакет node_exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
-
3
Распакуйте архив:
tar -xvzf node_exporter-1.0.1.linux-amd64.tar.gz node_exporter-1.0.1.linux-amd64/
-
4
Скопируйте бинарный файл:
cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/
-
5
Создайте пользователя:
useradd -M -r -s /bin/nologin node_exporter
-
6
Создайте юнит:
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
Чтобы собирались данные с экспортёра, исправьте /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 на другую машину и добавить её в мониторинг, внесите правки в config:
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']
Чтобы добавить несколько серверов, которые нужно мониторить вместе, введите:
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.
- 1 На официальном сайте Prometheus скопируйте ссылку для установки alertmanager.
-
2
Установите пакет alertmanager. Например, для Linux введите:
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
-
3
Распакуйте архив:
tar -xvzf alertmanager-0.21.0.linux-amd64.tar.gz
-
4
Создайте папку:
mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
-
5
Скопируйте бинарный файл и config в нужные папки:
cd alertmanager-*linux-amd64/ cp amtool alertmanager /usr/local/bin/ cp alertmanager.yml /etc/alertmanager
-
6
useradd -M -r -s /bin/nologin alertmanager
-
7
Исправьте владельца на config и директорию с данными:
chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
-
8
Создайте systemd-юнит:
vim /etc/systemd/system/alertmanager.service
-
9
Впишите в файл:
[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
Сохраните изменения в файле и выйдите.
-
10
Обновите список юнитов:
systemctl daemon-reload
-
11
Запустите Alertmanager:
systemctl start alertmanager
-
12
Настройте автозагрузку Alertmanager:
systemctl enable alertmanager
-
13
Создайте правило для мониторинга, при котором система будет считать, что виртуальный сервер работает неправильно.
vim /etc/prometheus/alert.rules.yml
Содержимое файла:
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
Поместите правило в config 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.
Как настроить уведомления на почту
Настроим уведомления на Яндекс.Почту через Alertmanager.
-
1
Введите:
vim /etc/alertmanager/alertmanager.yml
Содержимое файла должно выглядеть так:
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']
Готово, если всё сделано правильно, то на почту будет отправлено проверочное письмо.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊