Практикум Prometheus — экспортёры и инструментирование
Exporters — метрики без правки кода
Exporter — отдельный процесс с HTTP /metrics, который переводит статистику системы в формат Prometheus. Сервер pull-ит exporter так же, как приложение. Собранные метрики визуализируют в Grafana — Практикум Grafana — шаг 4, полный маршрут — о разделе.
Каталог — Exporters and integrations.
На Windows для метрик хоста используйте windows_exporter (процесс на хосте, не в Linux-контейнере). На Linux — node_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 Service | PowerShell от администратора; 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
- Импорт вручную: dashboard ID 14694 (Windows Exporter Dashboard).
- Или provisioning JSON в папку Windows — см. шаг 2.

Файл .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 метрики долгоживущих сервисов — теряется семантика 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_exporter | Windows (CPU, RAM, disk, net) |
node_exporter | Linux/Unix хост |
postgres_exporter | PostgreSQL |
mysqld_exporter | MySQL |
redis_exporter | Redis |
nginx-prometheus-exporter | Nginx |
snmp_exporter | Сетевое оборудование |
cadvisor | Контейнеры |
Чек-лист
- (Windows)
windows_exporterна хосте, targetwindowsUP, дашборд 14694 - (Linux)
node_exporterв targets UP, дашборд 1860 - Приложение отдаёт
/metricsс counterhttp_requests_total - (Опционально) blackbox probe внешнего URL
Дальше — Alertmanager и Grafana Alerting.
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Два инструмента, русский UI Grafana 12, windows_exporter, UI-шпаргалки, targets, Explore, дашборд Windows и типичные сбои. Pull-модель, компоненты Prometheus, временные ряды, метки, exporters и Pushgateway — основа перед установкой. Docker Compose на Windows и Linux, Grafana 12 и ru-RU, windows_exporter, provisioning, health check и типичные сбои первого запуска. Counter, Gauge, Histogram, Summary, функции rate и increase, агрегации и типовые запросы для дашбордов. Проверка provisioned datasource, первая панель up, переменные, Explore, импорт дашбордов — после шага 2. Alerting rules, Alertmanager, маршрутизация, inhibition, Grafana Unified Alerting и туториал по алертам. PLG-расширение — логи в Loki, трейсы в Tempo, долгосрочные метрики в Mimir, LogQL и корреляция в Grafana. Grafana Alloy как единый агент, eBPF-метрики Beyla, RUM Faro и профилирование Pyroscope. OpenTelemetry Collector, инструментирование сервиса, нагрузочный тест k6 с метриками и полный docker-compose observability lab.Как пользоваться
Практикум Prometheus — архитектура и модель данных
Практикум Prometheus — установка и первые метрики
Практикум Prometheus — типы метрик и PromQL
Практикум Grafana — источники данных и дашборды
Практикум Prometheus — Alertmanager и Grafana Alerting
Практикум — Loki, Tempo и Mimir
Практикум — Alloy, Beyla, Faro и Pyroscope
Практикум — OpenTelemetry, k6 и итоговый стенд