Prometheus установка и настройка ubuntu 20
Мониторинг — это сбор метрик и представление этих метрик в удобном виде (таблицы, графики, шкалы, уведомления, отчёты). Концептуально его можно изобразить в таком виде:
Метрики — это абстракция, с которой мы имеем дело, когда говорим о мониторинге. Это какие-то числа, описывающие состояние интересующей нас штуковины. Самый простой и понятный мониторинг следит за ресурсами компьютера: загрузкой процессора, памяти, диска, сети. Аналогично можно следить за чем-то более высокоуровневым, вроде количества посетителей на сайте или среднего времени ответа сервера. Для компьютера это один хрен безликие числа.
Мониторинг — это инструмент анализа того, что происходит/происходило в системе. Следовательно, без понимания смысла собранных данных мониторинг вам не особо поможет. И наоборот: в умелых руках это мощный инструмент.
Чем больше компонентов в вашей системе (микросервисов), чем больше нагрузка на неё, чем дороже время простоя, тем важнее иметь хорошую систему мониторинга.
То, что не метрики — то логи. Их тоже надо собирать и анализировать, но это отдельная история со своими инструментами.
Сейчас модно делать мониторинг на основе 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:
. и используем ее для загрузки пакета на 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 мы создадим новый юнит в 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:
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
node_exporter
Для получения метрик от операционной системы, установим и настроим node_exporter на тот же сервер прометеуса (и на все клиентские компьютеры). Процесс установки такой же, как у Prometheus и Alertmanager.
Если мы устанавливаем node_exporter на клиента, необходимо проверить наличие брандмауэра и, при необходимости, открыть tcp-порт 9100.
Загрузка
Заходим на страницу загрузки и копируем ссылку на 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 в консоли prometheus
Открываем конфигурационный файл prometheus:
В разделе scrape_configs добавим:
* в данном примере мы добавили клиента с IP-адресом 192.168.0.14, рабочее название для группы клиентов node_exporter_clients. Для примера, мы также добавили клиента 192.168.0.15 — чтобы продемонстрировать, что несколько клиентов добавляется через запятую.
Чтобы настройка вступила в действие, перезагружаем наш сервис prometheus:
systemctl restart prometheus
Заходим в веб-консоль prometheus и переходим в раздел Status - Targets:
. в открывшемся окне мы должны увидеть нашу группу хостов и сам компьютер с установленной node_exporter:
* статус также должен быть UP.
Отображение тревог
Создадим простое правило, реагирующее на недоступность клиента.
Создаем файл с правилом:
Теперь подключим наше правило в конфигурационном файле prometheus:
systemctl restart prometheus
Открываем веб-консоль прометеуса и переходим в раздел Alerts. Если мы добавим клиента и попробуем его отключить для примера, мы увидим тревогу:
Отправка уведомлений
Теперь настроим связку с алерт менеджером для отправки уведомлений на почту.
В секцию 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 в Ubuntu 20.04 LTS (Focal Fossa) системы. В статье также будет объяснено, как добавить экспортер в Prometheus, чтобы расширить его полезность.
Примечание. Процедура и команды в этой статье были выполнены с использованием Ubuntu 20.04 LTS (Focal Fossa).
Предварительные требования
Перед установкой Prometheus обязательно выполните следующие требования.
1. Установка Nginx
Для установки Nginx выполните следующие действия:
Используйте следующую команду в Терминале для обновления индекса системного репозитория
Затем введите следующую команду для установки Nginx:
После установки Nginx используйте следующие команды, чтобы убедиться, что служба Nginx запущена:
Если служба Nginx не запущена, вы можете запустить службу, введя следующую команду:
2. Создание пользователей Prometheus
Введите следующее, чтобы создать учетные записи пользователей Prometheus, которые будут использоваться в качестве учетных записей пользователей службы в целях безопасности и администрирования. Эти учетные записи не будут использоваться для входа в систему. Используйте следующие команды в Терминале для создания учетных записей пользователей службы.
3. Создание каталогов Prometheus
Введите следующее, чтобы создать несколько каталогов, которые будут использоваться для хранения файлов и данных:
$ sudo mkdir/etc/prometheus$ sudo mkdir/var/lib/prometheus
Загрузка и установка Prometheus
После выполнения всех этих предварительных требований ваша система будет будьте готовы установить Прометей. Ниже приведена процедура загрузки и установки Prometheus.
Загрузите последнюю стабильную версию Prometheus с помощью команды wget.
Извлечь Архивируйте Prometheus с помощью следующей команды:
Из извлеченной папки скопируйте двоичные файлы в каталог/usr/local/bin и смените владельца..
Используйте следующие команды, чтобы скопировать двоичные файлы «prometheus» и «promtool» в /usr/local/bin .
$ sudo cp prometheus-2.0.0.linux-amd64/prometheus/usr/local/bin/$ sudo cp prometheus-2.0.0.linux-amd64/promtool/usr/ local/bin/
Затем измените владельца файлов, введя следующие команды.
$ sudo chown prome: prome/usr/local/bin/prometheus$ sudo chown prome: prome/usr/local/bin/promtool
После копирования двоичных файлов скопируйте требуемые библиотеки в каталог/etc/prometheus. Для этого используйте следующие команды в Терминале:
$ sudo cp -r prometheus-2.0.0.linux-amd64/consoles/etc/prometheus$ sudo cp -r prometheus-2.0.0.linux-amd64/console_libraries/etc/prometheus
Затем используйте следующие команды, чтобы изменить владельца файлов.
$ sudo chown -R prome: prome/etc/prometheus/consoles$ sudo chown -R prome: prome/etc/prometheus/console_libraries
Конфигурация Prometheus
В этом разделе мы создадим файл конфигурации с именем prometheus.yml в папке /etc/ prometheus , созданный на предыдущих шагах. Выполните следующую команду в Терминале, чтобы отредактировать файл prometheus.yml:
Затем скопируйте и вставьте в терминал следующие строки:
Нажмите Ctrl + o для сохранения и Ctrl + x для выхода из файла.
Теперь мы создадим еще один файл для службы systemd. Для этого введите в Терминале следующую команду:
Затем скопируйте и вставьте в терминал следующие строки:
[Unit]Description = Prometheus
Wants = network-online.target
After = network-online.target
[Установить]
WantedBy = multi-user.target
Нажмите Ctrl + o, чтобы сохранить файл, и Ctrl + x, чтобы выйти из файла.
Как только вы закончите с вышеуказанными конфигурациями, перезагрузите systemd, используя следующую команду:
Запустите службу Prometheus, введя следующую команду:
Чтобы включить службу Prometheus при загрузке системы, используйте следующую команду:
После запуска службы Prometheus используйте следующую команду для просмотра статуса службы:
На следующем снимке экрана показано, что служба Prometheus активна и работает.
Доступ к веб-интерфейсу Prometheus
Затем попробуйте получить доступ к веб-интерфейсу Prometheus. Открыть в веб-браузере и перейдите по следующему адресу:
Замените термин « ip-address »на фактический IP-адрес вашей системы. Вы можете получить доступ к веб-интерфейсу Prometheus из любой системы в вашей локальной сети. Вы также можете использовать localhost или 127.0.0.1 для доступа к сайту Prometheus в вашей локальной системе. Однако в этом случае вы не сможете получить к нему доступ из любой другой системы в сети.
На этом этапе Prometheus показывает только метрики о себе, что может быть бесполезно. В следующем разделе показано, как расширить возможности Prometheus, добавив экспортеров.
Добавить экспортеры
Чтобы сделать Prometheus более полезным для вас, попробуйте добавить экспортеры. Вот некоторые из наиболее часто используемых экспортеров:
- Node_exporter-
- Blackbox_exporter
- rabbitmq_exporter
- Mysqld_exporter
Здесь мы добавим node_exporter в систему Prometheus. Node_exporter генерирует показатели таких ресурсов, как ЦП, память, использование диска и т. Д.
Сначала загрузите node_exporter в вашу систему с помощью следующей команды:
Извлеките архив с помощью следующей команды:
$ tar xvf node_exporter-0.15.1.linux-amd64.tar.gzsudo nano/ etc/prometheus/prometheus.yml
Из извлеченной папки скопируйте двоичные файлы в каталог/usr/local/bin и смените владельца. Выполните следующую команду, чтобы скопировать двоичные файлы node_exporter в каталог /usr/local/bin .
$ sudo cp node_exporter-0.15. 1. linux-amd64/node_exporter/usr/local/binУстановите владельца каталога с помощью следующей команды:
$ sudo chown node_exporter: node_exporter/usr/local/bin/node_exporterСоздайте служебный файл для экспортера, используя следующую команду:
Затем скопируйте и вставьте следующие строки в терминал:
[Объект]Описание = Прометей
Хочет = network-online.target
After = network-online.target
[Установить]
WantedBy = multi-user.target
Нажмите Ctrl l + o для сохранения и Ctrl + x для выхода из файла.
Перезагрузите systemd, используя следующую команду:
Выполните следующую команду, чтобы запустить службу node_exporter:
Чтобы включить службу node_exporter при загрузке, введите следующую команду:
Настройка Prometheus для node_exporter
В этом разделе мы настроим Prometheus для очистки node_exporter. Выполните следующую команду в Терминале, чтобы отредактировать файл конфигурации:
Скопируйте и вставьте в терминал следующие строки:
Нажмите Ctrl + o для сохранения и Ctrl + x для выхода из файла. Перезапустите службу Prometheus с помощью следующей команды:
Вы можете проверить состояние службы Prometheus чтобы убедиться, что он работает правильно, введя следующую команду: $ sudo systemctl status prometheus Попробуйте получить доступ к Prometheus, открыв любой веб-браузер и перейдя по следующему адресу:
Когда откроется веб-интерфейс, используйте стрелку раскрывающегося списка, чтобы выбрать любую метрику, и нажмите кнопку Выполнить , чтобы просмотреть график.
Если вы перейдете к Status> Target из меню вверху страницы , вы увидите, что там перечислены и Prometheus, и node_exporter, поскольку мы настроили Prometheus для очистки и самого себя, и node_exporter.
Заключение
Вот и все! В этой статье вы узнали, как установить Prometheus в Ubuntu 20.04 LTS (Focal Fossa), а также о том, как использовать экспортер узлов в Prometheus. Я надеюсь, что после прочтения этой статьи вы теперь достаточно комфортно можете установить Prometheus и средство экспорта для создания показателей ресурсов вашего сервера.
В предыдущих публикациях мы уже затрагивали вопросы мониторинга и сбора метрик. В сегодняшней статье мы хотели бы вернуться к этой теме и рассказать об интересном инструменте под названием Prometheus. Он был создан в 2012 году в качестве внутренней системы мониторинга небезызвестного проекта SoundCloud, но впоследствии получил более широкое распространение.
Prometheus — инструмент совсем новый (первый публичный релиз состоялся в начале 2015 года), и на русском языке публикаций о нём пока почти что нет (несколько месяцев назад была опубликована статья в журнале «Хакер», но она доступна только подписчикам).
Мониторинг микросервисов — задача непростая: в режиме реального времени нужно отслеживать как состояние отдельных компонентов, так и состояние системы в целом. Задача усложняется, если помимо технических нужно проверять ещё и бизнес-значимые показатели. Как отмечают сами разработчики Prometheus в многочисленных статьях и докладах, с помощью имеющихся систем мониторинга её решить проблематично. Поэтому они создали собственный инструмент.
Prometheus представляет собой комплексное решение, в состав которого входят и фреймворк для мониторинга, и собственная темпоральная база данных. В некоторых обзорах его даже называют «системой мониторинга нового поколения».
Публикации о Prometheus нас заинтересовали, и мы решили познакомиться с этим инструментом поближе.
Архитектура Prometheus
В состав Prometheus входят следующие компоненты:
Главный компонент всей системы — сервер 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 указываем путь к конфигурационному файлу):
Веб-интерфейс
В поле Expression можно выбрать метрику, для которой будет отображаться график. Попробуем отследить, например, объём активной памяти на сервере. Выбираем метрику node_memory_active и нажимаем на кнопку Execute:
Над графиком расположены кнопки, с помощью которых можно выбирать период для отображения статистики.
Шаблоны консолей
Если вам не подходит ни одна из имеющихся консолей, вы можете создать собственную консоль, которая будет отображать нужную вам статистику. Для написания консолей в 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.
Если вы по тем или иным причинам не можете оставлять комментарии здесь — приглашаем в наш блог.
Читайте также: