Экспортеры Prometheus выступают как агенты мониторинга, позволяя собирать метрики с удаленных хостов, которые собирает сам сервер Prometheus. Данная инструкция является шпаргалкой по установке и настройке различных node exporter. По мере необходимости, список будет пополняться.
node_exporter
Экспортер предназначен для получения метрик от операционной системы. По умолчанию, работает на порту 9100.
Загрузка и установка
Заходим на страницу загрузки и смотрим актуальную версию node_exporter. Создаем переменную со значением данной версии:
NE_VER=1.9.0
Теперь используем ее для загрузки node_exporter:
curl -sLO https://github.com/prometheus/node_exporter/releases/download/v${NE_VER}/node_exporter-${NE_VER}.linux-amd64.tar.gz
Распакуем скачанный архив:
tar -zxf node_exporter-*.linux-amd64.tar.gz
Перейдем в каталог с распакованными файлами:
cd node_exporter-*.linux-amd64
Копируем исполняемый файл в bin:
cp node_exporter /usr/local/bin/
Выходим из каталога и удаляем исходник:
cd .. && rm -rf node_exporter-*.linux-amd64/ && rm -f node_exporter-*.linux-amd64.tar.gz
Запуск и проверка
Создаем пользователя nodeusr:
useradd —no-create-home —shell /bin/false nodeusr
Задаем владельца для исполняемого файла:
chown -R nodeusr:nodeusr /usr/local/bin/node_exporter
Создаем файл node_exporter.service в systemd:
vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter Service
After=network.target
[Service]
User=nodeusr
Group=nodeusr
Type=simple
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Разрешаем автозапуск:
systemctl enable node_exporter
Запускаем службу:
systemctl start node_exporter
Проверим работу с помощью утилиты curl:
curl 127.0.0.1:9100/metrics
На экране мы должны увидеть метрики, на подобие:
…
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes 1.8446744073709552e+19
# HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
# TYPE promhttp_metric_handler_errors_total counter
promhttp_metric_handler_errors_total{cause=»encoding»} 0
promhttp_metric_handler_errors_total{cause=»gathering»} 0
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code=»200″} 0
promhttp_metric_handler_requests_total{code=»500″} 0
promhttp_metric_handler_requests_total{code=»503″} 0
Также можно открыть веб-браузер и перейти по адресу http://<IP-адрес сервера или клиента>:9100/metrics — мы увидим метрики, собранные node_exporter:
Установка завершена.
Настройка Prometeus Server
Чтобы сервер мог собрать с него данные, открываем на нем файл:
vi /etc/prometheus/prometheus.yml
И добавляем таргет в job:
— job_name: ‘node_exporter_clients’
scrape_interval: 5s
static_configs:
— targets:
— 192.168.0.11:9100
* если у нас еще нет подходящей job_name, создаем.
И перезапускаем сервис:
systemctl restart prometheus
NGINX exporter
С помощью nginx-prometheus-exporter можно получить данные о работе веб-сервера nginx. По умолчанию, работает на порту 9113.
Загрузка и установка
Для сборки исходника нам нужны пакеты go, git и curl. Устанавливаем их командой:
apt install git golang curl || yum install git golang curl
Скачиваем проект nginx-prometheus-exporter :
git clone https://github.com/nginxinc/nginx-prometheus-exporter.git
Переходим в загруженный каталог:
cd nginx-prometheus-exporter
Выполняем сборку:
go build
В результате будет создан бинарник nginx-prometheus-exporter . Перенесем его в /usr/local/bin :
mv nginx-prometheus-exporter /usr/local/bin/
Выходим из каталога проекта и удаляем загруженную ранее папку:
cd ../ && rm -rf nginx-prometheus-exporter
Настройка NGINX
Для получения статистики и метрик от nginx, необходимо настроить встроенную страницу server-status . Находим незанятый порт на сервере, например:
ss -tunlp | grep :8080
* данной командой мы увидим, занят ли порт 8080.
Если система возвращает пустую строку, значит порт свободен и мы будем использовать его. Если порт занят, пробуем поискать другие незанятые порты. Дальне по инструкции предполагается, что мы настраиваем 8080.
Создаем конфигурационный файл nginx:
vi /etc/nginx/conf.d/stats.conf
server {
listen 8080;
server_name _;
access_log off;
location /server-status {
stub_status on;
}
}
Проверяем конфигурацию и применяем ее:
nginx -t && nginx -s reload
Должна заработает страница статистики. Можно проверить ее работоспособность командой:
curl http://127.0.0.1:8080/server-status
Мы можем увидеть что-то на подобие:
Active connections: 320
server accepts handled requests
498121 498121 15945169
Reading: 0 Writing: 1 Waiting: 319
Переходим к запуску экспортера.
Запуск и проверка
Создаем файл для автозапуска экспортера:
vi /etc/systemd/system/nginx_exporter.service
[Unit]
Description=Node Exporter Service
After=network.target
[Service]
User=nodeusr
Group=nodeusr
Type=simple
ExecStart=/usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri=http://127.0.0.1:8080/server-status
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
* обратите внимание, что экспортер будет запрашивать статистические данные через поднятую нами страницу /server-status .
Создаем учетную запись nodeusr :
useradd —no-create-home —shell /bin/false nodeusr
Разрешаем и стартуем сервис nginx_exporter :
systemctl enable nginx_exporter
systemctl start nginx_exporter
Можно проверить статус службы и прослушивание порта 9113:
systemctl status nginx_exporter
ss -tunlp | grep :9113
Также можно получить набор метрик:
curl 127.0.0.1:9113/metrics
Экспортер готов к работе.
Настройка Prometeus Server
Чтобы добавить экспортер в мониторинг Prometeus на сервере открываем файл:
vi /etc/prometheus/prometheus.yml
Добавляем секцию:
— job_name: ‘nginx’
scrape_interval: 5s
static_configs:
— targets:
— 192.168.0.11:9113
* где 192.168.0.11 — адрес сервера, где мы установили и настроили экспортер. Обратите внимание, что у вас уже может быть секция для мониторинга nginx — тогда можно не создавать новую, а добавить в список новый сервер с экспортером nginx.
Перезапускаем прометеус:
systemctl restart prometheus
PostgreSQL Exporter
Экспортер позволяет получать метрики для СУБД PostgreSQL. Последний должен быть уже установлен в системе.
Загрузка и установка
Клонируем проект экспортера с гитхаба:
git clone https://github.com/prometheus-community/postgres_exporter.git
Переходим в загруженный каталог:
cd postgres_exporter
Собираем файлы пакета из исходников:
make build
Если мы получили ошибку:
go: go.mod requires go >= x.x.x (running go x.x.x; GOTOOLCHAIN=local)
… значит, версия нашего go не достаточно свежая. Чтобы решить проблему переходим на официальную страницу загрузки golang и смотрим последнюю версию. Создаем переменную:
GO_VER=1.24.1
* где 1.24.1 — версия, которая будет устанавливаться на наш компьютер.
Скачиваем исходник:
curl -sLO https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz
И устанавливаем GO:
tar -xzf go*.linux-amd64.tar.gz -C /usr/local && rm -f go*.linux-amd64.tar.gz
Теперь можно выполнить сборку еще раз:
PATH=/usr/local/go/bin:$PATH make build
Полученный бинарник postgres_exporter переносим в каталог bin :
mv postgres_exporter /usr/local/bin/postgres_exporter
Запуск и проверка
Для автоматического старта экспортера, создадим юнит в systemd:
vi /etc/systemd/system/postgres_exporter.service
[Unit]
Description=Node Exporter Service
After=network.target
[Service]
EnvironmentFile=/etc/sysconfig/postgres_exporter
User=postgres
Group=postgres
Type=simple
ExecStart=/usr/local/bin/postgres_exporter
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
В данном юните мы используем EnvironmentFile . Создадим и его:
vi /etc/sysconfig/postgres_exporter
DATA_SOURCE_NAME=’user=postgres host=/run/postgresql/ sslmode=disable’
* где host — путь до каталога, где располагается сокетный файл postgresql.
Обратите внимание, что для разных поставок PostgreSQL характерно разное расположение сокетного файла. Как правило, это пути /var/run/postgresql , /run/postgresql или /tmp .
В крайнем случае, можно попробовать найти сокет с помощью команды find :
find / -name .s.PGSQL.5432
Разрешаем автозапуск для юнита и стартуем его:
systemctl enable postgres_exporter
systemctl start postgres_exporter
Проверить статус, а также прослушиваемый порт можно командами:
systemctl status postgres_exporter
ss -tunlp | grep 9187
Также можем попробовать получить метрики:
curl 127.0.0.1:9187/metrics
Настройка Prometeus Server
Чтобы сервер увидел метрики PostgreSQL, добавим job_name:
vi /etc/prometheus/prometheus.yml
— job_name: ‘postgresql’
scrape_interval: 5s
static_configs:
— targets:
— 192.168.0.11:9187
И перезапустим службу прометеуса:
systemctl restart prometheus
Blackbox exporter
Экспортер предназначен для получения метрик с сайтов. По умолчанию, работает на порту 9115.
Загрузка и установка
Заходим на страницу загрузки и смотрим актуальную версию blackbox_exporter. Создаем переменную со значением данной версии:
BE_VER=0.25.0
Теперь используем ее для загрузки node_exporter:
curl -sLO https://github.com/prometheus/blackbox_exporter/releases/download/v${BE_VER}/blackbox_exporter-${BE_VER}.linux-amd64.tar.gz
Распакуем скачанный архив:
tar -zxf blackbox_exporter-*.linux-amd64.tar.gz
Перейдем в каталог с распакованными файлами:
cd blackbox_exporter-*.linux-amd64
Копируем исполняемый файл в bin:
cp blackbox_exporter /usr/local/bin/
Выходим из каталога и удаляем исходник:
cd .. && rm -rf blackbox_exporter-*.linux-amd64/ && rm -f blackbox_exporter-*.linux-amd64.tar.gz
Настройка
Чтобы команда запуска не вернула ошибку, необходимо указать конфигурационный файл для Blackbox exporter. Создем для него каталог:
mkdir -p /etc/blackbox
После сам файл:
vi /etc/blackbox/blackbox.yml
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: [«HTTP/1.1», «HTTP/2.0»]
valid_status_codes: [200]
method: GET
no_follow_redirects: true
fail_if_ssl: false
fail_if_not_ssl: false
fail_if_body_matches_regexp:
— «Could not connect to database»
tls_config:
insecure_skip_verify: false
preferred_ip_protocol: «ip4»
ip_protocol_fallback: false
* во многом, данный пример взят с официальной страницы на Github .
Запуск и проверка
Создаем пользователя blackusr:
useradd —no-create-home —shell /bin/false blackbox
Задаем владельца для исполняемого файла:
chown -R blackbox:blackbox /usr/local/bin/blackbox_exporter
Создаем файл blackbox_exporter.service в systemd:
vi /etc/systemd/system/blackbox_exporter.service
[Unit]
Description=Blackbox Exporter Service
After=network.target
[Service]
User=blackbox
Group=blackbox
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter —config.file=/etc/blackbox/blackbox.yml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Разрешаем автозапуск:
systemctl enable blackbox_exporter
Запускаем службу:
systemctl start blackbox_exporter
Проверим работу с помощью утилиты curl:
curl 127.0.0.1:9115/metrics
На экране мы должны увидеть метрики, на подобие:
…process_open_fds 9
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 1.27000576e+09
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes 1.8446744073709552e+19
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code=»200″} 0
promhttp_metric_handler_requests_total{code=»500″} 0
promhttp_metric_handler_requests_total{code=»503″} 0
Установка завершена.
Настройка Prometeus Server
Чтобы сервер мог собрать данные по сайтам, добавляем в конфигурационный файл:
vi /etc/prometheus/prometheus.yml
scrape_configs:
…
— job_name: ‘blackbox’
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
— targets:
— https://remontka.com
relabel_configs:
— source_labels: [__address__]
target_label: __param_target
— source_labels: [__param_target]
target_label: instance
— target_label: __address__
replacement: localhost:9115
* где в качестве объекта наблюдения был добавлен сайт https://remontka.com .
И перезапускаем сервис:
systemctl restart prometheus