April 6, 2023

Система мониторинга Prometheus

Prometheus описание

Prometheus — система мониторинга серверов и программ с открытым исходным кодом. Она была выпущена в 2012 году для мониторинга музыкальной социальной сети SoundCloud. Из-за специфики архитектуры SoundCloud традиционные системы мониторинга не подходили, поэтому по новой технологии был создан Prometheus-мониторинг. Позже новый мониторинг сервисов стал интересен за пределами музыкальной сети. Создатели доработали систему и предложили её более широкому рынку. Релиз обновлённой программы прошёл в 2015 году.

Система мониторинга Prometheus может собирать информацию о состоянии серверов и систем (Linux-сервера, Apache-сервера, сервера баз данных), а также получать предупреждения о проблемах. Объекты мониторинга называются целевыми объектами.

Система мониторинга Prometheus

В этой статье мы расскажем, что такое мониторинг 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. 1.На официальном сайте Prometheus скопируйте ссылку на установочный пакет для Linux:Пример ссылки для Linux
  2. 2.Если у вас нет wget, то перед началом работы с Prometheus установите этот пакет.wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
  3. 3.Распакуйте архив:tar -xvzf prometheus-2.20.1.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64/
  4. 4.Скопируйте исполняемые файлы в /usr/local/bin/: cd prometheus-2.20.1.linux-amd64/cp prometheus /usr/local/bin/cp promtool /usr/local/bin/
  5. 5.Создайте папку для файлов конфигурации и скопируйте в неё конфиги:
    cp -r consoles/ /etc/prometheus/consoles/cp -r console_libraries/ /etc/prometheus/console_libraries/cp prometheus.yml /etc/prometheus/
  6. 6.Создайте папку для хранения данных:mkdir /var/lib/prometheus
  7. 7.Создайте пользователя и назначьте владельца файлов и папок:
    useradd -M -r -s /bin/nologin promethechown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
  8. 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. 9.Обновите список юнитов:systemctl daemon-reload
  10. 10.Запустите Prometheus:systemctl start prometheus.service
  11. 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. 1.На официальном сайте Prometheus скопируйте ссылку для установки node_exporter:Пример ссылки для Linux
  2. 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. 3.Распакуйте архив:wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
  4. 4.Скопируйте бинарный файл:wget cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/
  5. 5.Создайте пользователя:useradd -M -r -s /bin/nologin node_exporter
  6. 6.Создайте юнит:vim /etc/systemd/system/node_exporter.service
  7. 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. 8.Обновите список сервисов:systemctl daemon-reload
  9. 9.Включите node_exporter:systemctl start node_exporter.service
  10. 10.Для автоматической загрузки node_exporter введите:systemctl enable node_exporter.service
  11. 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. 12.Перезагрузите Prometheus:systemctl restart prometheus.service
  13. 13.В веб-интерфейсе Prometheus зайдите в рубрику StatusTargets. Там появится новый таргет для мониторинга:
  14. 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. 1.На официальном сайте Prometheus скопируйте ссылку для установки alertmanager.
  2. 2.Установите пакет alertmanager. Например, для Linux введите:wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
  3. 3.Распакуйте архив:tar -xvzf alertmanager-0.21.0.linux-amd64.tar.gz
  4. 4.Создайте папку:mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
  5. 5.Скопируйте бинарный файл и config в нужные папки:cd alertmanager-*linux-amd64/ cp amtool alertmanager /usr/local/bin/ cp alertmanager.yml /etc/alertmanager
  6. 6.useradd -M -r -s /bin/nologin alertmanager
  7. 7.Исправьте владельца на config и директорию с данными:chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
  8. 8.Создайте systemd-юнит:vim /etc/systemd/system/alertmanager.service
  9. 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. 10.Обновите список юнитов:systemctl daemon-reload
  11. 11.Запустите Alertmanager:systemctl start alertmanager
  12. 12.Настройте автозагрузку Alertmanager:systemctl enable alertmanager
  13. 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. 14.Поместите правило в config Prometheus и Alertmanager:rule_files: - 'alert.rules.yml'# Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: - 'localhost:9093'
  15. 15.Перезапустите Prometheus:systemctl restart prometheus.service

Готово, вы установили Alertmanager. Его можно увидеть по адресу http://$IP:9090/alerts.

Как настроить уведомления на почту

Настроим уведомления на Яндекс.Почту через Alertmanager.

  1. 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']