feat: add alloy
This commit is contained in:
parent
8f8827aba1
commit
dbff6e4793
4 changed files with 185 additions and 0 deletions
33
docker/alloy/.env.example
Normal file
33
docker/alloy/.env.example
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# =============================================================================
|
||||
# Grafana Alloy — Centralized OpenTelemetry Pipeline
|
||||
# =============================================================================
|
||||
# Domain target: https://alloy.ld50.xyz
|
||||
# Docs: https://grafana.com/docs/alloy/latest/
|
||||
# Image: grafana/alloy
|
||||
# =============================================================================
|
||||
|
||||
# -- Image Tag -----------------------------------------------------------------
|
||||
# Use a stable version tag from https://github.com/grafana/alloy/releases
|
||||
ALLOY_VERSION=v1.17.0
|
||||
|
||||
# -- Exposed Ports -------------------------------------------------------------
|
||||
# Alloy UI / debug / health endpoint
|
||||
EXPOSE_ALLOY_UI_PORT=12345
|
||||
# OTLP gRPC receiver (used by instrumented apps/services writing OTLP gRPC)
|
||||
EXPOSE_OTLP_GRPC_PORT=4317
|
||||
# OTLP HTTP receiver (used by instrumented apps/services writing OTLP HTTP)
|
||||
EXPOSE_OTLP_HTTP_PORT=4318
|
||||
|
||||
# -- Forwarding Target ---------------------------------------------------------
|
||||
# Where Alloy forwards all received telemetry.
|
||||
# Defaults to LGTM's OTLP HTTP endpoint on the shared pipeline network.
|
||||
ALLOY_OTLP_FORWARD_ENDPOINT=http://lgtm:4318
|
||||
|
||||
# -- Log Level -----------------------------------------------------------------
|
||||
# Alloy log level: debug, info, warn, error
|
||||
ALLOY_LOG_LEVEL=info
|
||||
|
||||
# -- UI Basic Auth (optional) --------------------------------------------------
|
||||
# Leave ALLOY_UI_PASSWORD empty to disable authentication.
|
||||
ALLOY_UI_USERNAME=admin
|
||||
ALLOY_UI_PASSWORD=
|
||||
70
docker/alloy/compose.yaml
Normal file
70
docker/alloy/compose.yaml
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
name: alloy
|
||||
|
||||
services:
|
||||
alloy:
|
||||
image: grafana/alloy:${ALLOY_VERSION:-v1.17.0}
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- run
|
||||
- --server.http.listen-addr=0.0.0.0:12345
|
||||
- --storage.path=/var/lib/alloy/data
|
||||
- /etc/alloy/config.alloy
|
||||
environment:
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT: ${ALLOY_OTLP_FORWARD_ENDPOINT:-http://lgtm:4318}
|
||||
|
||||
# Log level: debug, info, warn, error
|
||||
ALLOY_LOG_LEVEL: ${ALLOY_LOG_LEVEL:-info}
|
||||
|
||||
# UI basic auth (optional)
|
||||
ALLOY_UI_USERNAME: ${ALLOY_UI_USERNAME:-admin}
|
||||
ALLOY_UI_PASSWORD: ${ALLOY_UI_PASSWORD:-}
|
||||
|
||||
ports:
|
||||
# Alloy UI / debug endpoint
|
||||
- ${EXPOSE_ALLOY_UI_PORT:-12345}:12345
|
||||
# OTLP gRPC receiver
|
||||
- ${EXPOSE_OTLP_GRPC_PORT:-4317}:4317
|
||||
# OTLP HTTP receiver
|
||||
- ${EXPOSE_OTLP_HTTP_PORT:-4318}:4318
|
||||
|
||||
volumes:
|
||||
# Pipeline configuration
|
||||
- ./config.alloy:/etc/alloy/config.alloy:ro
|
||||
# Persistent storage for component state
|
||||
- ./alloy-data:/var/lib/alloy/data
|
||||
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- wget
|
||||
- --no-verbose
|
||||
- --tries=1
|
||||
- --spider
|
||||
- http://localhost:12345/-/healthy
|
||||
interval: 15s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
start_period: 10s
|
||||
|
||||
networks:
|
||||
alloy:
|
||||
pipeline:
|
||||
aliases:
|
||||
- alloy
|
||||
- otel
|
||||
# swag:
|
||||
# aliases:
|
||||
# - alloy
|
||||
|
||||
networks:
|
||||
alloy:
|
||||
name: alloy
|
||||
driver: bridge
|
||||
pipeline:
|
||||
name: pipeline
|
||||
external: true
|
||||
# swag:
|
||||
# name: swag
|
||||
# external: true
|
||||
|
||||
volumes: {}
|
||||
45
docker/alloy/config.alloy
Normal file
45
docker/alloy/config.alloy
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// =============================================================================
|
||||
// Grafana Alloy Pipeline Configuration
|
||||
// Centralized OpenTelemetry collector for the curated compose stacks.
|
||||
// Receives OTLP traces/metrics/logs and forwards to the LGTM backend.
|
||||
// =============================================================================
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// OTLP Receiver — gRPC + HTTP
|
||||
// All stacks push telemetry here via OTLP gRPC (port 4317) or OTLP HTTP (port
|
||||
// 4318). Other stacks reference this service on the `pipeline` network as `otel`
|
||||
// or `alloy`.
|
||||
// ---------------------------------------------------------------------------
|
||||
otelcol.receiver.otlp "default" {
|
||||
grpc {
|
||||
endpoint = "0.0.0.0:4317"
|
||||
}
|
||||
http {
|
||||
endpoint = "0.0.0.0:4318"
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// OTLP Exporter — Forward to LGTM
|
||||
// Sends all received telemetry to the LGTM backend (grafana/otel-lgtm).
|
||||
// The target endpoint is configurable via the ALLOY_OTLP_FORWARD_ENDPOINT env
|
||||
// var, defaulting to http://lgtm:4318 (LGTM's OTLP HTTP endpoint on pipeline).
|
||||
// ---------------------------------------------------------------------------
|
||||
otelcol.exporter.otlp "lgtm" {
|
||||
client {
|
||||
endpoint = env("OTEL_EXPORTER_OTLP_ENDPOINT", "http://lgtm:4318")
|
||||
tls {
|
||||
insecure = true
|
||||
insecure_skip_verify = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Pipeline — Connect receiver to exporter(s)
|
||||
// Routes telemetry from the OTLP receiver to the LGTM exporter.
|
||||
// ---------------------------------------------------------------------------
|
||||
otelcol.pipeline "default" {
|
||||
receiver = otelcol.receiver.otlp.default
|
||||
exporter = otelcol.exporter.otlp.lgtm
|
||||
}
|
||||
37
docker/alloy/swag/alloy.subdomain.conf
Normal file
37
docker/alloy/swag/alloy.subdomain.conf
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
## -----------------------------------------------------------------------------
|
||||
## SWAG proxy config for Grafana Alloy
|
||||
## Domain: alloy.ld50.xyz
|
||||
## Upstream: alloy:12345 (shared Docker network: ${NETWORKS_EXTERNAL_NAME:-swag})
|
||||
##
|
||||
## Install:
|
||||
## 1) Copy this file into SWAG: /config/nginx/proxy-confs/alloy.subdomain.conf
|
||||
## 2) Ensure both stacks share the same external Docker network (e.g. `swag`).
|
||||
## 3) In curated_compose/alloy/compose.yaml, uncomment external_network.
|
||||
## 4) Reload SWAG.
|
||||
## -----------------------------------------------------------------------------
|
||||
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
|
||||
server_name alloy.ld50.xyz;
|
||||
|
||||
include /config/nginx/ssl.conf;
|
||||
|
||||
location / {
|
||||
include /config/nginx/proxy.conf;
|
||||
|
||||
set $upstream_app alloy;
|
||||
set $upstream_port 12345;
|
||||
set $upstream_proto http;
|
||||
|
||||
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
|
||||
|
||||
# Alloy UI uses WebSocket for live config reload
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_read_timeout 3600s;
|
||||
proxy_send_timeout 3600s;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue