Table of Contents
Мониторинг серверов на основе Prometheus Grafana Node_exporter
Установка и настройка на сервер ОС Ubuntu 22.04 LTS x86_64.
Описание компонентов
Prometheus – сервер, предназначенный для сбора и хранения данных. Данные постоянно изменяются во времени (например, уровень заполненности диска, трафик через сетевой интерфейс, время отклика сайта). Элементы данных называются метриками. Сервер Prometheus с заданной периодичностью считывает метрики и помещает полученные данные в Time Series DB. Time Series DB – это разновидность баз данных, предназначенная для хранения временных рядов (значений с привязкой ко времени). Кроме того, Prometheus предоставляет интерфейс для выполнения запросов и визуализации полученных данных. Язык запросов Prometheus называется PromQL. Prometheus работает по модели Pull, то есть он сам опрашивает endpoints с целью получения данных.
Exporters – процессы, обеспечивающие сбор и их передачу серверу Prometheus. Существует много разных exporters, например:
- Node_exporter – сбор системных метрик (процессор, память, и т.д.).
- Mysqld_exporter – сбор метрик работы сервера MySQL.
- Postgres_exporter – сбор метрик работы сервера PostgreSQL.
После запуска exporter начинает сбор соответствующих метрик и ожидает запросов от сервера Prometheus по заданному порту. Данных передаются в формате http.
Grafana – frontend для визуализации накопленных данных, может использоваться для работы с данными сервера Prometheus, предоставляет различные преднастроенные Dashboard для отображения данных.
Помимо функций сбора, анализа и визуализации данных, Prometheus и Grafana поддерживают настраиваемые оповещения. В Grafana этот механизм является встроенным, в Prometheus он реализуется отдельным компонентом Alert_manager
Установка Prometheus
Создадим пользователя prometheus и одноименную группу, от имени которых будет запускаться prometheus:
groupadd --system prometheus useradd --system -g prometheus -s /bin/false prometheus
На сайте разработчика смотрим актуальную версию. На момент написание – 2.41.0
Создадим переменную:
export VERSION="2.41.0"
Скачиваем архив prometheus и распакуйте его в папку /tmp/prometheus:
mkdir -p /tmp/prometheus cd /tmp/prometheus wget https://github.com/prometheus/prometheus/releases/download/v$VERSION/prometheus-$VERSION.linux-amd64.tar.gz -O - | tar -xzv -C /tmp/prometheus
Создадим директории:
# для конфигурационного файла mkdir /etc/prometheus # для данных mkdir /var/lib/prometheus
Копируем бинарники:
cp /tmp/prometheus/prometheus-$VERSION.linux-amd64/prometheus /usr/local/bin cp /tmp/prometheus/prometheus-$VERSION.linux-amd64/promtool /usr/local/bin chown prometheus:prometheus /usr/local/bin/prometheus chown prometheus:prometheus /usr/local/bin/promtool
Копируем библиотек консоли Prometheus:
cp -r prometheus-$VERSION.linux-amd64/consoles /etc/prometheus/ cp -r prometheus-$VERSION.linux-amd64/console_libraries /etc/prometheus/ cp -r prometheus-$VERSION.linux-amd64/prometheus.yml /etc/prometheus/ chown -R prometheus. /etc/prometheus/
Проверяем версии бинарников:
prometheus --version promtool --version
Создание юнит файла Prometheus
Prometheus можно запустить в качестве службы, указав ему пути к конфигам вот таким образом:
sudo -u 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
Создим юнит файл /etc/systemd/system/prometheus.service сервиса Prometheus со следующим содержимым:
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Restart=always 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 \ --web.listen-address=0.0.0.0:9090 [Install] WantedBy=multi-user.target
Далее:
sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus
Accessing Prometheus
sudo ufw allow 9090/tcp
Теперь служба Prometheus готова к работе, и мы можем получить к ней доступ из любого веб-браузера по адресу http://server-IP-or-Hostname:9090
Install Node Exporter
Актуальную версию node_exporter берем с официального сайта разработчика. На момент написание статьи, это – 1.5.0
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz sudo tar xvzf node_exporter-1.5.0.linux-amd64.tar.gz cp node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin chown prometheus. /usr/local/bin/node_exporter
Далее, создаем юнит – /etc/systemd/system/node_exporter.service для запуска сервиса node_exporter :
[Unit] Description=Prometheus Node Exporter After=network.target [Service] Type=simple Restart=always User=prometheus Group=prometheus ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable node_exporter sudo systemctl start node_exporter sudo systemctl status node_exporter
Configure the Node Exporter as a Prometheus target
Редактируем /etc/prometheus/prometheus.yml:
global: scrape_interval: 10s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter_metrics' scrape_interval: 5s static_configs: - targets: ['192.168.99.24:9100', '192.168.99.44:9100']
Перезапускаем Prometheus:
sudo systemctl restart prometheus
Install Grafana
С учетом реалий на 24.01.23, установить Grafana с российского ip можно только через vpn.
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" apt-get update && apt-get -y install grafana
Для того чтобы скачать Grafana на Debian 11, нужно чтобы в системе присутствовал пект gnupg.
sudo systemctl start grafana-server sudo systemctl status grafana-server sudo systemctl enable grafana-server.service
После запуска сервиса, будет доступен web-интерфейс по адресу http://grafana_ip:3000
Для входа вводим login: admin password: admin после чего будет предложено изменить пароль.
При создании Data Source, указываем адрес Prometheus http://localhost:9090
, либо http://ip_prometheus:9090
, если на разных хостах (не адрес node_exporter)
Номер шаблона 14513
Nginx Reverse Proxy
Для Prometheus
Создаем конфиг /etc/nginx/sites-available/prometheus.conf
server { listen 80; listen [::]:80; server_name example.com; location / { proxy_pass http://localhost:9090/; } }
ln -s /etc/nginx/sites-available/prometheus.conf /etc/nginx/sites-enabled/ nginx -t systemctl restart nginx.service