- Мониторинг процессов Linux: Process-exporter, Prometheus и Grafana
- Введение
- Теория
- Практика
- Установка Prometheus + Alertmanager + node_exporter на Linux
- Подготовка сервера
- Время
- Брандмауэр
- SELinux
- Prometheus
- Загрузка
- Установка (копирование файлов)
- Назначение прав
- Запуск и проверка
- Автозапуск
- Alertmanager
- Загрузка
- Установка
- Назначение прав
- Автозапуск
- node_exporter
- Загрузка
- Установка
- Назначение прав
- Автозапуск
Мониторинг процессов Linux: Process-exporter, Prometheus и Grafana
Для закрепления материала о Prometheus будут кратко изложены основные тезисы и рассмотрен пример установки и настройки мониторинга метрик с сервера с последующей визуализацией в Grafana. Для более детального изучения есть перевод хорошей статьи на хабре, откуда частично взяты материалы.
Введение
Современные и новые решения всегда интересны для изучения и применения, особенно, когда привык к классическому Zabbix. Поэтому появление Prometheus и Grafana с её нескучными дашбордами вызвало интерес для первоначального ознакомления.
Prometheus является базой данных временных рядов (как InfluxDB, например), но с дополнительными инструментами для мониторинга. По сравнению с классическими реляционными базами данных, такие базы также работают с данными в таблицах, но все эти таблицы объединены временем, что позволяет им работать быстрее . Подходят такие решения для хранения различных метрик с привязкой ко времени и быстрых выборок.
Реальный кейс, который сподвигнул меня познакомиться с Prometheus – это относительно старый сервер с RHEL 6 и MySQL 5.6, на котором абсолютно рандомно по частоте возникновения, но примерно в одно и тоже время происходит утечка памяти и демон mysqld отстреливается oom killer`ом. При этом были применены различные практики по настройке как MySQL, так и сервера – проблема стала реже, но тем не менее имеет место быть. Для дальнейшего решения и более лучшего понимания, что происходит в процессах системы, было решено использовать process-exporter.
Можно по-старинке написать bash-скрипт, который каждую минуту будет складировать вывод ps aux, а можно использовать time series базы данных, что и будет рассмотрено в дальнейшем.
Теория
Prometheus сам собирает все данные с целевого объекта, для этого есть разные способы:
- Приложение может быть написано так, что само отдает метрики в нужном формате.
- Используются готовые экспортеры. Например, есть экспортеры для MySQL, Nginx или машины с GNU/Linux.
- Pushgateway. Применяется, когда нет возможности использовать Pull-запросы для снятия метрик стандартными средствами. Применяется, например, при выполнении задач в crontab.
Так как приём и обработка данных происходит в самом Prometheus, он является центральным звеном всей схемы мониторинга, где происходит вся настройка. Формат получаемых метрик в Prometheus — ключ-значение, это важно запомнить.
Из дополнительных инструментов присутствуют:
- Alertmanager – для оповещения, его данная статья не коснётся.
- Data visualization – простой способ визуализации из коробки, из внешних можно использовать Grafana.
- Service discovery – динамическое обнаружение сервисов, также в данной статье не рассматривается.
А также присутствует PromQL – собственный язык запросов для извлечения метрик из базы данных.
Практика
С минимальным знанием основ можно приступать к практическим задачам для более глубокого погружения в Prometheus.
Объектом мониторинга в данном материале будет сервер с GNU/Linux. В системе командой ps aux можно вывести список работающих процессов с дополнительными данными по использованию CPU и Memory. Этот вывод можно использовать, например, при анализе проблем с сервером или ПО на нём, чтобы понимать, что происходило с процессами в момент проблемы для её решения.
Например, общая картина будет выглядеть в итоге примерно так:
Установка Prometheus + Alertmanager + node_exporter на Linux
Обновлено: 01.07.2023 Опубликовано: 12.08.2019
В двух словах, Prometheus — система мониторинга, обладающая возможностями тонкой настройки метрик. Она будет полезна для отслеживания состояния работы сервисов на низком уровне. Данная инструкция позволит установить prometheus как на системы RPM (Red Hat, CentOS), так и deb (Debian, Ubuntu). Помимо Prometheus мы установим Alertmanager для возможности отправлять тревоги и node_exporter для мониторинга сервера Linux.
Подготовка сервера
Время
Для отображения событий в правильное время, необходимо настроить его синхронизацию. Для этого установим chrony: а) если на системе CentOS / Red Hat:
Брандмауэр
- TCP 9090 — http для сервера прометеус.
- TCP 9093 — http для алерт менеджера.
- TCP и UDP 9094 — для алерт менеджера.
- TCP 9100 — для node_exporter.
а) с помощью firewalld:
firewall-cmd —permanent —add-port=9090/tcp —add-port=9093/tcp —add-port=9094/ —add-port=9100/tcp
б) с помощью iptables:
iptables -I INPUT -p tcp —match multiport —dports 9090,9093,9094,9100 -j ACCEPT
iptables -I INPUT -p udp —dport 9094 -j ACCEPT
Сохраняем правила с помощью iptables-persistent:
apt install iptables-persistent
в) с помощью ufw:
ufw allow 9090,9093,9094,9100/tcp
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 -zxf 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»:
level=info ts=2019-08-07T07:39:06.849Z caller=main.go:621 msg=» Server is ready to receive web requests. «
Открываем веб-браузер и переходим по адресу http://:9090 — загрузится консоль 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:
mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
tar -zxf 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
Открываем веб-браузер и переходим по адресу http://:9093 — загрузится консоль alertmanager:
node_exporter
Для получения метрик от операционной системы, установим и настроим node_exporter на тот же сервер прометеуса (и на все клиентские компьютеры). Процесс установки такой же, как у Prometheus и Alertmanager.
Если мы устанавливаем node_exporter на клиента, необходимо проверить наличие брандмауэра и, при необходимости, открыть tcp-порт 9100.
Загрузка
Заходим на страницу загрузки и копируем ссылку на node_exporter:
* обратите внимание, что для некоторых приложений есть свои готовые экспортеры.
После предыдущей установки мы должны были остаться в каталоге алерт менеджера — выходим на уровень выше:
Теперь используем ссылку для загрузки node_exporter:
Установка
Распакуем скачанный архив:
tar -zxf 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: