← Назад к вопросам

Как экспортёры отдают метрики

2.3 Middle🔥 181 комментариев
#Мониторинг и логирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы экспорта метрик в мониторинге

Экспорт метрик — это процесс предоставления данных о состоянии приложений, инфраструктуры или услуг внешним системам мониторинга (например, Prometheus, VictoriaMetrics, Datadog). Как DevOps-инженер с более чем 10 годами опыта, я выделяю несколько ключевых подходов, которые применяются в современных экосистемах.

Основные паттерны экспорта метрик

  1. Pull-модель (вытягивание): Система мониторинга сама опрашивает целевые приложения или экспортёры через HTTP(S)-эндпоинты.
  2. Push-модель (выталкивание): Приложения или агенты активно отправляют метрики в систему мониторинга, часто через протоколы вроде Graphite, StatsD или HTTP.
  3. Гибридная модель: Комбинация подходов, например, использование Push-гейтвея (Pushgateway) в Prometheus для задач, которые не могут обслуживать долгоживущие HTTP-xeндпоинты.

Распространённые технологии и примеры

1. Prometheus Pull-модель

Приложение или экспортёр (exporter) предоставляет метрики в формате Prometheus на определённом порту (например, :9100/metrics). Prometheus сервер периодически сканирует этот эндпоинт.

Пример простого HTTP-сервера на Go, отдающего метрики:

package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
    // Создание кастомной метрики
    opsProcessed := prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "myapp_processed_ops_total",
            Help: "Total number of processed operations",
        },
        []string{"service"},
    )
    prometheus.MustRegister(opsProcessed)
    opsProcessed.WithLabelValues("api").Inc()

    // Регистрация хендлера для метрик
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}

2. Экспортёры для стороннего ПО

Для ПО, которое не поддерживает Prometheus-формат "из коробки", используются отдельные экспортёры. Они подключаются к целевому приложению (например, через JMX для Java, SNMP для сетевого оборудования) и трансформируют метрики.

Запуск Node Exporter для сбора метрик ОС:

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

3. Push-модель через StatsD/Graphite

Приложение отправляет метрики через легковесный UDP/TCP-протокол.

Пример отправки метрики через StatsD (Python):

import statsd

client = statsd.StatsClient(host='statsd.example.com', port=8125)
client.incr('myapp.request.count')  # Инкремент счётчика
client.timing('myapp.request.duration', 320)  # Отправка времени выполнения

4. Использование Pushgateway (Prometheus)

Для кратковременных задач (например, Cron jobs) метрики отправляются в Pushgateway, который затем становится целью для Pull-сбора.

Отправка метрик в Pushgateway через curl:

echo "my_job_duration_seconds 23.7" | curl --data-binary @- http://pushgateway.example.com:9091/metrics/job/my_job/instance/my_instance

5. Библиотеки и агенты

Почти все языки программирования имеют библиотеки для экспорта метрик (например, prometheus/client_golang для Go, micrometer для Java). Также используются агенты, такие как Telegraf, который может собирать метрики из разнообразных источников (базы данных, лог-файлы, системные метрики) и отправлять их в различные системы.

Конфигурация Telegraf для сбора CPU-метрик и отправки в Prometheus:

[[inputs.cpu]]
  percpu = true
  totalcpu = true

[[outputs.prometheus_client]]
  listen = ":9273"

Ключевые рекомендации по экспорту метрик

  • Используйте стандартные форматы (Prometheus text format, OpenMetrics) для обеспечения совместимости.
  • Всегда добавляйте labels (тэги) для метрик, чтобы обогащать их контекстом (например, environment="prod", service="payment").
  • Документируйте метрики: Используйте аннотации в Kubernetes или отдельные файлы, чтобы описать смысл каждой метрики.
  • Контролируйте количество метрик: Слишком большое количество может привести к проблемам с производительностью системы мониторинга.
  • Настройте Service Discovery в Prometheus (через Kubernetes, Consul, файлы) для автоматического обнаружения целей сбора метрик.
  • Обеспечьте безопасность: Используйте TLS, аутентификацию и сетевые политики для защиты эндпоинтов с метриками.

Выбор метода экспорта зависит от архитектуры приложения, требований к безопасности и возможностей системы мониторинга. В микросервисных средах доминирует Pull-модель Prometheus, тогда как для legacy. систем часто используются гибридные подходы с экспортёрами или Push-агентами.