Короткий ответ
Exporter — это отдельный процесс, который собирает метрики из системы или приложения, не умеющего отдавать их в формате Prometheus, и публикует их на HTTP-эндпоинте /metrics в нужном текстовом формате; node_exporter делает это для метрик операционной системы (CPU, память, диск, сеть).
Как это работает подробнее
exporter читает данные из своего источника (файлы /proc и /sys в случае node_exporter, API стороннего сервиса в случае других exporter'ов, например postgres_exporter или blackbox_exporter) и преобразует их в строки формата Prometheus exposition format, которые затем забирает scrape.
Пример кода
commands.sh
# Запуск node_exporter локально
./node_exporter --web.listen-address=":9100"
# Проверка, что эндпоинт отдаёт метрики
curl -s http://localhost:9100/metrics | grep node_memory_MemAvailable_bytesЧто использовать на практике
- Практика. exporter'ы ставят как отдельный процесс или sidecar рядом с тем, что нужно мониторить — на каждый узел кластера обычно разворачивают один node_exporter (часто как DaemonSet в Kubernetes). Для приложений, которые сами умеют отдавать метрики (например, через клиентскую библиотеку Prometheus), отдельный exporter не нужен — это называется "нативная инструментация".
- Практика. В выводе должна появиться строка вида
node_memory_MemAvailable_bytes 1.234e+09— это значение, которое Prometheus будет забирать по scrape и которое можно использовать в дашборде доступной памяти узла.
Подводные камни
- Частые ошибки. пытаться мониторить приложение через node_exporter, который видит только метрики ОС, а не внутреннюю логику приложения; забывать закрыть доступ к порту exporter'а (обычно 9100 и похожие) снаружи периметра, так как эти метрики могут раскрывать внутренние детали инфраструктуры.