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’]
Список целей мониторинга
- 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