Перейти к основному содержимому

Практикум Prometheus — экспортёры и инструментирование

Инженеру Разработчику

Практикум, шаг 5 из 9. Назад — Grafana. Дальше — алертинг.


Exporters — метрики без правки кода

Exporter — отдельный процесс с HTTP /metrics, который переводит статистику системы в формат Prometheus. Сервер pull-ит exporter так же, как приложение. Собранные метрики визуализируют в Grafana — Практикум Grafana — шаг 4, полный маршрут — о разделе.

Каталог — Exporters and integrations.

Windows vs Linux

На Windows для метрик хоста используйте windows_exporter (процесс на хосте, не в Linux-контейнере). На Linuxnode_exporter (часто в Docker). Оба отдают /metrics; в prometheus.yml — разные job_name и порты.


windows_exporter — на Windows

windows_exporter читает счётчики Windows (WMI / Performance Counters) и отдаёт Prometheus-метрики с префиксом windows_ (CPU, память, диски, сеть).

Схема

Windows Host
windows_exporter :<PORT_WIN_EXP>/metrics

│ scrape host.docker.internal:<PORT_WIN_EXP>
Prometheus (в Docker)

В docker-compose.yml у сервиса prometheus:

extra_hosts:
- "host.docker.internal:host-gateway"

В prometheus.yml:

- job_name: windows
static_configs:
- targets:
- host.docker.internal:<PORT_WIN_EXP>
relabel_configs:
- source_labels: [__address__]
target_label: instance
replacement: windows-host

Выберите свободный <PORT_WIN_EXP> (например 9182, если 9100 занят).

Установка (PowerShell)

Скрипт в каталоге проекта scripts/install-windows-exporter.ps1:

РежимКомандаКогда
Portable.\install-windows-exporter.ps1 -Mode PortableБыстрый старт без admin; после reboot процесс нужно запустить снова
Service.\install-windows-exporter.ps1 -Mode ServicePowerShell от администратора; MSI, Windows-сервис, автозапуск

Параметры по умолчанию: версия 0.31.6, порт 9182. Бинарник скачивается в tools/ (добавьте в .gitignore).

Проверка:

curl.exe -s -o NUL -w "%{http_code}\n" http://localhost:<PORT_WIN_EXP>/metrics
curl.exe -X POST http://localhost:<PORT_PROM>/-/reload

Prometheus → Targets — job windows UP. Примеры метрик: windows_cpu_time_total, windows_logical_disk_free_bytes, windows_os_physical_memory_free_bytes.

Grafana

Дашборд Grafana после windows_exporter — мониторинг CPU, памяти и сетевой нагрузки

Скрипт и JSON — кодировка

Файл .ps1 с кириллицей в Write-Host на PowerShell 5.1 может дать TerminatorExpectedAtEndOfString — держите сообщения скрипта на английском или сохраняйте UTF-8 без BOM. JSON дашборда для provisioning — тоже без BOM, иначе Grafana не загрузит файл (ошибка invalid character 'ï').


node_exporter — метрики хоста Linux

node_exporter:
image: prom/node-exporter:v1.8.2
ports:
- "9100:9100"
pid: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'

В prometheus.yml:

- job_name: node
static_configs:
- targets: ['node_exporter:9100']

Проверка — curl http://localhost:9100/metrics | head. В Grafana импортируйте dashboard 1860.


blackbox_exporter — проверки снаружи

Probing HTTP, TCP, ICMP, DNS с точки зрения мониторинга (как пользователь снаружи). Результаты probe отображайте на дашбордах Grafana — шаг 4.

- job_name: blackbox
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://prometheus.io
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115

Метрика probe_success — 1 при успехе.


Client libraries — метрики из кода

Instrumenting client libraries — официальные клиенты для Go, Java, Python, Ruby и др.

Пример Python (Flask + prometheus_client):

from flask import Flask
from prometheus_client import Counter, generate_latest, CONTENT_TYPE_LATEST

app = Flask(__name__)
REQUESTS = Counter("http_requests_total", "Total HTTP requests", ["method", "status"])

@app.route("/metrics")
def metrics():
return generate_latest(), 200, {"Content-Type": CONTENT_TYPE_LATEST}

@app.route("/")
def index():
REQUESTS.labels(method="GET", status="200").inc()
return "ok"

Prometheus scrape:

- job_name: myapp
static_configs:
- targets: ['myapp:8080']

Приложение на хосте Windows, а Prometheus в Docker — target host.docker.internal:<порт> (шаг 2). На Linux в Compose добавьте extra_hosts: ["host.docker.internal:host-gateway"] к сервису prometheus.

Правила именования — суффикс _total для counter, _seconds для времени, _bytes для размеров.


Pushgateway — batch и CI

Краткоживущие job (backup, ETL, pipeline) не успевают быть опрошенными. Job push-ит метрики в Pushgateway; Prometheus scrape Pushgateway.

echo 'batch_job_last_success 1' | curl --data-binary @- http://pushgateway:9091/metrics/job/backup/instance/nightly
Pushgateway — не универсальный push

Не отправляйте в Pushgateway метрики долгоживущих сервисов — теряется семантика restart и instance. Только batch/CI.


Service discovery (кратко)

В Kubernetes targets часто берут из pod annotations:

scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod

Relabeling превращает метаданные K8s в labels namespace, pod, container.


Карта экспортёров

ExporterНазначение
windows_exporterWindows (CPU, RAM, disk, net)
node_exporterLinux/Unix хост
postgres_exporterPostgreSQL
mysqld_exporterMySQL
redis_exporterRedis
nginx-prometheus-exporterNginx
snmp_exporterСетевое оборудование
cadvisorКонтейнеры

Чек-лист

  • (Windows) windows_exporter на хосте, target windows UP, дашборд 14694
  • (Linux) node_exporter в targets UP, дашборд 1860
  • Приложение отдаёт /metrics с counter http_requests_total
  • (Опционально) blackbox probe внешнего URL

Дальше — Alertmanager и Grafana Alerting.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").