Prometheus установка и настройка на centos 7

Обновлено: 04.07.2024

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

Метрики — это абстракция, с которой мы имеем дело, когда говорим о мониторинге. Это какие-то числа, описывающие состояние интересующей нас штуковины. Самый простой и понятный мониторинг следит за ресурсами компьютера: загрузкой процессора, памяти, диска, сети. Аналогично можно следить за чем-то более высокоуровневым, вроде количества посетителей на сайте или среднего времени ответа сервера. Для компьютера это один хрен безликие числа.

Мониторинг — это инструмент анализа того, что происходит/происходило в системе. Следовательно, без понимания смысла собранных данных мониторинг вам не особо поможет. И наоборот: в умелых руках это мощный инструмент.

Чем больше компонентов в вашей системе (микросервисов), чем больше нагрузка на неё, чем дороже время простоя, тем важнее иметь хорошую систему мониторинга.

То, что не метрики — то логи. Их тоже надо собирать и анализировать, но это отдельная история со своими инструментами.

Сейчас модно делать мониторинг на основе Prometheus. Так ли он хорош на самом деле? На мой взгляд это лучшее, что сейчас есть из мониторинга. Оговорюсь сразу для тех, кто хочет с этим поспорить: я понимаю, что разным задачам — разные инструменты и где-то больше подходит старый проверенный Nagios. Но в целом лидирует Prometheus.

Prometheus — это не готовое решение в духе “поставил и работает” (привет, Netdata). Это платформа, набор инструментов, позволяющий сделать себе такой мониторинг, какой надо. Фреймворк, если хотите.

Эта статья про знакомство с Prometheus’ом и установку. Потом будет интереснее — про настройку непосредственно мониторинга.

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

  • Prometheus server — центральное звено. Здесь хранятся собранные метрики, плюс имеется простенький веб-интерфейс, чтобы на них смотреть (Prometheus web UI).
  • Агенты, собирающие метрики и предоставляющие их в понятном для Prometheus’а виде. В зависимости от контекста называются экспортерами (exporter) или таргетами (target). Устанавливаются на целевые машины. Типичный представитель — node_exporter — собирает данные о вычислительных ресурсах: загрузку процессора, памяти, диска и т.п. Есть куча других экспортеров. Например, cadvisor собирает данные о контейнерах. Есть экспортеры для Postgres’а, для Nginx’а и т.д. С точки зрения самого Prometheus’а они ничем принципиально не отличаются друг от друга, просто каждый собирает какие-то свои метрики. Можно писать свои экспортеры, если ничего из готового вам не подходит.
  • Alertmanager — уведомлятор. Это он отправит письмо вам на почту, если что-то сломается. Из коробки умеет в почту, Slack, Hipchat, Pagerduty. Сторонними средствами можно прикрутить Telegram и наверное что-то ещё.
  • Grafana строго говоря не является частью Prometheus’а, но все её ставят и официальная документация рекомендует поступать именно так. Показывает красивые графики. Кучка графиков, собранных на одном экране, называется дашбордом (dashboard). Типа такого:


Установка

Все компоненты Prometheus’а написаны на Go и представляют собой статически скомпиленные бинари, не требующие никаких зависимостей кроме libc и готовые запускаться на любой платформе, будь то Debian, Arch или Centos. Установить их можно аж тремя способами:

  • по-старинке через пакетный менеджер,
  • взять готовые бинари с оф. сайта и засунуть их в систему в обход пакетного менеджера,
  • развернуть всё в докер-контейнерах.

Разумеется, у каждого способа есть свои преимущества и недостатки.

Если ставить через пакетный менеджер, то через него же вы будете получать обновления и сможете всё удалить. Однако есть нюанс. У Prometheus’а нет своих собственных репозиториев для популярных дистрибутивов, а официальные репозитории Debian/Ubuntu как всегда отстают от апстрима. Например, сейчас в Debian доступна версия 2.7.1, когда Prometheus уже 2.11.1. Arch Linux — молодец, идёт в ногу со временем.

При установке вручную Prometheus не будет числиться в списках установленного софта и с точки зрения пакетного менеджера его в системе нет. Зато вы сможете обновлять Prometheus отдельно от пакетов. При ручной установке придётся немного побывать в роли установочного скрипта (который есть в пакете), поэтому, если у вас серьёзные намерения — автоматизируйте установку/обновление через какой-нибудь Ansible. Рекомендую взять за основу готовые роли для Prometheus, Alertmanager, Node exporter, Grafana.

Если ставить Prometheus в докере, то всё про мониторинг будет лежать в одном месте. Можно это хозяйство положить под Git и иметь возможность поднять мониторинг в две команды: git clone , docker-compose up . Но надо писать правильный docker-compose.yml , париться при возникновении сетевых проблем… Короче, вы от одних проблем избавляетесь, а взамен получаете другие. В зависимости от того, с какими вам больше нравится возиться, выбирайте тот или иной вариант установки. Вам понадобятся контейнеры prom/prometheus , prom/node_exporter , prom/alertmanager . За основу рекомендую взять docker-compose.yml из репозитория docprom.

В продакшене я бы поднимал мониторинг в докере как минимум в целях безопасности. Свой личный мониторинг я устанавливал по-старинке вручную.

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

Расскажу про ручную установку, потому что в основе других способов установки лежат те же действия, только завёрнутые в дополнительную обёртку. Этот способ подойдёт для любых дистрибутивов Linux под управлением systemd (Ubuntu, Debian, Centos, Arch и т.д.)

Установка Prometheus server

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

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

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


Установка node exporter

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

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

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

Пока не пытайтесь что-то понять в выводе. Отдаёт и ладно.

Установка alertmanager

Установка Grafana

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

Первичная настройка

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

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

  • Отступы в yml — два пробела. Всегда и везде.
  • scrape_interval — с какой периодичностью Prometheus server будет забирать (scrape) метрики с экспортеров.
  • localhost:9093 и localhost:9100 — адреса alertmanager’а и node exporter’а соответственно. Если у вас другие, замените на правильные. Если у вас node exporter установлен на несколько машин, впишите их все.

Теперь попросим prometheus перечитать конфигурационный файл:


Поздравляю, мониторинг начал мониторить! Теперь можно пойти на вкладку Graph и запросить какую-нибудь метрику, например node_load1 — это одноминутный load average. Там же можно временной график посмотреть:


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


Идём на вкладку Data Sources, добавляем наш Prometheus:


Теперь добавим готовый дашборд Node exporter full. Это лучший дашборд для старта из всех, что я пересмотрел. Идём Dashboards (квадрат) → Manage → Import.


Вписываем 1860 и убираем курсор из поля ввода, иначе не начнёт импортировать. Дальше указываем data source и жмём import.


Поздравляю, самая скучная часть работы проделана! Теперь вы можете наблюдать за жизнью своих серверов в Графане.

Если у вас серьёзные намерения и вы хотите, чтобы все компоненты автоматически запускались после перезагрузки машины, не забудьте сообщить об этом systemd:

И это всё?

У нас пока нет алертов, не заведены пользователи в Grafana, мы ничего не понимаем в настройке. Да, наш мониторинг пока очень сырой. Но надо же с чего-то начать! Позже я напишу про настройку, про алерты и многое другое. Всё будет, друзья. Всё будет.

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

Данная инструкция позволит установить prometheus как на системы RPM (Red Hat, CentOS), так и deb (Debian, Ubuntu). Помимо Prometheus мы установим Alertmanager для возможности отправлять тревоги и node_exporter для мониторинга сервера Linux.

Подготовка сервера

Настроим некоторые параметры сервера, необходимые для правильно работы системы.

Время

Для отображения событий в правильное время, необходимо настроить его синхронизацию. Для этого установим chrony:

а) если на системе CentOS / Red Hat:

yum install chrony

systemctl enable chronyd

systemctl start chronyd

б) если на системе Ubuntu / Debian:

apt-get install chrony

systemctl enable chrony

systemctl start chrony

Брандмауэр

На фаерволе, при его использовании, необходимо открыть порты:

а) с помощью firewalld:

firewall-cmd --permanent --add-port=9090/tcp --add-port=9093/tcp --add-port=9094/ --add-port=9100/tcp

б) с помощью iptables:

iptables -I INPUT 1 -p tcp --match multiport --dports 9090,9093,9094,9100 -j ACCEPT

iptables -A INPUT -p udp --dport 9094 -j ACCEPT

в) с помощью ufw:

ufw allow 9090,9093,9094,9100/tcp

ufw allow 9094/udp

SELinux

По умолчанию, SELinux работает в операционный системах на базе Red Hat. Проверяем, работает ли она в нашей системе:

Если мы получаем в ответ:

. необходимо отключить его командами:

Prometheus

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

Загрузка

Переходим на официальную страницу загрузки и копируем ссылку на пакет для Linux:

Копируем ссылку на prometheus

. и используем ее для загрузки пакета на Linux:

* если система вернет ошибку, необходимо установить пакет wget.

Установка (копирование файлов)

После того, как мы скачали архив prometheus, необходимо его распаковать и скопировать содержимое по разным каталогам.

Для начала создаем каталоги, в которые скопируем файлы для prometheus:

Распакуем наш архив:

tar zxvf prometheus-*.linux-amd64.tar.gz

. и перейдем в каталог с распакованными файлами:

Распределяем файлы по каталогам:

cp prometheus promtool /usr/local/bin/

cp -r console_libraries consoles prometheus.yml /etc/prometheus

Назначение прав

Создаем пользователя, от которого будем запускать систему мониторинга:

useradd --no-create-home --shell /bin/false prometheus

* мы создали пользователя prometheus без домашней директории и без возможности входа в консоль сервера.

Задаем владельца для каталогов, которые мы создали на предыдущем шаге:

chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Задаем владельца для скопированных файлов:

chown prometheus:prometheus /usr/local/bin/

Запуск и проверка

Запускаем prometheus командой:

/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

. мы увидим лог запуска — в конце «Server is ready to receive web requests»:

Веб консоль Prometheus

Автозапуск

Мы установили наш сервер мониторинга, но его необходимо запускать вручную, что совсем не подходит для серверных задач. Для настройки автоматического старта Prometheus мы создадим новый юнит в systemd.

Возвращаемся к консоли сервера и прерываем работу Prometheus с помощью комбинации Ctrl + C. Создаем файл prometheus.service:

[Unit]
Description=Prometheus Service
After=network.target

[Service]
User=prometheus
Group=prometheus
Type=simple
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
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

Перечитываем конфигурацию systemd:

systemctl enable prometheus

После ручного запуска мониторинга, который мы делали для проверки, могли сбиться права на папку библиотек — снова зададим ей владельца:

chown -R prometheus:prometheus /var/lib/prometheus

systemctl start prometheus

. и проверяем, что она запустилась корректно:

systemctl status prometheus

Alertmanager

Alertmanager нужен для сортировки и группировки событий. Он устанавливается по такому же принципу, что и prometheus.

Загрузка

На той же официальной странице загрузки копируем ссылку на Alertmanager для Linux:

Копируем ссылку на alertmanager

После предыдущей установки мы должны были остаться в каталоге прометеуса — выходим на уровень выше:

Теперь используем ссылку для загрузки alertmanager:

Установка

Создаем каталоги для alertmanager:

mkdir /etc/alertmanager /var/lib/prometheus/alertmanager

Распакуем наш архив:

tar zxvf alertmanager-*.linux-amd64.tar.gz

. и перейдем в каталог с распакованными файлами:

Распределяем файлы по каталогам:

cp alertmanager amtool /usr/local/bin/

cp alertmanager.yml /etc/alertmanager

Назначение прав

Создаем пользователя, от которого будем запускать alertmanager:

useradd --no-create-home --shell /bin/false alertmanager

* мы создали пользователя alertmanager без домашней директории и без возможности входа в консоль сервера.

Задаем владельца для каталогов, которые мы создали на предыдущем шаге:

chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager

Задаем владельца для скопированных файлов:

chown alertmanager:alertmanager /usr/local/bin/

Автозапуск

Создаем файл alertmanager.service в systemd:

[Unit]
Description=Alertmanager Service
After=network.target

[Service]
EnvironmentFile=-/etc/default/alertmanager
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/prometheus/alertmanager \
$ALERTMANAGER_OPTS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

Перечитываем конфигурацию systemd:

systemctl enable alertmanager

systemctl start alertmanager

Веб консоль Alertmanager

node_exporter

Для получения метрик от операционной системы, установим и настроим node_exporter на тот же сервер прометеуса (и на все клиентские компьютеры). Процесс установки такой же, как у Prometheus и Alertmanager.

Если мы устанавливаем node_exporter на клиента, необходимо проверить наличие брандмауэра и, при необходимости, открыть tcp-порт 9100.

Загрузка

Заходим на страницу загрузки и копируем ссылку на node_exporter:

Копируем ссылку на node_exporter

* обратите внимание, что для некоторых приложений есть свои готовые экспортеры.

После предыдущей установки мы должны были остаться в каталоге алерт менеджера — выходим на уровень выше:

Теперь используем ссылку для загрузки node_exporter:

Установка

Распакуем скачанный архив:

tar zxvf node_exporter-*.linux-amd64.tar.gz

. и перейдем в каталог с распакованными файлами:

Копируем исполняемый файл в bin:

cp node_exporter /usr/local/bin/

Назначение прав

Создаем пользователя nodeusr:

useradd --no-create-home --shell /bin/false nodeusr

Задаем владельца для исполняемого файла:

chown -R nodeusr:nodeusr /usr/local/bin/node_exporter

Автозапуск

Создаем файл node_exporter.service в systemd:

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

[Service]
User=nodeusr
Group=nodeusr
Type=simple
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

Перечитываем конфигурацию systemd:

systemctl enable node_exporter

systemctl start node_exporter

Метрики, собранные node_exporter

Отображение метрик с node_exporter в консоли prometheus

Открываем конфигурационный файл prometheus:

В разделе scrape_configs добавим:

* в данном примере мы добавили клиента с IP-адресом 192.168.0.14, рабочее название для группы клиентов node_exporter_clients. Для примера, мы также добавили клиента 192.168.0.15 — чтобы продемонстрировать, что несколько клиентов добавляется через запятую.

Чтобы настройка вступила в действие, перезагружаем наш сервис prometheus:

systemctl restart prometheus

Заходим в веб-консоль prometheus и переходим в раздел Status - Targets:

Переходим в раздел Status - Targets

. в открывшемся окне мы должны увидеть нашу группу хостов и сам компьютер с установленной node_exporter:

Группа хостов с установленной node_exporter

* статус также должен быть UP.

Отображение тревог

Создадим простое правило, реагирующее на недоступность клиента.

Создаем файл с правилом:

Теперь подключим наше правило в конфигурационном файле prometheus:

systemctl restart prometheus

Открываем веб-консоль прометеуса и переходим в раздел Alerts. Если мы добавим клиента и попробуем его отключить для примера, мы увидим тревогу:

Группа хостов с установленной node_exporter

Отправка уведомлений

Теперь настроим связку с алерт менеджером для отправки уведомлений на почту.

В секцию global добавим:

Приведем секцию route к виду:

routes:
- receiver: send_email
match:
alertname: InstanceDown

* в данном примере нами был добавлен маршрут, который отлавливает событие InstanceDown и запускает ресивер send_email.

. далее добавим еще один ресивер:

Перезапустим сервис для алерт менеджера:

systemctl restart alertmanager

Теперь настроим связку prometheus с alertmanager — открываем конфигурационный файл сервера мониторинга:

Приведем секцию alerting к виду:

alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.0.14:9093

* где 192.168.0.14 — IP-адрес сервера, на котором у нас стоит alertmanager.

systemctl restart prometheus

Немного ждем и заходим на веб интерфейс алерт менеджера — мы должны увидеть тревогу:

Событие в алерт менеджере

. а на почтовый ящик должно прийти письмо с тревогой.

Мониторинг служб Linux

Для мониторинга сервисов с помощью Prometheus мы настроим сбор метрик и отображение тревог.

Сбор метрие с помощью node_exporter

Открываем сервис, созданный для node_exporter:

. и добавим к ExecStart:

* данная опция указывает экспортеру мониторить состояние каждой службы.

При необходимости, мы можем либо мониторить отдельные службы, добавив опцию collector.systemd.unit-whitelist:

ExecStart=/usr/local/bin/node_exporter --collector.systemd --collector.systemd.unit-whitelist="(chronyd|mariadb|nginx).service"

* в данном примере будут мониториться только сервисы chronyd, mariadb и nginx.

. либо наоборот — мониторить все службы, кроме отдельно взятых:

ExecStart=/usr/local/bin/node_exporter --collector.systemd --collector.systemd.unit-blacklist="(auditd|dbus|kdump).service"

* при такой настройке мы запретим мониторинг сервисов auditd, dbus и kdump.

Prometheus – это система мониторинга, разработанная SoundCloud. Как и другие системы мониторинга (например, InfluxDB или Graphite), Prometheus хранит данные в темпоральной базе данных. Кроме того, Prometheus предоставляет многомерную модель данных и мощный язык запросов, позволяющий системным администраторам быстро выполнить тонкую настройку метрик.

Также Prometheus включает PromDash (браузерный инструмент для разработки пользовательских панелей мониторинга), AlertManager (инструмент, отправляющий извещения и предупреждения на электронную почту), Flowdock, Slack, HipChat и т.п.

Данное руководство поможет установить Prometheus Server, Node Exporter и PromDash, настроить их и запустить мониторинг сервера.

Требования

  • Сервер CentOS 7 с 64-битной архитектурой.
  • Пользователь с доступом к sudo.

1: Установка сервера Prometheus

Создайте новый каталог для хранения файлов Prometheus и откройте его:

Загрузите последний пакет сервера Prometheus и темпоральной БД с GitHub:

curl -LO "https://github.com/prometheus/prometheus/releases/download/0.16.0/prometheus-0.16.0.linux-amd64.tar.gz"

Система мониторинга Prometheus состоит из нескольких компонентов, каждый из которых нужно установить отдельно. Рекомендуется хранить все компоненты в одном родительском каталоге; создайте такой каталог.

Установка Prometheus завершена, теперь убедитесь, что она прошла успешно. Запросите версию пакета:

На экране появится:

prometheus, version 0.16.0 (branch: HEAD, revision: dcb8ba4)
build user: julius@desktop
build date: 20151009-23:51:17
go version: 1.5.1

2: Установка Node Exporter

Prometheus предназначен для мониторинга веб-сервисов. Чтобы отслеживать метрики сервера Ubuntu, нужно установить инструмент под названием Node Exporter. Node Exporter экспортирует различные метрики (например, статистику I/O, нагрузку CPU, использование памяти, сетевую статистику и многое другое) в формате, понятном программе Prometheus.

Создайте новый каталог node_exporter в каталоге Prometheus и откройте его:

Откройте каталог Downloads и загрузите последнюю сборку Node Exporter с GitHub.

/Downloads && curl -LO "https://github.com/prometheus/node_exporter/releases/download/0.11.0/node_exporter-0.11.0.linux-amd64.tar.gz"

Создайте новый каталог node_exporter в каталоге Prometheus и откройте его:

3: Node Exporter как сервис

Теперь нужно включить Node Exporter как сервис.

Создайте конфигурационный файл node_exporter.service.

sudo vi /etc/systemd/system/node_exporter.service

В этот файл нужно поместить путь к файлу node_exporter и указать пользователя, который должен его запускать.

[Unit] Description=Node Exporter
[Service] User=prometheus
ExecStart=/home/prometheus/Prometheus/node_exporter/node_exporter
[Install] WantedBy=default.target

Сохраните и закройте файл.

sudo systemctl daemon-reload

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

sudo systemctl enable node_exporter.service

Теперь можно перезагрузить сервер или запустить сервис вручную при помощи команды:

sudo systemctl start node_exporter.service

Запустив Node Exporter, используйте браузер, чтобы просмотреть веб-интерфейс по ссылке:

На экране появится страница с объёмным выводом:

4: Запуск сервера Prometheus

Откройте каталог, в котором хранится установка Prometheus:

Прежде чем запустить Prometheus, создайте конфигурационный файл prometheus.yml.

Скопируйте и вставьте в файл:

scrape_configs:
- job_name: "node"
scrape_interval: "15s"
target_groups:
- targets: ['localhost:9100']

Этот код создаёт раздел scrape_configs и определяет job. Строка targets содержит адрес веб-интерфейса Node Exporter. Параметр scrape_interval задаёт интервал, по истечении которого Prometheus будет собирать данные (в данном случае – каждые 15 секунд).

Примечание: Выбрать имя для job можно любое, однако если job называется node, вы можете использовать стандартные шаблоны консоли Node Exporter.

Сохраните файл и закройте его.

Запустите сервер Prometheus в фоновом режиме:

nohup ./prometheus > prometheus.log 2>&1 &

Вывод Prometheus переадресован в файл prometheus.log. Чтобы просмотреть несколько последних строк, используйте tail:

Когда сервер будет готов, в файле появятся следующие строки:

INFO[0000] Starting target manager. file=targetmanager.go line=75
INFO[0000] Listening on :9090 file=web.go line=118

Откройте домашнюю страницу Prometheus в браузере:

Чтобы убедиться в том, что Prometheus собирает данные Node Exporter, откройте вкладку Graph в верхней панели. На появившейся странице в поле Expression нужно указать название метрики (к примеру, node_procs_running). После этого нажмите Execute. Кликните Graph (рядом с Console). На экране появится график для заданной метрики.

Prometheus предоставляет шаблоны консоли, которые позволяют просматривать графики нескольких наиболее часто используемых метрик. Эти шаблоны консоли доступны только если в job_name вы указали node.

Чтобы получить доступ к Node Console и просмотреть метрику сервера, перейдите по ссылке:

и кликните localhost:9100.

5: Установка PromDash

Сервер Prometheus позволяет просматривать графики и настраивать выражения, но, как правило, он используется только для отладки или для запуска одноразовых запросов. Для визуализации данных Prometheus рекомендуется использовать PromDash, инструмент, который позволяет создавать собственные информационные панели, которые можно настраивать согласно вашим требованиям.

Откройте каталог Prometheus:

PromDash – это приложение Ruby on Rails, исходные файлы можно найти на GitHub. Чтобы запустить это приложение, нужно установить ряд зависимостей: Git, Ruby и инструменты сборки. Для этого используйте пакетный менеджер системы:

sudo yum install git ruby ruby-devel sqlite-devel zlib-devel gcc gcc-c++ automake patch

Чтобы загрузить файлы, используйте git:

Откройте каталог promdash:

PromDash зависит от нескольких gem-ов Ruby. Чтобы автоматизировать их установку, установите сначала bundler:

gem install bundler

bundle install --without mysql postgresql

На выполнение команды уйдёт несколько минут. После завершения вы увидите:

. . .
Your bundle is complete!
Gems in the groups mysql and postgresql were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

6: Настройка окружения Rails

Создайте каталог для хранения баз данных SQLite3, предназначенных для PromDash:

PromDash определяет имя базы данных при помощи переменной среды DATABASE_URL. Чтобы создать базу данных SQLite3 для PromDash под названием mydb.sqlite3 в каталоге databases, введите:

echo "export DATABASE_URL=sqlite3:$HOME/Prometheus/databases/mydb.sqlite3" >>

В этом руководстве PromDash находится в рабочем режиме, потому нужно установить переменную окружения RAILS_ENV со значением production.

echo "export RAILS_ENV=production" >>

Чтобы активировать изменения, введите:

Создайте таблицы PromDash в БД SQLite3 при помощи инструмента rake:

PromDash использует Rails Asset Pipeline, потому все ресурсы проекта PromDash (CSS-файлы, изображения, файлы Javascript) должны быть предварительно скомпилированы. Для этого наберите:

7: Запуск и настройка PromDash

PromDash работает на легковесном сервере Thin. Запустите сервер как демон:

bundle exec thin start -d

Подождите несколько секунд, пока сервер запустится, и посетите домашнюю страницу PromDash:

Прежде чем приступить к созданию панели инструментов, нужно предоставить PromDash URL-адрес сервера Prometheus. Для этого кликните Servers → New Server и введите имя сервера Prometheus. В поле Url укажите:

В Server type укажите Prometheus.

Server was successfully created.

8: Создание дашборда

Дашборды Promdash должны храниться в каталоге Promdash. Чтобы создать новый каталог, нажмите New Directory. На экране появится форма, в которой нужно указать имя каталога (например, My Dashboards) и нажать Create Directory.

После этого программа вернёт вас на домашнюю страницу. Нажмите New Dashboard, в появившейся форме укажите название дашборд (например, Simple Dashboard) и выберите только что созданный каталог в выпадающем меню.

После этого у вас появится новый дашборд.

В нем уже есть один график, но его нужно настроить. Наведите курсор на название графика (по умолчанию Title), и вы увидите различные иконки, которые позволяют настроить график. Чтобы переименовать график, выберите Graph and Axis Settings и введите новое имя в поле Graph Title.

Параметр Datasources позволяет добавить в график новые выражения. Нажмите Add Expression и в поле Enter Expression введите node_procs_running.

Нажмите Refresh (последняя иконка слева), чтобы обновить график. Теперь у вас есть один полностью настроенный график. Чтобы добавить новые графики, нажмите Add Graph.

Изменив настройки, нажмите кнопку Save Changes (справа). Теперь на домашней странице PromDash появится ссылка на дашборд.

Заключение

Теперь на сервере CentOS 7 есть полностью готовая экосистема Prometheus. Также вы можете использовать PromDash для создания пользовательских дашбордов.

PrometheusПредставляет собой набор мониторинга и сигнализации и время комбинации базы данных с открытым исходным кодом последовательности, начинаяSoundCloudРазработанная компанией. С развитием, все больше и больше компаний и организации получают Прометей, сообщество также активно, они будут самостоятельно стать проектом с открытым исходным кодом, и есть компании, чтобы работать. Книга Google SRE также отметила аналогичную реализацию с их системой мониторинга Borgmon является Прометей. В настоящее время наиболее распространенная система управления контейнером Kubernes обычно сочетаются с Прометеем. Подобные продукты включают InfluxDB, если используются для мониторинга, обычно сотрудничают с графана для отображения данных и сигнализации.

Преимущества Прометея

  • Очень мало зависит от внешних источников, установка и использование ультрадисперсных простой
  • Существует уже много системной интеграции, такие как Докер, Statsd, HAproxy, Nginx, JMX и т.д.
  • Открытие автоматизации Service
  • Прямая интеграция с кодом
  • Проектные идеи реализуются в соответствии с распределенной микроархитектурой службы

характеристики Прометея

  • Пользовательский многомерная модель данных
  • Очень эффективное хранение средние данные выборки составляет около 3,5 байт, 3,2 миллиона временных рядов, отобранных через каждые 30 секунд, держа за 60 дней, а диск примерно 228г.
  • Мощный оператор запроса
  • Легко достичь мощной визуализации данных
  • Простая операция, каждый сервер является независимой реализацией, только опираясь на локальном хранилище.
  • Точная функция сигнала тревоги.
  • Богатая библиотека клиента

архитектура Прометея


Scenarius используется Прометей

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

Конечно, Prometheus имеет ограничения. Если наш мониторинг или система, она не подходит для точности 100%.

Нужно знать больше о Прометее, настоятельно рекомендуется прочитать на официальном сайте.Документация。

Эта статья посвящена тому, как установить и настроить Прометей в CentOS 7, мы должны развернуть Прометей уровня производства. Давайте начнем нашу работу развертывания, выполните следующие действия.

Базовая подготовка

Отключить SELinux

буду SELINUX=enforcing Изменения в ELINUX=disabled Затем перезагрузите систему reboot 。

Синхронный часовой пояс (системное время настройки зоны, как Шанхай)

Создание пользователя выполнения

Создание каталога выполнения

каталог разрешения Modify (Изменить владельца)

Скопируйте файл в директорию выполнения

Добавить файл конфигурации

Конечно, если нет файла шаблона, вы можете также создать новое творение, конфигурация конкретной выглядят следующим образом:

Создание службы

сервис Start

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

Установить начало загрузки службы

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

настройки брандмауэра

Поскольку порты, настроенные в нашем конфигурационном файле 9090 Так что, если ваша система имеет брандмауэр, это необходимо, чтобы открыть этот порт.

страница доступа


node_exporter

Node_exporter является серверным агентом, который отвечает за приобретение базы сервера пунктов мониторинга. Давайте еще один шаг, чтобы установить Node_Exporter собрать производительность сервера.

Prometheus

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

Prometheus — инструмент совсем новый (первый публичный релиз состоялся в начале 2015 года), и на русском языке публикаций о нём пока почти что нет (несколько месяцев назад была опубликована статья в журнале «Хакер», но она доступна только подписчикам).

Мониторинг микросервисов — задача непростая: в режиме реального времени нужно отслеживать как состояние отдельных компонентов, так и состояние системы в целом. Задача усложняется, если помимо технических нужно проверять ещё и бизнес-значимые показатели. Как отмечают сами разработчики Prometheus в многочисленных статьях и докладах, с помощью имеющихся систем мониторинга её решить проблематично. Поэтому они создали собственный инструмент.

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

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

В состав Prometheus входят следующие компоненты:

Prometheus Architecture

Главный компонент всей системы — сервер Prometheus. Он работает автономно и сохраняет все данные в локальной базе данных. Обнаружение сервисов происходит автоматически. Это упрощает процедуру развёртывания: для наблюдения за одним сервисом не нужно разворачивать распределённую систему мониторинга; достаточно установить только сервер и необходимые компоненты для сбора и экспорта метрик. Таких компонентов, «заточенных» под конкретные сервисы, уже создано довольно много: для Haproxy, MySQL, PostrgreSQL и другие (полный список см. здесь, а также на GitHub).

Сбор метрик в Prometheus осуществляется с помощью механизма pull. Имеется также возможность сбора метрик с помощью механизма push (для этого используется специальный компонент pushgateway, который устанавливается отдельно). Это может понадобиться в ситуациях, когда сбор метрики с помощью pull по тем или иным причинам невозможен: например, при наблюдении за сервисами, защищёнными фаерволлом. Также механизм push может оказаться полезным при наблюдении за сервисами, подключающихся к сети периодически и на непродолжительное время.

Prometheus хорошо подходит для сбора и анализа данных, представленных в виде временных рядов (time series). Все метрики он хранит в собственной темпоральной БД (её сравнение с OpenTSDB и InfluxDB см. здесь); для хранения индексов используется LevelDB.

Модель данных

Prometheus хранит данные в виде временных рядов — наборов значений, соотнесённых с временной меткой (timestamp).

Элемент временного ряда (измерение) состоит из имени метрики, временной метки и пары «ключ — значение». Временные метки имеют точность до миллисекунд, значения представлены с 64-битной точностью.

Модель данных, используемая в Prometheus, напоминает ту, что используется в OpenTSDB. У всех метрик есть имя, но оно может быть одним и тем же у нескольких рядов.
При этом каждый временной ряд должен быть помечен хотя бы одним тэгом. Измерения для одного тэга хранятся последовательно, что обеспечивает быструю агрегацию данных.
Поддерживаются следующие типы метрик:

  • счётчик (counter) — хранит значения, которые увеличиваются с течением времени (например, количество запросов к серверу);
  • шкала (gauge) — хранит значения, которые с течением времени могут как увеличиваться, так и уменьшаться (например, объём используемой оперативной памяти или количество операций ввода-вывода);
  • гистограмма (histogram) — хранит информацию об изменении некоторого параметра в течение определённого промежутка (например, общее количество запросов к серверу в период с 11 до 12 часов и количество запросов к этому же серверов в период с 11.30 до 11.40);
  • сводка результатов (summary) — как и гистограмма, хранит информацию об изменении значения некоторого параметра за временной интервал, но также позволяет рассчитывать квантили для скользящих временных интервалов.

Установка

Рассмотрим теперь практические аспекты использования Prometheus. Начнём с описания процедуры установки.
Совсем недавно Prometheus был включён в официальные репозитории Debian 8 и Ubuntu 15.10.
В Ubuntu 14.04 его тоже можно установить при помощи стандартного менеджера пакетов. Естественно, для этого понадобится подключить соответствующий репозиторий:

С помощью приведённых команд мы установили сервер Prometheus, а также дополнительные компоненты — node_exporter и alertmanager. Node_exporter собирает данные о состоянии сервера, а alertmanager (о нём мы более подробно поговорим ниже) — рассылает уведомления в случае выполнения или невыполнения заданных условий.

Установка завершена, но остался ещё один маленький штрих: нужно сделать так, чтобы node_exporter постоянно собирал метрики в фоновом режиме. Для этого сначала создадим символическую ссылку в /usr/bin:

Затем создадим файл /etc/init/node_exporter.conf и добавим в него следующие строки:

Сохраним внесённые изменения и выполним команду:

В дистрибутивах, перешедших на systemd (например, в Ubuntu 15.10), для запуска node_exporter в фоновом режиме нужно создать файл /etc/systemd/system/node_exporter.service и добавить в него следующие строки:

Сохранив внесённые изменения, нужно выполнить команды:

Конфигурирование

Настроек Prometheus по умолчанию вполне достаточно, чтобы следить за всем происходящим на локальной машине. Дополнительные настройки в случае необходимости всегда можно прописать в конфигурационном файле /etc/prometheus/prometheus.yml. Рассмотрим его структуру более подробно. Начинается он с секции globals:

Она включает следующие параметры:

  • scrape_interval — интервал сбора метрик (по умолчанию — 15 секунд);
  • evaluation_interval — интервал сверки с правилами (по умолчанию — 15 секунд);
  • rule_files — файлы правил (речь о них пойдёт ниже).

Далее следует секция scrape_configs с базовыми настройками сбора метрик на сервере:

  • job_name — имя задачи;
  • scrape_interval — интервал сбора метрик (в приведённом примере — каждые 15 секунд);
  • target_groups — сервисы и группы сервисов, для которых нужно собирать метрики.

В этой же секции можно прописать дополнительные настройки:

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

В общем виде синтаксис правил можно представить так:

Приведём более конкретные и понятные примеры:

Prometheus сверяется с правилами с определённой периодичностью, указанной в конфигурационном файле в параметре evaluation_interval). После каждой сверки Prometheus пересчитывает значение параметра и сохраняет его под новым именем с текущей временной меткой.
Итак, структуру и синтаксис конфигурационного файла мы в общих чертах рассмотрели. Чтобы прописанные настройки вступили в силу, нужно выполнить следующую команду (вместо path/to/prometheus.yml указываем путь к конфигурационному файлу):

Веб-интерфейс

prometheus_web_interface

В поле Expression можно выбрать метрику, для которой будет отображаться график. Попробуем отследить, например, объём активной памяти на сервере. Выбираем метрику node_memory_active и нажимаем на кнопку Execute:

node_memory_active


Над графиком расположены кнопки, с помощью которых можно выбирать период для отображения статистики.

Шаблоны консолей

prometheus

Если вам не подходит ни одна из имеющихся консолей, вы можете создать собственную консоль, которая будет отображать нужную вам статистику. Для написания консолей в Prometheus используется HTML-шаблонизатор Go. Подробные инструкции по созданию кастомных консолей приведены в официальной документации.
А если вас по тем или иным причинам не устраивают имеющиеся консоли, вы можете интегрировать Prometheus с популярным инструментом Grafana.

Разработчики Prometheus создали и собственный инструмент для создания дашбордов под названием Promdash (см. также репозиторий на GitHub), по интерфейсу напоминающий Grafana. На наш взгляд, он ещё находится в несколько «сыром» состоянии, и рекомендовать его к использованию пока что рано.

Alertmanager: настройка уведомлений

Ни один инструмент мониторинга немыслим без компонента для рассылки уведомлений. В Prometheus для этой цели используется alertmanager. Настройки уведомлений хранятся в конфигурационном файле alertmanager.conf.
Рассмотрим следующий фрагмент:

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

В общем виде синтаксис правила выглядит так:

Рассмотрим функции правил на более конкретных примерах.
Пример1:

Это правило указывает, что уведомление нужно отправлять в случае, если некоторый инстанс недоступен в течение 5 минут и более.

Согласно этому правилу, уведомления нужно посылать, как только среднее время ответа на запросы к API превысит 1 мс.

Чтобы прописанные в конфигурационном файле настройки вступили в силу, нужно сохранить его и выполнить команду:

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

Уведомления Prometheus отправляет в формате JSON. Выглядят они примерно так:

Отправка уведомлений осуществляется по электронной почте, через веб-хук, а также с помощью специализированных сервисов: PagerDuty, HipChat и других.
Разработчики Prometheus отмечают, что пока что alertmanager находится в «сыром» состоянии и предупреждают о возможных ошибках. Впрочем, мы никаких аномалий в работе этого компонента не заметили.

Заключение

Prometheus — инструмент достаточно интересный и перспективный, и на него стоит обратить внимание. В числе его преимуществ нужно в первую очередь выделить:

  • простоту развертывания;
  • широкие возможности интеграции со сторонними приложениями и сервисами;
  • удобный графический интерфейс для работы с метриками.

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

Для желающих узнать больше приводим несколько полезных ссылок:

    — статья о Prometheus из блога SoundCloud; — блог одного из разработчиков Prometheus Брайана Брэзила с интересными практическими примерами; — любопытный отчёт об экспериментах с Prometheus; — инструкция по установке Prometheus в Docker — роль Ansible для установки Prometheus.

Если вы по тем или иным причинам не можете оставлять комментарии здесь — приглашаем в наш блог.

Читайте также: