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

Что такое exporter в Prometheus?

1.3 Junior🔥 222 комментариев
#Мониторинг и логирование

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

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

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

Что такое Exporter в Prometheus?

В архитектуре Prometheus, exporter — это специализированный сервер или библиотека, предназначенная для предоставления метрик из различных систем, сервисов или приложений в формате, который Prometheus может напрямую собирать (scrape). Он выступает в роли "переводчика" или "адаптера", преобразующего внутренние данные системы (например, логи, статусы, счетчики) в стандартные метрики Prometheus, которые затем экспонируются через HTTP-эндпоинт, обычно по пути /metrics.

Ключевые функции и роль Exporter

  • Преобразование данных: Многие системы (базы данных, веб-серверы, оборудование) имеют свои собственные форматы метрик или интерфейсы управления (CLI, API). Exporter "переводит" эти данные в формат Prometheus.
  • Стандартизация: Exporter предоставляет метрики в едином, хорошо структурированном формате, что позволяет Prometheus собирать их единообразно, независимо от источника.
  • Децентрализация метрик: В отличие от некоторых систем мониторинга, где агент централизованно собирает всё, в Prometheus каждый экспортер отвечает только за свои метрики, что повышает надежность и упрощает развертывание.
  • Отделение логики сбора: Exporter не отправляет данные активно (push), а лишь делает их доступными. Активный сбор (pull) выполняет сам Prometheus server, что является фундаментальным принципом его архитектуры.

Типы Exporters

Exporters можно классифицировать по их назначению и способу работы:

  1. Официальные и общепринятые exporters: Разрабатываются и поддерживаются сообществом Prometheus или компаниями-владельцами ПО. Например:
    *   `node_exporter` — для метрик операционной системы (CPU, память, диск, сеть).
    *   `blackbox_exporter` — для проверки доступности сетевых сервисов (HTTP, TCP, ICMP).
    *   `mysqld_exporter`, `postgres_exporter` — для метрик баз данных.

  1. Custom exporters / Интеграция в приложение: Наиболее предпочтительный подход — когда приложение само предоставляет метрики Prometheus через библиотеку на языке его разработки. Например, для Java — библиотека simpleclient, для Go — prometheus/client_golang.
    Пример минимального экспортера на Go с использованием официальной библиотеки:
```go
package main

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

var (
    requestsTotal = prometheus.NewCounter(
        prometheus.CounterOpts{
            Name: "myapp_requests_total",
            Help: "Total number of HTTP requests.",
        },
    )
)

func main() {
    prometheus.MustRegister(requestsTotal)

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        requestsTotal.Inc()
        w.Write([]byte("Hello World"))
    })
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}
```

3. Exporters для сторонних систем (Pushgateway как исключение): Для мониторинга систем, которые не могут предоставлять метрики долговременно (например, кратковременные задачи, batch jobs), используется Pushgateway. Он позволяет таким задачам "отправить" (push) свои финальные метрики в промежуточное хранилище, которое затем будет собрано Prometheus. Однако это считается исключением из pull-модели.

Как работает взаимодействие?

  1. Exporter запускается как отдельный процесс или интеграция внутри приложения и начинает слушать HTTP-порт.
  2. Он собирает метрики из целевой системы (например, запрашивает статус через API, парсит логи, вызывает системные команды).
  3. Эти данные преобразуются в метрики Prometheus (типы Counter, Gauge, Histogram, Summary) и кэшируются.
  4. Когда Prometheus server, согласно своей конфигурации (scrape_configs в prometheus.yml), выполняет периодический запрос (scrape) к эндпоинту /metrics экспортера, тот возвращает текущие значения метрик в текстовом формате.
  5. Prometheus парсит ответ, сохраняет метрики в своем временном хранилище и может использовать их для правил (rules), алертов (alerts) и визуализации (через Grafana).

Конфигурация Prometheus для сбора метрик с node_exporter:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.10:9100', '192.168.1.11:9100']

Таким образом, exporter является критически важным компонентом в экосистеме Prometheus, обеспечивающим универсальный и расширяемый способ мониторинга практически любой системы, соблюдая при этом фундаментальную pull-модель сбора данных.