8509a1a4e8
Limpieza de la configuración de Alloy eliminando componentes no utilizados: Métricas (Prometheus): - Mantiene scraping de: Alloy, Prometheus, Grafana, Loki, app_metrics - Comentados: Tempo, Node Exporter, cAdvisor - Receptor HTTP para métricas externas (puerto 9999) - Remote write a Prometheus Logs (Loki): - Descubrimiento y recolección de logs de contenedores Docker - Receptor HTTP para logs externos (puerto 3101) - Receptor Syslog (puerto 1514) - Envío a Loki Trazas: - Sección completa de Tempo comentada (OTLP, Jaeger, Zipkin) La configuración resultante está enfocada exclusivamente en métricas y logs, reduciendo la superficie de ataque y simplificando el troubleshooting.
240 lines
6.2 KiB
Plaintext
240 lines
6.2 KiB
Plaintext
//=============================================================================
|
|
// GRAFANA ALLOY - PUERTA DE ENTRADA ÚNICA DE OBSERVABILIDAD
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
// PROMETHEUS - MÉTRICAS
|
|
//=============================================================================
|
|
|
|
// Scraping del propio Alloy
|
|
prometheus.scrape "alloy" {
|
|
targets = [{"__address__" = "localhost:12345"}]
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
scrape_interval = "15s"
|
|
metrics_path = "/metrics"
|
|
job_name = "alloy"
|
|
}
|
|
|
|
// Scraping de Prometheus
|
|
prometheus.scrape "prometheus" {
|
|
targets = [{"__address__" = "prometheus:9090"}]
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
scrape_interval = "15s"
|
|
metrics_path = "/metrics"
|
|
job_name = "prometheus"
|
|
}
|
|
|
|
// Scraping de Grafana
|
|
prometheus.scrape "grafana" {
|
|
targets = [{"__address__" = "grafana:3000"}]
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
scrape_interval = "30s"
|
|
metrics_path = "/metrics"
|
|
job_name = "grafana"
|
|
}
|
|
|
|
// Scraping de Loki
|
|
prometheus.scrape "loki" {
|
|
targets = [{"__address__" = "loki:3100"}]
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
scrape_interval = "15s"
|
|
metrics_path = "/metrics"
|
|
job_name = "loki"
|
|
}
|
|
|
|
// // Scraping de Tempo
|
|
// prometheus.scrape "tempo" {
|
|
// targets = [{"__address__" = "tempo:3200"}]
|
|
// forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
// scrape_interval = "15s"
|
|
// metrics_path = "/metrics"
|
|
// job_name = "tempo"
|
|
// }
|
|
|
|
// // Scraping de Node Exporter (métricas del host Docker)
|
|
// prometheus.scrape "node_exporter" {
|
|
// targets = [{"__address__" = "node-exporter:9100"}]
|
|
// forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
// scrape_interval = "15s"
|
|
// metrics_path = "/metrics"
|
|
// job_name = "node_exporter"
|
|
// }
|
|
|
|
// // Scraping de cAdvisor (métricas detalladas de Docker/containers)
|
|
// prometheus.scrape "cadvisor" {
|
|
// targets = [{"__address__" = "cadvisor:8080"}]
|
|
// forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
// scrape_interval = "15s"
|
|
// metrics_path = "/metrics"
|
|
// job_name = "cadvisor"
|
|
// }
|
|
|
|
// Scraping fijo para métricas expuestas desde el host (scripts Python)
|
|
// Corre por defecto en host.docker.internal:9102 para PrometheusMetric
|
|
prometheus.scrape "app_metrics" {
|
|
targets = [{"__address__" = "host.docker.internal:9102"}]
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
scrape_interval = "1s"
|
|
scrape_timeout = "800ms"
|
|
metrics_path = "/metrics"
|
|
job_name = "app_metrics"
|
|
}
|
|
|
|
// Receptor para métricas externas
|
|
prometheus.receive_http "external_metrics" {
|
|
http {
|
|
listen_address = "0.0.0.0"
|
|
listen_port = 9999
|
|
}
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
}
|
|
|
|
// Remote write hacia Prometheus
|
|
prometheus.remote_write "prometheus" {
|
|
endpoint {
|
|
url = "http://prometheus:9090/api/v1/write"
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
// LOKI - LOGS
|
|
//=============================================================================
|
|
|
|
// Descubrimiento de contenedores Docker
|
|
discovery.docker "docker_logs" {
|
|
host = "unix:///var/run/docker.sock"
|
|
refresh_interval = "5s"
|
|
}
|
|
|
|
// Fuente de logs de contenedores Docker
|
|
loki.source.docker "containers" {
|
|
host = "unix:///var/run/docker.sock"
|
|
targets = discovery.docker.docker_logs.targets
|
|
refresh_interval = "5s"
|
|
forward_to = [loki.relabel.docker.receiver]
|
|
}
|
|
|
|
// Relabel para contenedores Docker
|
|
loki.relabel "docker" {
|
|
forward_to = [loki.write.loki.receiver]
|
|
|
|
rule {
|
|
source_labels = ["__meta_docker_container_name"]
|
|
target_label = "container"
|
|
}
|
|
|
|
rule {
|
|
source_labels = ["__meta_docker_container_image"]
|
|
target_label = "image"
|
|
}
|
|
}
|
|
|
|
// Receptor HTTP para logs externos (como tus logs Python)
|
|
loki.source.api "external_logs" {
|
|
http {
|
|
listen_address = "0.0.0.0"
|
|
listen_port = 3101
|
|
}
|
|
|
|
// ⚙️ Enviar los logs directamente al escritor Loki
|
|
forward_to = [loki.write.loki.receiver]
|
|
}
|
|
|
|
// Receptor Syslog para logs del sistema
|
|
loki.source.syslog "system_logs" {
|
|
listener {
|
|
address = "0.0.0.0:1514"
|
|
protocol = "tcp"
|
|
}
|
|
forward_to = [loki.relabel.syslog.receiver]
|
|
}
|
|
|
|
// Relabel para logs del sistema
|
|
loki.relabel "syslog" {
|
|
forward_to = [loki.write.loki.receiver]
|
|
|
|
rule {
|
|
source_labels = ["__syslog_message_hostname"]
|
|
target_label = "hostname"
|
|
}
|
|
}
|
|
|
|
// Cliente Loki - destino final
|
|
// ⚠️ Sin http_headers (no soportado aún en Alloy estable)
|
|
loki.write "loki" {
|
|
endpoint {
|
|
url = "http://loki:3100/loki/api/v1/push"
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
// TEMPO - TRAZAS (COMENTADO - NO SE USA)
|
|
//=============================================================================
|
|
|
|
// // Receptor OTLP
|
|
// otelcol.receiver.otlp "tempo" {
|
|
// grpc {
|
|
// endpoint = "0.0.0.0:4317"
|
|
// }
|
|
// http {
|
|
// endpoint = "0.0.0.0:4318"
|
|
// }
|
|
// output {
|
|
// traces = [otelcol.processor.batch.tempo.input]
|
|
// }
|
|
// }
|
|
|
|
// // Receptor Jaeger
|
|
// otelcol.receiver.jaeger "jaeger_traces" {
|
|
// protocols {
|
|
// grpc {
|
|
// endpoint = "0.0.0.0:14250"
|
|
// }
|
|
// thrift_http {
|
|
// endpoint = "0.0.0.0:14268"
|
|
// }
|
|
// thrift_compact {
|
|
// endpoint = "0.0.0.0:6831"
|
|
// }
|
|
// }
|
|
// output {
|
|
// traces = [otelcol.processor.batch.tempo.input]
|
|
// }
|
|
// }
|
|
|
|
// // Receptor Zipkin
|
|
// otelcol.receiver.zipkin "zipkin_traces" {
|
|
// endpoint = "0.0.0.0:9411"
|
|
// output {
|
|
// traces = [otelcol.processor.batch.tempo.input]
|
|
// }
|
|
// }
|
|
|
|
// // Procesador batch
|
|
// otelcol.processor.batch "tempo" {
|
|
// send_batch_size = 1024
|
|
// timeout = "1s"
|
|
// output {
|
|
// traces = [otelcol.exporter.otlp.tempo.input]
|
|
// }
|
|
// }
|
|
|
|
// // Exportador a Tempo
|
|
// otelcol.exporter.otlp "tempo" {
|
|
// client {
|
|
// endpoint = "http://tempo:4317"
|
|
// tls {
|
|
// insecure = true
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
//=============================================================================
|
|
// CONFIGURACIÓN GENERAL
|
|
//=============================================================================
|
|
|
|
logging {
|
|
level = "info"
|
|
format = "logfmt"
|
|
}
|