Skip to content

Prometheus

Установка и troubleshoot

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

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

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

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

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

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

Bash
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:

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

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

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

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

Nginx Configuration File
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;). Подтягиваем конфиги:

Bash
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:

YAML
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:

YAML
  - job_name: nginx

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

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

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

Bash
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]]

prometheus #tool #monitoring #troubleshoot