До Alloy в стеке приходилось держать отдельно Grafana Agent для метрик, Promtail для логов и, если нужны трейсы, ещё OpenTelemetry Collector. Grafana Alloy — один процесс, который собирает и метрики, и логи, и трейсы, и профили одновременно.

Конфиг — не YAML, а свой декларативный язык (файлы .alloy), построенный из компонентов: каждый компонент выполняет одну задачу и описывается блоком с аргументами внутри:

COMPONENT_NAME "label" {
  attribute = "value"
}

Основная идея — компоненты соединяются друг с другом через экспорты: один компонент публикует значение, другой на него ссылается напрямую в конфиге, без промежуточных переменных окружения.

Минимальный рабочий пример — сбор Prometheus-метрик и отправка их в удалённое хранилище:

prometheus.remote_write "default" {
  endpoint {
    url = "http://localhost:9009/api/v1/push"
  }
}

prometheus.scrape "example" {
  targets = [{
    __address__ = "127.0.0.1:9100",
  }]

  forward_to = [prometheus.remote_write.default.receiver]
}

prometheus.scrape собирает метрики с node_exporter на 9100-м порту и передаёт их (forward_to) на вход компонента prometheus.remote_write.default — обращение идёт через component_type.label.export_name, а не через ID или имя файла.

Порт 9009 в примере — это порт по умолчанию у Grafana Mimir, /api/v1/push — эндпоинт remote_write, совместимый с обычным Prometheus.

Практическая выгода — не философская “всё в одном”, а конкретная: одна точка обновления версии, один процесс в systemd вместо трёх, и общие для всех типов телеметрии механизмы service discovery (discovery.kubernetes и подобные компоненты можно переиспользовать между сбором метрик и логов, а не настраивать discovery отдельно в Prometheus и отдельно в Promtail).

#prometheus #grafana #lgtm