Как установить prometheus на centos
Мониторинг — это сбор метрик и представление этих метрик в удобном виде (таблицы, графики, шкалы, уведомления, отчёты). Концептуально его можно изобразить в таком виде:
Метрики — это абстракция, с которой мы имеем дело, когда говорим о мониторинге. Это какие-то числа, описывающие состояние интересующей нас штуковины. Самый простой и понятный мониторинг следит за ресурсами компьютера: загрузкой процессора, памяти, диска, сети. Аналогично можно следить за чем-то более высокоуровневым, вроде количества посетителей на сайте или среднего времени ответа сервера. Для компьютера это один хрен безликие числа.
Мониторинг — это инструмент анализа того, что происходит/происходило в системе. Следовательно, без понимания смысла собранных данных мониторинг вам не особо поможет. И наоборот: в умелых руках это мощный инструмент.
Чем больше компонентов в вашей системе (микросервисов), чем больше нагрузка на неё, чем дороже время простоя, тем важнее иметь хорошую систему мониторинга.
То, что не метрики — то логи. Их тоже надо собирать и анализировать, но это отдельная история со своими инструментами.
Сейчас модно делать мониторинг на основе 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 на RHEL 8.
Шаг 1. Добавьте системного пользователя и группу для Prometheus
Давайте начнем установку Prometheus на RHEL 8 с создания специального пользователя, который будет запускать и управлять сервисом Prometheus. Это системный пользователь, у которого нет доступа к логину через консоль / оболочку.
Обратите внимание, что у этого пользователя нет оболочки / bin / bash, поэтому мы использовали -s / sbin / nologin .
Шаг 2: Установите NTP-сервер
Чтобы избежать дрейфа времени, настройте сервер NTP на сервере Prometheus для обеспечения точного времени.
Шаг 3: Создайте каталог данных для Prometheus
После создания системного пользователя и группы перейдите к созданию каталога, который будет использоваться для хранения данных Prometheus. Сюда входят показатели, полученные от отслеживаемых агентов.
Вы можете выбрать другой путь, например, отдельный раздел.
Шаг 4: Создайте каталоги конфигурации для Prometheus
Каталог основных файлов конфигурации Prometheus находится в /etc/prometheus/ . В нем будет несколько подкаталогов.
Шаг 5: Загрузите Prometheus на CentOS 8 / RHEL 8
Нам нужно скачать последнюю версию архива Prometheus и распаковать его, чтобы получить бинарные файлы. Вы можете проверить выпуски на странице выпусков Prometheus на Github .
Вы можете использовать curl или wget для загрузки из командной строки.
Извлеките файл и переместите его в каталог в вашем $ PATH
Также скопируйте консоли и console_libraries в каталог /etc/prometheus:
Шаг 6: Создайте файл конфигурации Prometheus.
Файл конфигурации Prometheus будет находиться в /etc/prometheus/prometheus.yml . Создавайте простые конфигурации, используя контент:
Внесите в файл изменения в соответствии с исходными настройками и сохраните файл.
Шаг 7: Создайте служебную единицу systemd
Чтобы иметь возможность управлять службой Prometheus с помощью systemd, вам необходимо явно определить этот файл модуля.
Добавьте к нему следующее содержимое.
Не забудьте отредактировать строку:
Запустите сервис Prometheus.
Проверка состояния с использованием systemctl status prometheus :
Если вы хотите разрешить с любого IP-адреса, используйте:
Откройте IP-адрес сервера Prometheus / имя хоста и порт 9090.
Теперь у вас установлен Prometheus Server в системе CentOS 8 / RHEL 8 Linux.
Установка Prometheus
Шаг 1: Добавьте системного пользователя и группу для Prometheus
Давайте начнем установку Prometheus на RHEL 8, создав отдельного пользователя, который будет запускать и управлять сервисом Prometheus. Это системный пользователь, который не имеет доступа к логину консоли/оболочки.
Обратите внимание, что у этого пользователя нет оболочки /bin/bash, поэтому мы использовали -s /sbin/nologin.
Шаг 2: Установите NTP-сервер
Чтобы избежать смещения времени, настройте NTP-сервер на сервере Prometheus для обеспечения точного времени.
Шаг 3: Создайте каталог данных для Prometheus
После создания пользователя и группы системы перейдите к созданию каталога, который будет использоваться для хранения данных Prometheus. Это включает в себя показатели, полученные от отслеживаемых агентов.
Шаг 4. Создайте каталоги конфигурации для Prometheus
Шаг 5. Загрузим Prometheus для CentOS 8/RHEL 8
Нам нужно скачать последний выпуск архива Prometheus и распаковать его, чтобы получить двоичные файлы. Вы можете проверить релизы Prometheus на странице Github.
Вы можете использовать curl или wget для загрузки из командной строки.
Скопируем бинарные файлы promtool и prometheus из каталога который мы распаковали, в каталог для запуска бинарных файлов /usr/local/bin:
Скопируем каталог console_libraries и consoles в созданный нами каталог для конфиг файлов /etc/prometheus
Скопируем файл tsdb в /app/prometheus, а каталог с распакованными файлами и архив удалим.
Шаг 6. Создайте файл конфигурации Prometheus.
Файл конфигурации Prometheus будет находиться в /etc/prometheus/prometheus.yml .
Создайте простой файл конфигурации, используя следующий пример:
Вы можете изменить первоначальные настройки по своему усмотрению.
Шаг 7. Создать системный сервисный модуль
Чтобы иметь возможность управлять службой Prometheus с помощью systemd, вам нужно явно определить этот файл модуля. Для этого создадим сервисный файл.
Добавим следующее содержание в файл.
Установите правильные разрешения каталогов
Чтобы сервисный файл заработал перезагрузим демон systemctl и проверим статус сервиса, чтобы убедиться что приложение успешно запущенно.
Шаг 8. Настройка фаерволла
В фаерволле откроем порт для доступа к Prometheus в нашем случае это 9090.
Откройте Prometheus Server IP/имя хоста и порт 9090
Теперь у вас установлен Prometheus Server в системе CentOS 8/RHEL 8 Linux.
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. Проверяем, работает ли она в нашей системе:
Если мы получаем в ответ:
… необходимо отключить его командами:
sed -i 's/^ SELINUX =.*/ SELINUX =disabled/g' /etc/selinux/config
* если же мы получим ответ The program 'getenforce' is currently not installed, то SELinux не установлен в системе.
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 добавим:
scrape_configs:
…
- job_name: 'node_exporter_clients'
scrape_interval: 5s
static_configs:
- targets: ['192.168.0.14:9100','192.168.0.15:9100']
* в данном примере мы добавили клиента с IP-адресом 192.168.0.14, рабочее название для группы клиентов node_exporter_clients. Для примера, мы также добавили клиента 192.168.0.15 — чтобы продемонстрировать, что несколько клиентов добавляется через запятую.
Чтобы настройка вступила в действие, перезагружаем наш сервис prometheus:
systemctl restart prometheus
Заходим в веб-консоль prometheus и переходим в раздел Status - Targets:
… в открывшемся окне мы должны увидеть нашу группу хостов и сам компьютер с установленной node_exporter:
* статус также должен быть UP .
Отображение тревог
Создадим простое правило, реагирующее на недоступность клиента.
Читайте также: