Prometheus

Установка и troubleshoot

Можно установить бинарник последней версии, но придется самому писать systemd unit-ы и конфиги.
Ставить буду из apt:

sudo apt install prometheus prometheus-alertmanager prometheus-node-exporter prometheus-nginx-exporter

prometheus-node-exporter нужен для экспорта метрик самого сервера (железо)
prometheus-nginx-exporter - для экспорта метрик nginx-сервер

Проверяем, все ли сервисы запустились:

systemctl status --no-pager prometheus.service prometheus-alertmanager.service prometheus-node-exporter.service prometheus-nginx-exporter.service

prometheus-nginx-exporter не смог запуститься:

sudo journalctl -xe
 
# May 31 18:08:12 vm-debian prometheus-nginx-exporter[2213]: 2023/05/31 18:08:12 Could not create Nginx Client: failed to get http://127.0.0.1:8080/stub_status: Get "http://127.0.0.1:8080/stub_status": dial tcp 127.0.0.1:8080: connect: connection refused

Он искал адрес http://127.0.0.1:8080/stub_status на порту 8080 и, естественно, никакой страницы stub_status, слушающего на порту 8080 не нашел. Проверим вручную, есть ли доступ по такому адресу и порт 8080:

curl -v http://127.0.0.1:8080/stub_status
sudo netstat -lntpu | grep 8080

Получается, nginx не готов пока что отдавать метрики, ибо модуль with-http_stub_status_module не включен. Нужно проверить поддерживается ли он вообще в данной версии nginx:

sudo nginx -V 2>&1 | grep -o with-http_stub_status_module

Нужно добавить строки в /etc/nginx/sites-available/default:

listen 8080 default_server;
 
location /stub_status {
	stub_status;
	allow 127.0.0.1;
	deny all;
}

Т.к. prometheus у тебя стоит на localhost, а другим метрики не хочется давать - разрешаешь метрики только на localhost (allow 127.0.0.1;) и запрещаешь остальным (deny all;). Подтягиваем конфиги:

sudo nginx -t
sudo systemctl restart nginx
 
# Проверяем адрес на доступность:
curl -v http://127.0.0.1:8080/stub_status
 
# И перезапускаем prometheus-nginx-exporter:
sudo systemctl restart prometheus-nginx-exporter.service

Конфигурация

Дефолтного конфига /etc/prometheus/prometheus.yml вполне достаточно, а при надобности доп настроек можно вносить их туда же.
Explaining некоторых настроек в /etc/prometheus/prometheus.yml:

global:
  scrape_interval:     15s
  evaluation_interval: 15s
 
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
 
scrape_configs:
 
  - job_name: 'prometheus'
 
    scrape_interval: 5s
    scrape_timeout: 5s
 
    static_configs:
      - targets: ['localhost:9090']
 
  - job_name: node
 
    static_configs:
      - targets: ['localhost:9100']

В секции global есть:

  • scrape_interval
    Параметр, указывающий интервал сбора метрик (scraping). То есть, каждые 15 секунд prometheus будет запрашивать данные от целей мониторинга.

  • evaluation_interval
    Параметр указывает интервал вычисления значений метрик на основе собранных данных (интервал которой определяет scrape_interval).

В секции rule_files находятся пути к файлам правил (для доп. метрик, например).

В секции scrape_configs находится список конфигураций для сбора метрик.

  • job_name: ‘prometheus’
    Это название конфигурации сбора метрик

+scrape_timeout: 5s
Задает таймаут для каждого запроса на сбор метрик, то есть, если запрос не будет выполнен в течение 5 секунд - будет прерван

  • static_configs
    Указывает на использование статической конфигурации, то есть список целей для мониторинга задается вручную.
    • targets: [‘localhost:9090’]
      Список целей мониторинга

Нужно добавить конфиг для prometheus-nginx-exporter:

  - job_name: nginx
 
    static_configs:
      - targets: ['localhost:9113']

Можно теперь проверить targets в браузере: http://localhost:9090/classic/targets
Там должны быть node и prometheus:

Теперь можно подтянуть конфиги:

sudo systemctl restart prometheus.service

И в targets появится nginx:

Можно здесь же перейти по ссылке на метрики nginx, например: http://localhost:9113/metrics


Графики

В веб-интерфейсе prometheus возможностей не особо, хоть есть и алерты (предупреждения) на странице alerts, правила которых можно задать и отслеживать там же, и страница graph, где можно создать графики на основе собираемых метрик. Создай ради примера одну:


В поле вводишь запрос (я ввел node_memory_Active_bytes) и нажать Execute, чтобы появился график с кол-вом потребления байтов ОЗУ:


Мониторинг
Prometheus basic auth
PromQL
Экспортеры: mysql_exporter, php-fpm-exporter

prometheustoolmonitoringtroubleshoot