👁 311

Настраиваем мониторинг с Prometheus. Часть 1. Знакомство и установка.

Мониторинг — это процесс отслеживания и анализа ключевых показателей эффективности с целью выявления и решения проблем в режиме реального времени. Он включает в себя сбор данных, их обработку и визуализацию. Мониторинг может быть использован для оценки производительности системы, выявления потенциальных проблем и оптимизации процессов.

Одним из ключевых компонентов мониторинга является выбор метрик — числовых показателей, которые отражают состояние системы или процесса. Например, загрузка процессора, использование памяти, время ответа сервера и т.д. Выбор метрик зависит от конкретной задачи и системы, которую необходимо мониторить.

Мониторинг позволяет получить информацию о состоянии системы в реальном времени, что может быть полезно для обнаружения проблем и принятия решений на основе данных. Однако, для эффективного использования мониторинга необходимо понимать, какие данные собираются и как они интерпретируются.

Если система состоит из множества компонентов и имеет высокую нагрузку, то наличие системы мониторинга становится еще более важным. В этом случае, мониторинг может помочь выявить проблемы на ранней стадии и предотвратить их развитие.

Prometheus — это платформа для мониторинга и alerting’а, которая позволяет собирать, обрабатывать и визуализировать данные в режиме реального времени. Она предоставляет инструменты для создания и управления наборами данных, а также для создания оповещений и уведомлений на основе определенных критериев.

Архитектура Prometheus

Prometheus является одним из самых популярных инструментов для мониторинга и предупреждения сбоев в работе различных систем. Он имеет веб-интерфейс и может быть настроен с помощью YAML-файлов. В данной статье мы познакомимся с основными компонентами Prometheus и рассмотрим процесс установки и настройки этой системы.

Prometheus — центральное звено, где хранятся все собранные метрики и имеется веб-интерфейс для их просмотра. Она собирает данные из различных источников, обрабатывает их и сохраняет на сервере. Prometheus также имеет веб-интерфейс, который позволяет пользователям просматривать собранные данные в реальном времени.

Node Exporter — агенты, собирающие метрики с целевых машин и передающие их на сервер Prometheus. Они могут быть настроены для сбора различных типов данных, таких как загрузка процессора, использование памяти и другие метрики производительности. Экспортеры устанавливаются на целевые машины и отправляют данные на сервер Prometheus через HTTP.

AlertManager —  уведомляет о возникших проблемах, обрабатывает оповещения и отправляет их на определенные адреса. Он поддерживает различные способы отправки уведомлений, такие как электронная почта, Slack, HipChat и PagerDuty. Также возможно настроить отправку оповещений через Telegram и другие сервисы.

Читайте также:  GPG инструкции

Grafana — это инструмент для визуализации данных, который может быть использован вместе с Prometheus. Она позволяет создавать красивые графики и дашборды, которые отображают различные метрики в реальном времени. Grafana может быть настроена для работы с различными источниками данных, включая Prometheus.

Установка

Prometheus можно установить тремя способами: через менеджер пакетов, путем загрузки и установки готовых двоичных файлов с официального сайта, или развернув все компоненты в контейнере Docker. Установка через менеджер пакетов упрощает процесс обновления, но может привести к устареванию версии Prometheus. Ручная установка позволяет использовать последнюю версию Prometheus, но требует больше усилий для обновления. Развертывание в Docker-контейнере обеспечивает гибкость и контроль, но также требует более глубоких знаний о Docker и Prometheus.

Установка вручную

Prometheus можно установить вручную на различные дистрибутивы Linux, такие как Ubuntu, Debian, CentOS и Arch. Этот процесс включает в себя загрузку и установку бинарных файлов с официального сайта Prometheus, настройку компонентов Prometheus и запуск сервера Prometheus. Этот метод установки позволяет использовать последнюю версию Prometheus и обеспечивает гибкость в настройке и управлении Prometheus.

Установка Prometheus

Чтобы установить Prometheus вручную, необходимо выполнить следующее. Перейдите на страницу релизов Prometheus на GitHub (https://github.com/prometheus/prometheus/releases) и скачайте бинарный файл для своей платформы.

$ wget https://github.com/.../prometheus-2.45.3.linux-amd64.tar.gz
$ tar xf prometheus-*.tar.gz

Раскидываем файлы по файловой системе и заводим пользователя:

# cd prometheus-*
# cp prometheus promtool /usr/local/bin
# mkdir /etc/prometheus /var/lib/prometheus
# cp prometheus.yml /etc/prometheus
# useradd --no-create-home --home-dir / --shell /bin/false prometheus
# chown -R prometheus:prometheus /var/lib/prometheus

В архиве будут два ненужных каталога: console_libraries/ и consoles/. Их не трогаем.

Создаём systemd-юнит: /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/usr/local/bin/prometheus \
  --config.file /etc/prometheus/prometheus.yml \
  --storage.tsdb.path /var/lib/prometheus/
ExecReload=/bin/kill -HUP $MAINPID
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=default.target

Запускаем Prometheus server:

# systemctl daemon-reload
# systemctl start prometheus
# systemctl status prometheus

В статусе должно быть написано “active (running)” — значит работает. Теперь можно сходить на http://localhost:9090 и полюбоваться на интерфейс Prometheus’а. Пока что он бесполезен, но уже можно потыкать.

prometheus server

Установка node exporter

Node exporter надо раскатать на всех машинах, которые вы хотите мониторить. Устанавливается он аналогично серверу. Берём последний билд с github.com/prometheus/node_exporter/releases.

$ wget https://github.com/.../node_exporter-0.18.1.linux-amd64.tar.gz
$ tar xf node_exporter-*.tar.gz
# cd node_exporter-*
# cp node_exporter /usr/local/bin
# useradd --no-create-home --home-dir / --shell /bin/false node_exporter

Создаём systemd-юнит: /etc/systemd/system/node_exporter.service

[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
Type=simple
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter

SyslogIdentifier=node_exporter
Restart=always

PrivateTmp=yes
ProtectHome=yes
NoNewPrivileges=yes

ProtectSystem=strict
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=yes

[Install]
WantedBy=multi-user.target

Важно! Если у вас /home вынесен на отдельный раздел, директиву ProtectHome=yes надо убрать, иначе node exporter будет неправильно показывать оставшееся место на разделе /home.

Запускаем node exporter:

# systemctl daemon-reload
# systemctl start node_exporter
# systemctl status node_exporter

Можно посмотреть как node exporter отдаёт метрики:

$ curl -s http://localhost:9100/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 7.9825e-05
go_gc_duration_seconds{quantile="0.25"} 7.9825e-05
go_gc_duration_seconds{quantile="0.5"} 7.9825e-05
go_gc_duration_seconds{quantile="0.75"} 7.9825e-05
go_gc_duration_seconds{quantile="1"} 7.9825e-05
go_gc_duration_seconds_sum 7.9825e-05
go_gc_duration_seconds_count 1
...

Пока не пытайтесь понять вывод. Отдаёт, и хорошо.

Читайте также:  GPG инструкции

Установка alertmanager

Alertmanager — это про алерты. Первое время алертов у вас не будет, поэтому сейчас его можно не ставить. Но лучше всё-таки поставить, чтобы всё необходимое уже было подготовлено. Идём за дистрибутивом на github.com/prometheus/alertmanager/releases.

$ wget https://github.com/.../alertmanager-0.18.0.linux-amd64.tar.gz
$ tar xf alertmanager-*.tar.gz
# cd alertmanager-*
# cp alertmanager /usr/local/bin
# mkdir /etc/alertmanager /var/lib/alertmanager
# cp alertmanager.yml /etc/alertmanager
# useradd --no-create-home --home-dir / --shell /bin/false alertmanager
# chown -R alertmanager:alertmanager /var/lib/alertmanager

Создаём systemd-юнит: /etc/systemd/system/alertmanager.service

[Unit]
Description=Alertmanager for prometheus
After=network.target

[Service]
User=alertmanager
ExecStart=/usr/local/bin/alertmanager \
  --config.file=/etc/alertmanager/alertmanager.yml \
  --storage.path=/var/lib/alertmanager/
ExecReload=/bin/kill -HUP $MAINPID

NoNewPrivileges=true
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=multi-user.target

Запускаем alertmanager:

# systemctl daemon-reload
# systemctl start alertmanager
# systemctl status alertmanager

В веб-интерфейсе Alertmanager доступны только базовые функции. Он работает на порту 9093 по адресу http://localhost:9093 и не предоставляет никаких дополнительных возможностей.

Установка Grafana

Если у вас Centos или Ubuntu, лучше установить Grafana из пакета. Это можно сделать используя репозитории ваших операционных систем или скачать на сайте grafana.com в разделе download.

$ wget https://dl.grafana.com/oss/release/grafana_6.3.2_amd64.deb
# dpkg -i grafana_6.3.2_amd64.deb

Запускаем grafana:

# systemctl start grafana
# systemctl status grafana

Prometheus, Node exporter, Alertmanager и Grafana слушают на всех сетевых интерфейсах по умолчанию. Это может сделать их уязвимыми для атак из интернета. Поэтому рекомендуется прикрыть их фаерволом от посторонних глаз.

Теперь, когда все необходимое установлено, нужно все компоненты подружить друг с другом. Для начала минимально настроим Prometheus:

Файл /etc/prometheus/prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - localhost:9093

scrape_configs:
  - job_name: 'node'
    static_configs:
    - targets:
       - localhost:9100
     # - anotherhost:9100

Сейчас не буду углубляться в детали настройки, это оставим для следующих статей. На данный момент нам нужно получить хотя бы базовый, но работающий функционал мониторинга. Самое важное, что нужно знать на текущий момент:

  • Отступы в файле prometheus.yml должны быть сделаны с помощью двух пробелов, а не переносов строк. Это важно для корректной работы Prometheus.
  • Параметр scrape_interval в конфигурационном файле Prometheus указывает, как часто Prometheus будет опрашивать экспортеры на предмет новых данных.
  • Alertmanager слушает localhost:9093, node exporter слушает localhost:9100. IP-адрес alertmanager и Node exporter должны быть заменены на соответствующие IP-адреса ваших серверов. Если у вас установлен Node exporter на нескольких серверах, вы должны указать все их IP-адреса в конфигурационном файле.
Читайте также:  Linux - простыми словами

После изменения конфигурационного файла prometheus.yml, вам нужно перезапустить Prometheus, чтобы он прочитал новый конфигурационный файл. Вы можете сделать это с помощью команды:

# systemctl reload prometheus

Если вы все сделали правильно, на странице http://localhost:9090/targets в веб-интерфейсе Prometheus должен появится первый targets. Состояние targets должно быть “UP”, что означает, что он доступен для опроса.

Prometheus targets
Prometheus targets

Отлично, теперь у вас работает мониторинг! Вы можете перейти на вкладку Graf и запросить любую метрику, которую вы отслеживаете. Здесь вы также можете увидеть график изменения этой метрики со временем. Например, вы можете посмотреть график загрузки сервера (node_load1), который показывает среднее значение загрузки за одну минуту.

Графики

В повседневной жизни вы редко будуте обращается к графическим интерфейсам такого типа для просмотра графиков. Скорее всего, вы будем использовать для этого специализированные программы или онлайн-сервисы, такие как Grafana.

Отлично, теперь мы можем открыть Grafana по адресу http://localhost:3000 и войти в систему с указанными учетными данными. Внутри мы можем настроить различные параметры через веб-интерфейс, если это необходимо. В боковой панели мы нажимаем на “Configuration” (шестеренка) и затем выбираем “Preferences”.

Dashboard Grafana
Dashboard Grafana

Теперь мы переходим на вкладку “Data Sources” и добавляем наш Prometheus.

Data Source Grafana
Data Source Grafana

Теперь мы добавляем готовый дашборд “Node exporter full”, который является лучшим стартовым дашбордом. Мы можем найти его в разделе “Dashboards” (квадрат), затем “Manage” и “Import”.

Import Dashboard 1860
Import Dashboard 1860

После этого мы вводим “1860” и убираем курсор из этого поля, чтобы начать импорт. Затем мы указываем источник данных и нажимаем “import”.

Import Dashboard
Import Dashboard

Отлично! Теперь вы можете наблюдать за работой своих серверов через Grafana.

Если у вас есть серьезные намерения и вы хотите, чтобы все компоненты запускались автоматически после перезагрузки системы, не забудьте настроить систему инициализации systemd.

# systemctl enable prometheus
# systemctl enable grafana
# systemctl enable alertmanager
# systemctl enable node_exporter