Система мониторинга Prometheus
Prometheus — система мониторинга серверов и программ с открытым исходным кодом. Она была выпущена в 2012 году для мониторинга музыкальной социальной сети SoundCloud. Из-за специфики архитектуры SoundCloud традиционные системы мониторинга не подходили, поэтому по новой технологии был создан Prometheus-мониторинг. Позже новый мониторинг сервисов стал интересен за пределами музыкальной сети. Создатели доработали систему и предложили её более широкому рынку. Релиз обновлённой программы прошёл в 2015 году.
Система мониторинга Prometheus может собирать информацию о состоянии серверов и систем (Linux-сервера, Apache-сервера, сервера баз данных), а также получать предупреждения о проблемах. Объекты мониторинга называются целевыми объектами.
Система мониторинга Prometheus
В этой статье мы расскажем, что такое мониторинг Prometheus, как установить и как пользоваться Prometheus.
Prometheus — система мониторинга серверов и программ с открытым исходным кодом. Она была выпущена в 2012 году для мониторинга музыкальной социальной сети SoundCloud. Из-за специфики архитектуры SoundCloud традиционные системы мониторинга не подходили, поэтому по новой технологии был создан Prometheus-мониторинг. Позже новый мониторинг сервисов стал интересен за пределами музыкальной сети. Создатели доработали систему и предложили её более широкому рынку. Релиз обновлённой программы прошёл в 2015 году.
Система мониторинга Prometheus может собирать информацию о состоянии серверов и систем (Linux-сервера, Apache-сервера, сервера баз данных), а также получать предупреждения о проблемах. Объекты мониторинга называются целевыми объектами.
Мониторинг выделенных серверов
Держите руку на пульсе и будьте в курсе всех изменений параметров вашего сервера.
Главное отличие Prometheus от остальных систем мониторинга — метод сбора данных. Обычно объекты мониторинга отправляют нужные параметры серверам мониторинговых программ. Прометеус же наоборот — сам берёт нужную ему информацию с серверов и устройств, обращаясь к целевым объектам при помощи языка PromQL. Сервер Prometheus считывает параметры целевых объектов с интервалами, которые задаёт пользователь. Данные от целевых объектов передаются на сервер в формате http и хранятся в базе данных временных рядов. В отличие от системы Zabbix, которая написана на языке С и PHP, Prometheus написан на Go и Ruby.
Prometheus функционирует благодаря таким компонентам, как:
- Prometheus-server — главное звено всей системы. Он отвечает за сбор и хранение данных. Есть простой веб-интерфейс, но для полноценной работы с системой лучше устанавливать дополнительный.
- 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 promethechown -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 введите:
ystemctl 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.Распакуйте архив:
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
- 4.Скопируйте бинарный файл:
wget 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: "[email protected]"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: '[email protected]' smarthost: 'smtp.yandex.ru:587' require_tls: true auth_username: "[email protected]" auth_identity: "[email protected]" auth_password: "password"inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']