Экспортеры и endpoint /metrics
Урок про экспортеры — мост между системой и Prometheus — и про формат /metrics.
Экспортер — это маленький сервис, который снимает метрики с некой системы и отдаёт их в формате Prometheus по адресу
/metrics.
Prometheus умеет читать только свой текстовый формат метрик. Но операционная система, база данных или железо его не отдают. Экспортер решает эту проблему: он переводит «родные» данные системы в понятный Prometheus вид.
Зачем нужны экспортеры
Допустим, вы хотите видеть загрузку CPU и память сервера. Сама Linux-система не выставляет HTTP-endpoint с метриками. Запускаете node_exporter — он читает /proc и /sys и публикует сотни метрик о железе и ОС на порту 9100.
# Запуск node_exporter (упрощённо)
./node_exporter --web.listen-address=":9100"
# Проверяем, что метрики отдаются
curl -s http://localhost:9100/metrics | head -n 5Вывод:
# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 184523.41
node_cpu_seconds_total{cpu="0",mode="user"} 8421.07
node_memory_MemAvailable_bytes 5.21e+09Популярные экспортеры
- node_exporter — метрики хоста: CPU, память, диск, сеть.
- blackbox_exporter — проверки извне: ping, HTTP, TLS-сертификаты.
- postgres_exporter, redis_exporter — метрики конкретных баз данных.
- cAdvisor — метрики контейнеров.
Формат /metrics
Это простой текст: по одной метрике на строку, перед группами — строки # HELP и # TYPE. Лейблы перечисляются в фигурных скобках, значение — после пробела.
# HELP app_requests_total Total HTTP requests.
# TYPE app_requests_total counter
app_requests_total{method="GET",code="200"} 1027
app_requests_total{method="POST",code="500"} 3Как работает под капотом
Экспортер — это обычный HTTP-сервер. На каждый запрос /metrics он либо читает данные «на лету» (как node_exporter из /proc), либо отдаёт значения, накопленные клиентской библиотекой. Prometheus периодически делает scrape этого endpoint и складывает значения в TSDB. Экспортер сам ничего не хранит во времени — он лишь показывает текущий снимок.
[ОС/БД/железо] -> [экспортер] --/metrics--> [scrape Prometheus]Частые ошибки
- Запускать node_exporter в контейнере без доступа к хосту. Тогда он покажет метрики контейнера, а не сервера.
- Открывать /metrics в публичный интернет. Метрики могут раскрывать внутреннее устройство — закрывайте доступ.
- Ждать историю от экспортера. Он отдаёт только текущее значение; историю строит Prometheus.
Итог
- Экспортер переводит данные системы в формат Prometheus и отдаёт их по
/metrics. - node_exporter публикует метрики хоста на порту 9100.
- Формат /metrics — простой текст со строками HELP/TYPE и значениями с лейблами.