Практикум — Alloy, Beyla, Faro и Pyroscope
Практикум, шаг 8 из 9. Назад — Loki и Tempo. Дальше — OpenTelemetry и k6.
Зачем отдельные агенты
Раньше стек собирали из Prometheus Agent, Promtail, OpenTelemetry Collector и Grafana Agent. Grafana Alloy — единый конфигуратор на языке River, который заменяет эту связку.
| Компонент | Задача |
|---|---|
| Alloy | Scrape, remote_write, логи → Loki, OTLP → Tempo |
| Beyla | eBPF — HTTP/gRPC метрики и трейсы без изменения кода |
| Faro | Real User Monitoring — ошибки и performance в браузере |
| Pyroscope | Continuous profiling — CPU, memory, flame graphs |
Метрики и нагрузку с этих агентов сводят на дашбордах Grafana — Практикум Grafana — шаг 4; маршрут — о разделе.

Документация — 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; примеры HTTP-метрик — галерея PromQL.

Ограничения — только поддерживаемые протоколы и 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 — профилирование
Pyroscope (и grafana-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 / VM | Alloy |
| Legacy binary без SDK | Beyla |
| React/Vue ошибки пользователей | Faro |
| Утечки CPU / горячие функции | Pyroscope |
| Полный контроль телеметрии | OpenTelemetry (шаг 9) |
Чек-лист
- Alloy UI открывается, scrape targets видны
- (Linux) Beyla отдаёт метрики на :8999
- (Опционально) Faro SDK шлёт событие в collector
- (Опционально) flame graph в Pyroscope
Дальше — финальный стенд с OTel и k6.