Мониторинг — это процесс отслеживания и анализа ключевых показателей эффективности с целью выявления и решения проблем в режиме реального времени. Он включает в себя сбор данных, их обработку и визуализацию. Мониторинг может быть использован для оценки производительности системы, выявления потенциальных проблем и оптимизации процессов.
Одним из ключевых компонентов мониторинга является выбор метрик — числовых показателей, которые отражают состояние системы или процесса. Например, загрузка процессора, использование памяти, время ответа сервера и т.д. Выбор метрик зависит от конкретной задачи и системы, которую необходимо мониторить.
Мониторинг позволяет получить информацию о состоянии системы в реальном времени, что может быть полезно для обнаружения проблем и принятия решений на основе данных. Однако, для эффективного использования мониторинга необходимо понимать, какие данные собираются и как они интерпретируются.
Если система состоит из множества компонентов и имеет высокую нагрузку, то наличие системы мониторинга становится еще более важным. В этом случае, мониторинг может помочь выявить проблемы на ранней стадии и предотвратить их развитие.
Prometheus — это платформа для мониторинга и alerting’а, которая позволяет собирать, обрабатывать и визуализировать данные в режиме реального времени. Она предоставляет инструменты для создания и управления наборами данных, а также для создания оповещений и уведомлений на основе определенных критериев.
Архитектура Prometheus
Prometheus является одним из самых популярных инструментов для мониторинга и предупреждения сбоев в работе различных систем. Он имеет веб-интерфейс и может быть настроен с помощью YAML-файлов. В данной статье мы познакомимся с основными компонентами Prometheus и рассмотрим процесс установки и настройки этой системы.
Prometheus — центральное звено, где хранятся все собранные метрики и имеется веб-интерфейс для их просмотра. Она собирает данные из различных источников, обрабатывает их и сохраняет на сервере. Prometheus также имеет веб-интерфейс, который позволяет пользователям просматривать собранные данные в реальном времени.
Node Exporter — агенты, собирающие метрики с целевых машин и передающие их на сервер Prometheus. Они могут быть настроены для сбора различных типов данных, таких как загрузка процессора, использование памяти и другие метрики производительности. Экспортеры устанавливаются на целевые машины и отправляют данные на сервер Prometheus через HTTP.
AlertManager — уведомляет о возникших проблемах, обрабатывает оповещения и отправляет их на определенные адреса. Он поддерживает различные способы отправки уведомлений, такие как электронная почта, Slack, HipChat и PagerDuty. Также возможно настроить отправку оповещений через Telegram и другие сервисы.
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’а. Пока что он бесполезен, но уже можно потыкать.
Установка 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
...
Пока не пытайтесь понять вывод. Отдаёт, и хорошо.
Установка 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-адреса в конфигурационном файле.
После изменения конфигурационного файла prometheus.yml, вам нужно перезапустить Prometheus, чтобы он прочитал новый конфигурационный файл. Вы можете сделать это с помощью команды:
# systemctl reload prometheus
Если вы все сделали правильно, на странице http://localhost:9090/targets в веб-интерфейсе Prometheus должен появится первый targets. Состояние targets должно быть “UP”, что означает, что он доступен для опроса.
Отлично, теперь у вас работает мониторинг! Вы можете перейти на вкладку Graf и запросить любую метрику, которую вы отслеживаете. Здесь вы также можете увидеть график изменения этой метрики со временем. Например, вы можете посмотреть график загрузки сервера (node_load1), который показывает среднее значение загрузки за одну минуту.
В повседневной жизни вы редко будуте обращается к графическим интерфейсам такого типа для просмотра графиков. Скорее всего, вы будем использовать для этого специализированные программы или онлайн-сервисы, такие как Grafana.
Отлично, теперь мы можем открыть Grafana по адресу http://localhost:3000 и войти в систему с указанными учетными данными. Внутри мы можем настроить различные параметры через веб-интерфейс, если это необходимо. В боковой панели мы нажимаем на “Configuration” (шестеренка) и затем выбираем “Preferences”.
Теперь мы переходим на вкладку “Data Sources” и добавляем наш Prometheus.
Теперь мы добавляем готовый дашборд “Node exporter full”, который является лучшим стартовым дашбордом. Мы можем найти его в разделе “Dashboards” (квадрат), затем “Manage” и “Import”.
После этого мы вводим “1860” и убираем курсор из этого поля, чтобы начать импорт. Затем мы указываем источник данных и нажимаем “import”.
Отлично! Теперь вы можете наблюдать за работой своих серверов через Grafana.
Если у вас есть серьезные намерения и вы хотите, чтобы все компоненты запускались автоматически после перезагрузки системы, не забудьте настроить систему инициализации systemd.
# systemctl enable prometheus
# systemctl enable grafana
# systemctl enable alertmanager
# systemctl enable node_exporter