Добавить в корзинуПозвонить
Найти в Дзене
Блокнот админа

Prometheus + Grafana. Базовая установка и настройка на Debian/Ubuntu.

Добрый день!
Одной из систем мониторинга является Prometheus. Помимо мониторинга собственно серверов Prometheus позволяет в том числе собирать метрики с каких либо служб, приложений и так далее.

Добрый день!

Одной из систем мониторинга является Prometheus. Помимо мониторинга собственно серверов Prometheus позволяет в том числе собирать метрики с каких либо служб, приложений и так далее, в общем, подробнее здесь.

В чём собственно отличие Prometheus от популярного Zabbix? Я вижу (по крайней мере пока) следующее:

Prometheus имеет перезаписываемую базу данных метрик. Т.е. место под каждую метрику выделяется единожды. Сразу задаётся сколько данных хранить. Соответственно база расти не будет. Соответственно имеем большее быстродействие. Соответственно выделяем ресурсы под сервер единожды.

Prometheus использует PULL модель сбора метрик. Т.е. сервер идёт на клиент за метриками, а не наоборот (PUSH модель). Может быть существенно с точки зрения безопасности (что куда и какие порты открывать). PUSH модель тоже может использоваться. Но на мой личный взгляд разница небольшая.

Скажу честно, о данном продукте я узнал относительно недавно. Решил установить с целью "посмотреть, пощупать" и столкнулся с тем, что официальной документации либо нет, либо она невнятная и тому подобное. (По сравнению с тем же Zabbix, у которого просто шикарная документация!) В результате поиска были найдены какие то инструкции, так что данная статья есть компиляция этих инструкций.

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

1. Установка самого Prometheus.

Есть варианты установки из пакетов, из бинарников, в docker. Большинство инструкций предлагают ставить из бинарников, хотя в репозиториях Debian/Ubuntu есть готовый пакет. Но, как я уже упоминал, я не линуксоид, поэтому пошёл по пути наименьшего сопротивления и, как в инструкциях, поставил из бинарников.

Ищем необходимый пакет на официальной странице загрузки:

Качаем:

wget https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz

Распаковываем:

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

Переходим в каталог с загруженными файлами:

cd prometheus-*.linux-amd64

Создаём каталоги и копируем файлы:

mkdir /etc/prometheus

mkdir /var/lib/prometheus

cp prometheus promtool /usr/local/bin/

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

Создаём пользователя для запуска службы Prometheus без домашней директории и без прав на доступ к консоли:

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

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

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

chown prometheus:prometheus /usr/local/bin/{prometheus,promtool}

Создаём службу:

nano /etc/systemd/system/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

[Install]
WantedBy=multi-user.target

Запускаем службу:

systemctl daemon-reload

systemctl enable prometheus

systemctl start prometheus

Смотрим результат:

systemctl start prometheus

Можно посмотреть веб интерфейс. Порт 9090.

-2

Всё нормально.

2. Установка Alertmanager.

Служба Alertmanager нужна для сортировки событий и, собственно, для выдачи предупреждений.

Установка аналогично серверу:

wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

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

cd alertmanager-*.linux-amd64

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

cp alertmanager amtool /usr/local/bin/

cp alertmanager.yml /etc/alertmanager

Создаём пользователя и назначаем права:

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

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

chown alertmanager:alertmanager /usr/local/bin/{alertmanager,amtool}

Создаём службу:

nano /etc/systemd/system/alertmanager.service

[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

[Install]
WantedBy=multi-user.target

Запуск службы:

systemctl daemon-reload

systemctl enable alertmanager

systemctl start alertmanager

Результат:

systemctl status alertmanager

-3

Веб интерфейс, порт 9093:

-4

3. Установка node_exporter.

Node_exporter есть агент по сбору метрик с компьютера (ноды). Официальные - darwin (MacOS), Linux, NetBSD, FreeBSD. Так же на странице загрузки можно найти другие exporter-ы для мониторинга других сервисов.

Неофициальные exporter-ы от сообщества.

Ставим для локальной машины:

Качаем:

wget https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_exporter-1.1.1.linux-amd64.tar.gz

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

cd node_exporter-*.linux-amd64

cp node_exporter /usr/local/bin/

Пользователь и права:

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

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

Установка службы:

nano /etc/systemd/system/node_exporter.service

[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

[Install]
WantedBy=multi-user.target

Запуск:

systemctl daemon-reload

systemctl enable node_exporter

systemctl start node_exporter

Результат:

systemctl status node_exporter

-5

Веб интерфейс, порт 9100

-6

Сбор метрик в лучших традициях *NIX настраиватся в файле, открываем:

nano /etc/prometheus/prometheus.yml

Добавляем настройку alertmanager-а, в строке targets указываем ['localhost:9093']

Добавляем новый node exporter, дописываем в файл:

- job_name: 'node_exporter_clients'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.237.178:9100']

Можно через запятую указать несколько хостов. Интервал опроса 5 секунд.

-7

Перезапускаем службу

systemctl restart prometheus

В веб интерфейсе Prometheus вкладка Status - Targets можно посмотреть какие target-ы доступны:

-8

4. Ставим Grafana.

Через "родной" веб интерфейс Prometheus что либо отслеживать мягко говоря невозможно, поэтому нужно поставить подходящую для этого оболочку.

Идём на официальный сайт, качаем, ставим.

apt-get install -y adduser libfontconfig1

wget https://dl.grafana.com/oss/release/grafana_7.4.2_amd64.deb

dpkg -i grafana_7.4.2_amd64.deb

systemctl start grafana-server

Открываем веб интерфейс, порт 3000

Логин/пароль по-умолчанию admin/admin.

Настраиваем источник данных:

Configuration - Data Sources - Add data source

Выбираем Prometheus (первый в списке), указываем http://localhost:9090

-9

Далее Dashboards - Manage - Import.

На сайте Grafana есть готовые дашборды. Указываем id. В одном из источников рекомендовали Node Exporter Full, id1860. Указываем источник для дашборда.

-10

Результат:

-11

Как видим, что-то мониторится, что-то показывает. Первичная установка и настройка завершена.

С остальным будем разбираться в следующих статьях.

С уважением..

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

https://www.dmosk.ru/instruktions.php?object=prometheus-linux

https://laurvas.ru/prometheus-p1/

https://prometheus.io/

https://grafana.com/grafana/download