• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Установка стека Grafana\Prometheus на Debian 10

Независимо от того, являетесь ли вы System Administrator\DevOps в крупной ИТ компании, или ваш парк состоит из небольшого количества серверов, или вы разработчик который желает держать жизненный цикл приложения под контролем "в облаке", важно одно - следить за своей инфраструктурой и приложениями. Качественно настроенный мониторинг позволяет узнать когда сервер\приложение выходит из строя, и когда появляются к этому предпосылки. В этой статье мы дадим краткий обзор того, как настроить мониторинг используя стек Prometheus, Grafana и Node Exporter.

Prometheus - сердце мониторинга. Это экосистема, позволяющая собирать метрики с физических серверов, VPS, отдельных приложений, различных баз данных, контейнеров и устройств IoT. Prometheus включает в себя сотни готовых решений для сбора информации и позволяет одновременно мониторить тысячи служб. При необходимости, по мере изучения, опытный администратор может для него написать свои сценарии.

Node exporter - представляет из себя готовое приложение, экспортер метрик Prometheus для сбора данных о состоянии сервера в среду визуализации.

Grafana - среда визуализации. Использует метрики, которые собрал Prometheus, и отображает их в виде информативных графиков и диаграмм, организованных в настраиваемые панели.

18 мая 2020 года состоялся долгожданный релиз Grafana 7.0. Рассмотрим основные новшества:

  • Новый редактор панелей. Редизайн на основе отзывов сообщества.
  • Новый интерфейс трассировки и поддержка визуализации трассировок Jaeger и Zipkin.
  • Анализ корпоративного использования, индикатор присутствия пользователей, улучшение аутентификации.
  • Данные, которые вы хотите визуализировать, могут поступать из разных мест, и они не всегда в правильной форме. Теперь пользователи могут преобразовывать данные в таблицы, не относящиеся к временным рядам (например, файлы JSON или даже простые таблицы поиска).
  • Улучшенный дашборд. Он поддерживает горизонтальную прокрутку и изменение размера столбцов. Вы можете изменять порядок, скрывать и переименовывать столбцы. Эта новая панель также поддерживает новые режимы отображения ячеек.
  • Новые плагины платформы.
  • Обновленный tutorials.
  • Поддержка Amazon CloudWatch для журналов Cloudwatch.
  • Удален PhantomJS.
  • Поддержка часовых поясов

Рассмотрим пример дашборда, который предлагает Node Exporter for Prometheus Dashboard для Linux host машин. Визуализация следующих данных: disk space, process count, swap, cpu usage, RAM usage, IP outgoing traffic, system load, disk I/O и другие метрики.

Пример дашборда

Для каждой панели вы можете настроить свой необходимый набор графиков и подключить для мониторинга сотни хостов и приложений.

  1. Установка Prometheus
  2. Установка Node Exporter
  3. Установка и настройка Grafana. Тестирование Node Exporter
  4. Установка и настройка MySQL Exporter
  5. Установка других экспортеров
  6. Защита Grafana\Prometheus
  7. Заключение

Установка Prometheus

Свежую версию ищем на официально странице

 

root@dedicated:~# wget https://github.com/prometheus/prometheus/releases/download/
v2.18.1/prometheus-2.18.1.linux-amd64.tar.gz
root@dedicated:~# tar zxvf prometheus-2.18.1.linux-amd64.tar.gz 
root@dedicated:~# cd prometheus-2.18.1.linux-amd64/

 

 Создадим необходимые каталоги, и скопируем в них необходимые файлы:

 

root@dedicated:~# mkdir /etc/prometheus
root@dedicated:~# mkdir /var/lib/prometheus
root@dedicated:~# cp prometheus promtool /usr/local/bin/
root@dedicated:~# cp -r console_libraries consoles prometheus.yml /etc/prometheus

 

Добавим пользователя prometheus:

 

root@dedicated:~# useradd --no-create-home --shell /bin/false prometheus

 

И назначим правильные права на каталоги:

 

root@dedicated:~# chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
root@dedicated:~# chown prometheus:prometheus /usr/local/bin/{prometheus,promtool}

 

Следующей командой запустим Prometheus:

 

root@dedicated:~# /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»:

Server is ready to receive web requests

Не завершая вывода консоли вводим в браузере https://178.20.152.79:9090

вводим в браузере https://178.20.152.79:9090

Завершив процесс который открыт в нашем терминале, web-интерфейс станет недоступен. Для дальнейшей настройки создадим юнит systemd:

 

root@dedicated:~# mcedit /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

 

Сохраните и закройте файл. Создание, редактирование и управление системой инициализации Systemd мы ранее рассматривали в руководстве «Использование systemd»

 

root@dedicated:~# systemctl daemon-reload

 

Повторно задаем права пользователю prometheus, запускаем службу и добавляем её в автозапуск:

 

root@dedicated:~# chown -R prometheus:prometheus /var/lib/prometheus
root@dedicated:~# systemctl enable  prometheus.service
root@dedicated:~# systemctl start prometheus.service
root@dedicated:~# systemctl status  prometheus.service

 

Установка Node Exporter

Свежую версию Node Exporter ищем на странице приложения. Скачайте его и извлеките из архива:

 

root@dedicated:~# wget https://github.com/prometheus/node_exporter
/releases/download/v1.0.0/node_exporter-1.0.0.linux-amd64.tar.gz
root@dedicated:~# tar xvfz node_exporter-*.*-amd64.tar.gz

 

 Перейдите в каталог и запустите сценарий:

 

root@dedicated:~# cd node_exporter-*.*-amd64
root@dedicated:~# ./node_exporter

 

Вы должны получить следующее сообщение. Не прерывайте его выполнение:

Запуск сценария

Откройте в браузере адрес https://ip_address:9100/metrics, или создайте новую консоль терминала, обратившись к данным с помощью curl. Результат должен быть примерно следующим:

новый терминал консоли

Файлы с node-exporter предварительно скопированы в каталолг /etc/prometheus/node-exporter/. Проследите так же, чтобы на него были выставлены правильные права:

 

root@dedicated:~# chown -R prometheus:prometheus /etc/prometheus/node-exporter/

 

Cоздайте юнит со следующим содержимым:

 

root@dedicated:~# mcedit /etc/systemd/system/node-exporter.service

[Unit]
Description=Node Exporter
After=network.target
 
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/etc/prometheus/node-exporter/node_exporter
 
[Install]
WantedBy=multi-user.target

 

Затем отредактируйте главный конфигурационный файл prometheus, добавив в него информацию о Node Exporter. При редактировании файлов *.yml табуляция не допустима, используйте четное количество пробелов:

 

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090', 'localhost:9100']

 

Примечание: Два узла добавлены для примера, если вы хотите использовать только метрики node_exporter, достаточно указать один узел: ['localhost:9100']

Добавление информации о Node Exporter

Примените настройки, активируйте и добавьте в автозагрузку node-exporter.service, перезапустите службу prometheus.service. Введите в адресной строке браузера https://ip_address:9090/targets

Если вы все сделали правильно, результат должен быть следующий:

Полученный результат после добавления node-exporter.service

Установка и настройка Grafana. Тестирование Node Exporter

Скачиваем и устававливаем последнюю стабильную версию:

 

root@dedicated:~# apt-get install -y adduser libfontconfig1
root@dedicated:~# wget https://dl.grafana.com/oss/release/grafana_7.0.3_amd64.deb
root@dedicated:~# dpkg -i grafana_7.0.3_amd64.deb
root@dedicated:~# systemctl enable grafana-server
root@dedicated:~# systemctl start grafana-server
root@dedicated:~# systemctl status grafana-server

https://ip_address:3000/
login: admin
password: admin

 

После ввода стандартного логина и пароля, вам сразу же будет предложено ввести новый пароль и подтвердить его.

Страница авторизации

Первым делом интегрируем Prometheus в Grafana. Для этого во вкладке «Configuration» - «Data Sources» устанавливаем плагин Prometheus со следующими параметрами подключения:

Установка плагина Prometheus

В нашем примере мы будем использовать Node Exporter for Prometheus Dashboard EN v20191102. Переходим по ссылке, внимательно читаем описание и качаем JSON файл.

Возвращаемся в панель Grafana, в меню слева выберем «+» -> «Create» -> «Import». Нажав «Upload .json file» выбираем наш скачанный дискавери. Дальнейшие настройки должны быть следующие:

Установка скачанных компонентов.

 Выполнив все эти действия мы должны получить результат:

Полученный результат

Примеры будут не полные, если мы не проведем базовое нагрузочное тестирование. Делаем это на чистой тестовой базе данных. В правом верхнем углу выберем обновление графиков 5 секунд и результат за последние 30 минут.

На хостовой машине установим утилиту и stress и запустим её:

 

root@dedicated:~# apt-get install stress
root@dedicated:~# root@dedicated:~# stress -c 2 -i 1 -m 1 --vm-bytes 256M -t 60s

 

или:

 

root@dedicated:~# apt-get install sysbench
root@dedicated:~# sysbench --test=cpu --cpu-max-prime=20000 ru

 

Ждем 60 секунд и посмотрим на некоторые наши графики:

График с результатом тестирования

График с результатом тестирования

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

 

root@dedicated:~# sysbench --test=fileio --file-total-size=2G prepare
root@dedicated:~# sysbench fileio --file-total-size=2G cleanup

 

График теста дисковой системы

Установка и настройка MySQL Exporter

Установим MySQL Exporter. Свежий релиз смотрим на официальном проекте на GitHub

 

root@dedicated:~# wget https://github.com/prometheus/mysqld_exporter/releases
/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

root@dedicated:~# tar xvf mysqld_exporter*.tar.gz
root@dedicated:~# mv  mysqld_exporter-*.linux-amd64/mysqld_exporter /usr/local/bin/
root@dedicated:~# chmod +x /usr/local/bin/mysqld_exporter

 

Добавим данные для аутентификации:

 

root@dedicated:~# mcedit /etc/.mysqld_exporter.cnf 

[client]
user=mysqld_exporter
password=StrongPassword

Создадим юнит systemd:

root@dedicated:~# mcedit /etc/systemd/system/mysqld_exporter.service

 [Unit]
 Description=Prometheus MySQL Exporter
 After=network.target
 User=prometheus
 Group=prometheus

 [Service]
 Type=simple
 Restart=always
 ExecStart=/usr/local/bin/mysqld_exporter \
 --config.my-cnf /etc/.mysqld_exporter.cnf \
 --collect.global_status \
 --collect.info_schema.innodb_metrics \
 --collect.auto_increment.columns \
 --collect.info_schema.processlist \
 --collect.binlog_size \
 --collect.info_schema.tablestats \
 --collect.global_variables \
 --collect.info_schema.query_response_time \
 --collect.info_schema.userstats \
 --collect.info_schema.tables \
 --collect.perf_schema.tablelocks \
 --collect.perf_schema.file_events \
 --collect.perf_schema.eventswaits \
 --collect.perf_schema.indexiowaits \
 --collect.perf_schema.tableiowaits \
 --collect.slave_status \
 --web.listen-address=127.0.0.1:9104
 
 [Install]
 WantedBy=multi-user.target

 

Применим настройки и убедимся, что служба работоспособна:

 

root@dedicated:~#  systemctl daemon-reload
root@dedicated:~#  systemctl start mysqld_exporter.service
root@dedicated:~#  systemctl enable mysqld_exporter.service
root@dedicated:~#  systemctl status mysqld_exporter.service

 

применение настроек и проверка работы службы

Добавим информацию о службе в конфигурационный файл Prometheus

 

root@dedicated:~# mcedit /etc/prometheus/prometheus.yml 

  - job_name: 'mysqld_exporter'
    static_configs:
     - targets: ['127.0.0.1:9104']

 

добавление службы в файл конфигурации

Проверьте работоспособность. Перезагрузите prometheus и выполните запрос данных:

 

root@dedicated:~#  curl https://localhost:9104/metrics

 

Создадим тестовую базу mariadb c двумя пользователями, userdb для тестирования и mysqld_exporter для подключения к Grafana:

 

MariaDB [(none)]> CREATE DATABASE testdb character set utf8 collate utf8_bin;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON testdb.* TO userdb@localhost IDENTIFIED by 'StrongPassword';
MariaDB [(none)]>GRANT ALL PRIVILEGES ON testdb.* TO mysqld_exporter@localhost IDENTIFIED by 'StrongPassword';
MariaDB [(none)]> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;

 

Затем во вкладке «Configuration» - «Data Sources» устанавливаем плагин MySQL и настроим подключение к нашей созданной базе данных:

Установка плагина MySQL

Аналогично, как это было с Node Exporter, установим дашборд для сбора метрик MySQL, например, этот. Выполняем импорт JSON:

Установка дашборда для сбора метрик MySQL

и получаем дашборд следующего вида:

Полученный дашборд

Графиков на самом деле намного больше, но не будем акцентировать внимание на скриншотах, при необходимости вы можете поменять их расположение и удалить ненужные. Каждый дашборд вы можете настроить как угодно для собственного удобства. Давайте лучше выполним нагрузочное тестирование уже знакомой нам утилитой sysbench. Для начала подготовим нашу базу данных, создадим таблички (у меня это 10000), укажем параметры подключения:

 

root@dedicated:~# sysbench --db-driver=mysql --mysql-user=userdb
--mysql-password='StrongPassword' --mysql-db=testdb --mysql_storage_engine=mariadb
--table_size=10000 --tables=4
--threads=4 /usr/share/sysbench/oltp_read_write.lua prepare

 

...и запустим непосредственно тест:

 

root@dedicated:~# sysbench --db-driver=mysql --mysql-user=userdb
--mysql-password='StrongPassword' --mysql-db=testdb --mysql_storage_engine=innodb
--table_size=10000 --tables=4 --threads=1
--time=60 /usr/share/sysbench/oltp_read_write.lua run

 

 Выполнение у нас выставлено 60 секунд. Пока выполняется нагрузочное тестирование, посмотрим как ведут себя графики:

Мониторинг по графикам

Как видим, Grafana отреагировала на аномалию.

Установка других экспортеров

 У Prometheus есть множество готовых решений, ознакомится вы можете на официальной странице сообщества. Готовые дашборды Grafana так же доступны в свободном доступе для скачивания. В зависимости от операционной системы и архитектурных решений, установка может отличаться, но для администратора, при понимании функционирования своей инфраструктуры, не должно возникнуть проблем в донастройке. Стек Grafana\Prometheus довольно гибок, и если каких-то решений не существует, по мере изучения, вы можете научиться писать свои собственные уникальные service discovery для сбора метрик.

Защита Grafana\Prometheus

Каждый экспортер и решение которые вы устанавливаете на сервер, должно быть закрыто средствами firewall от внешнего мира. Доступ к метрикам должен быть строго ограничен, все порты которые предоставляют информацию о хост системе, должны быть защищены

ограничение доступа средствами firewall

Если вы настраиваете экспортеры на продакшн сервере, установку необходимо начинать с ограничения доступа по портам извне. Или наоборот, открыть порт, если он закрыт брандмауэром. Предварительно, с портами, которые используют экспортеры вы можете ознакомиться на GitHub или обратиться к официальной документации.

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

 

root@dedicated:~# apt-get install nginx apache2-utils

 

Следующая команда попросит ввести и подтвердить пароль для пользователя freehost. Придумайте сложный пароль, не менее 10 символов, с латинскими буквами разных регистров, цифрами и спецсимволами:

 

root@dedicated:~# htpasswd -c /etc/nginx/.htpasswd freehost
New password: 
Re-type new password: 
Adding password for user freehost

 

В каталоге nginx будет создана соответствующая запись:

 

root@dedicated:~# cat /etc/nginx/.htpasswd 
freehost:$apr3$Rkb2qvSWQH$IyiKaGhwrJhS7i.sKJQUKhFrqmgrO.

 

Создадим виртуалхост для Prometheus:

 

root@dedicated:~# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/prometheus.conf 
root@dedicated:~# mcedit /etc/nginx/conf.d/prometheus.conf 

 

следующего содержания:

Создание виртуалхоста для Prometheus

Теперь разрешим весь трафик на локальном узле, и ограничим доступ по порту снаружи для Node Exporter. Трафик нужно ограничить для всех экспортёров, которые будут вами использоваться

 

root@dedicated:~# iptables -A INPUT -i lo -j ACCEPT
root@dedicated:~# iptables -A INPUT -p tcp --dport 9100 -j DROP
root@dedicated:~# iptables -A INPUT -p tcp --dport 9090 -j DROP

 

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

Проверка доступа со стороннего IP

Проверка закрытости порта для сторонних IP

Заключение

Используя Grafana в связке с Prometheus мы можем следить за состоянием сервера и своевременно анализировать аномалии. Подробные графики показывают полную картину функционирования сервера и позволяют администратору более точно определить причину некорректной работы. Большое количество готовых экспортеров может сполна покрыть большинство задач администрирования. Для наших клиентов облачного VPS хостинга, мы приготовили шаблон, с помощью которого вы сможете установить Debian 10 с предустановленным стеком Grafana\Prometheus\Node Exporter в считанные минуты и приступить к его настройке. Наша круглосуточная служба технической поддержки поможет с его базовой настройкой, если у вас возникнут сложности.

 

Дата: 12.06.2020
Автор: Дмитрий
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA