Мониторинг процессов linux prometheus

Мониторинг процессов 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 сам собирает все данные с целевого объекта, для этого есть разные способы:

  1. Приложение может быть написано так, что само отдает метрики в нужном формате.
  2. Используются готовые экспортеры. Например, есть экспортеры для MySQL, Nginx или машины с GNU/Linux.
  3. Pushgateway. Применяется, когда нет возможности использовать Pull-запросы для снятия метрик стандартными средствами. Применяется, например, при выполнении задач в crontab.
Читайте также:  Vmware kali linux bluetooth

Так как приём и обработка данных происходит в самом Prometheus, он является центральным звеном всей схемы мониторинга, где происходит вся настройка. Формат получаемых метрик в Prometheus — ключ-значение, это важно запомнить.

Из дополнительных инструментов присутствуют:

  1. Alertmanager – для оповещения, его данная статья не коснётся.
  2. Data visualization – простой способ визуализации из коробки, из внешних можно использовать Grafana.
  3. 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. Проверяем, работает ли она в нашей системе:

Читайте также:  Linux shared folder from windows

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

sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config

* если же мы получим ответ The program ‘getenforce’ is currently not installed, то SELinux не установлен в системе.

Prometheus

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

Загрузка

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

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

. и используем ее для загрузки пакета на 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

Автозапуск

Мы установили наш сервер мониторинга, но его необходимо запускать вручную, что совсем не подходит для серверных задач. Для настройки автоматического старта 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

Читайте также:  Linux java application as service

systemctl start prometheus

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

systemctl status prometheus

Alertmanager

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

Загрузка

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

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

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

Теперь используем ссылку для загрузки 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:

Веб консоль Alertmanager

node_exporter

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

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

Загрузка

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

Копируем ссылку на 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:

Источник

Оцените статью
Adblock
detector