Перейти к основному содержимому

Практикум — Alloy, Beyla, Faro и Pyroscope

Инженеру Разработчику

Практикум, шаг 8 из 9. Назад — Loki и Tempo. Дальше — OpenTelemetry и k6.


Зачем отдельные агенты

Раньше стек собирали из Prometheus Agent, Promtail, OpenTelemetry Collector и Grafana Agent. Grafana Alloy — единый конфигуратор на языке River, который заменяет эту связку.

КомпонентЗадача
AlloyScrape, remote_write, логи → Loki, OTLP → Tempo
BeylaeBPF — HTTP/gRPC метрики и трейсы без изменения кода
FaroReal User Monitoring — ошибки и performance в браузере
PyroscopeContinuous profiling — CPU, memory, flame graphs

Метрики и нагрузку с этих агентов сводят на дашбордах Grafana — Практикум Grafana — шаг 4; полный маршрут — о разделе.

Дашборд Grafana — CPU, сеть и производительность хоста под мониторингом

Документация — Grafana Alloy, Beyla, Faro, Pyroscope.


Grafana Alloy — один агент

Пример alloy/config.alloy — scrape Prometheus + forward OTLP:

prometheus.scrape "default" {
targets = [{"__address__" = "localhost:9090"}]
forward_to = [prometheus.remote_write.default.receiver]
}

prometheus.remote_write "default" {
endpoint {
url = "http://prometheus:9090/api/v1/write"
}
}

otelcol.receiver.otlp "default" {
grpc { endpoint = "0.0.0.0:4317" }
output {
traces = [otelcol.exporter.otlp.tempo.input]
}
}

otelcol.exporter.otlp "tempo" {
client {
endpoint = "tempo:4317"
tls { insecure = true }
}
}

Compose:

alloy:
image: grafana/alloy:v1.4.0
ports:
- "12345:12345"
- "4317:4317"
volumes:
- ./alloy/config.alloy:/etc/alloy/config.alloy:ro
command: run /etc/alloy/config.alloy --server.http.listen-addr=0.0.0.0:12345

UI Alloy — http://localhost:12345 — граф компонентов и debug.

Alloy может заменить promtail в шаге 7:

loki.source.file "varlogs" {
targets = [{__path__ = "/var/log/*.log", job = "varlogs"}]
forward_to = [loki.write.default.receiver]
}

loki.write "default" {
endpoint { url = "http://loki:3100/loki/api/v1/push" }
}

Beyla — observability через eBPF

Grafana Beyla — daemon с eBPF, который видит HTTP/gRPC на уровне ядра и экспортирует RED-метрики + OTLP traces.

Запуск (Linux, нужны права CAP_BPF / privileged):

beyla:
image: grafana/beyla:1.7.0
privileged: true
pid: host
environment:
BEYLA_OPEN_PORT: "8080"
BEYLA_OTLP_TRACES_ENDPOINT: "tempo:4317"
BEYLA_PROMETHEUS_PORT: "8999"

Prometheus scrape beyla:8999. Код приложения менять не нужно — подходит для legacy и быстрого POC. RED-метрики Beyla добавляйте на дашборды Grafana — шаг 4.

Мониторинг метрик нагрузки в Grafana — CPU и сеть хоста

Ограничения — только поддерживаемые протоколы и Linux; для полного контроля labels лучше SDK (шаг 9).


Faro — мониторинг фронтенда

Grafana Faro (Web SDK) отправляет ошибки JS, Web Vitals, session data в Grafana Cloud Frontend Observability или self-hosted collector. Визуализация RUM и backend-метрик — в одном UI Grafana (шаг 4).

Минимальная инициализация в SPA:

import { initializeFaro } from '@grafana/faro-web-sdk';

initializeFaro({
url: 'http://localhost:12347/collect',
app: { name: 'my-shop', version: '1.0.0' },
});

Alloy или Faro Collector принимает события и связывает их с backend trace через trace_id в заголовках.

Use case — «пользователь видит белый экран», а backend metrics зелёные.


Pyroscope — профилирование

Pyroscopegrafana-pyroscope в Grafana 11+) хранит flame graphs. Приложение или Alloy отправляет профили; в Grafana — Profiles datasource, связь с traces через span profiles.

Docker:

pyroscope:
image: grafana/pyroscope:1.8.0
ports:
- "4040:4040"

SDK (Go пример):

import "github.com/grafana/pyroscope-go"

pyroscope.Start(pyroscope.Config{
ApplicationName: "myapp",
ServerAddress: "http://pyroscope:4040",
})

Сценарий — p99 latency вырос, CPU в норме → профиль показывает lock contention.


Как выбрать инструмент

СитуацияИнструмент
Единый agent в K8s / VMAlloy
Legacy binary без SDKBeyla
React/Vue ошибки пользователейFaro
Утечки CPU / горячие функцииPyroscope
Полный контроль телеметрииOpenTelemetry (шаг 9)

Чек-лист

  • Alloy UI открывается, scrape targets видны
  • (Linux) Beyla отдаёт метрики на :8999
  • (Опционально) Faro SDK шлёт событие в collector
  • (Опционально) flame graph в Pyroscope

Дальше — финальный стенд с OTel и k6.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").