Compare commits

...

4 Commits

Author SHA1 Message Date
egutierrez a884ed0dbc chore: eliminar workflow de Gitea/Coolify
Eliminación del workflow de despliegue automático a Coolify.

El repositorio actualmente no requiere despliegue automático, por lo que se elimina la configuración del workflow de Gitea para simplificar la estructura del proyecto.

Archivo eliminado:
- .gitea/workflows/deploy.yml
2026-03-23 20:07:12 +01:00
egutierrez 4df3a11e0c merge: quick/simplify-stack-alloy-prometheus-loki-grafana — Simplificación del stack a Alloy + Prometheus + Loki + Grafana
Deploy to Coolify / deploy (push) Has been cancelled
2026-03-23 20:01:31 +01:00
egutierrez 8509a1a4e8 refactor: simplificar configuración de Alloy para métricas y logs
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.
2026-03-23 20:01:06 +01:00
egutierrez 65673636c4 refactor: simplificar docker-compose a stack esencial
Simplificación del stack de observabilidad manteniendo solo los servicios esenciales:

Servicios activos:
- Alloy (puertos mínimos: 12345, 9999, 3101)
- Prometheus (métricas)
- Loki (logs)
- Grafana (visualización)

Servicios comentados:
- Tempo (trazas distribuidas)
- Promtail (reemplazado por Alloy)
- Node Exporter (métricas del host)
- cAdvisor (métricas de contenedores)

Cambios:
- Reducción de puertos de Alloy (eliminados puertos de trazas: OTLP, Jaeger, Zipkin)
- Actualización de dependencias de Alloy y Grafana
- Limpieza de volúmenes no utilizados (tempo_data, promtail_positions)
- Grafana ahora solo depende de Prometheus y Loki

El stack simplificado mantiene capacidad completa de métricas y logs con menor complejidad operacional.
2026-03-23 20:00:57 +01:00
3 changed files with 141 additions and 190 deletions
-35
View File
@@ -1,35 +0,0 @@
name: Deploy to Coolify
on:
push:
branches:
- master
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Deploy to Coolify
run: |
curl -X POST \
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"deploymentUuid": "${{ secrets.COOLIFY_DEPLOYMENT_UUID }}",
"gitCommitSha": "${{ github.sha }}",
"gitBranch": "${{ github.ref_name }}"
}' \
${{ secrets.COOLIFY_WEBHOOK_URL }}
- name: Notify deployment
if: always()
run: |
if [ "${{ job.status }}" == "success" ]; then
echo "✅ Deployment successful"
else
echo "❌ Deployment failed"
fi
+78 -78
View File
@@ -42,32 +42,32 @@ prometheus.scrape "loki" {
job_name = "loki" job_name = "loki"
} }
// Scraping de Tempo // // Scraping de Tempo
prometheus.scrape "tempo" { // prometheus.scrape "tempo" {
targets = [{"__address__" = "tempo:3200"}] // targets = [{"__address__" = "tempo:3200"}]
forward_to = [prometheus.remote_write.prometheus.receiver] // forward_to = [prometheus.remote_write.prometheus.receiver]
scrape_interval = "15s" // scrape_interval = "15s"
metrics_path = "/metrics" // metrics_path = "/metrics"
job_name = "tempo" // job_name = "tempo"
} // }
// Scraping de Node Exporter (métricas del host Docker) // // Scraping de Node Exporter (métricas del host Docker)
prometheus.scrape "node_exporter" { // prometheus.scrape "node_exporter" {
targets = [{"__address__" = "node-exporter:9100"}] // targets = [{"__address__" = "node-exporter:9100"}]
forward_to = [prometheus.remote_write.prometheus.receiver] // forward_to = [prometheus.remote_write.prometheus.receiver]
scrape_interval = "15s" // scrape_interval = "15s"
metrics_path = "/metrics" // metrics_path = "/metrics"
job_name = "node_exporter" // job_name = "node_exporter"
} // }
// Scraping de cAdvisor (métricas detalladas de Docker/containers) // // Scraping de cAdvisor (métricas detalladas de Docker/containers)
prometheus.scrape "cadvisor" { // prometheus.scrape "cadvisor" {
targets = [{"__address__" = "cadvisor:8080"}] // targets = [{"__address__" = "cadvisor:8080"}]
forward_to = [prometheus.remote_write.prometheus.receiver] // forward_to = [prometheus.remote_write.prometheus.receiver]
scrape_interval = "15s" // scrape_interval = "15s"
metrics_path = "/metrics" // metrics_path = "/metrics"
job_name = "cadvisor" // job_name = "cadvisor"
} // }
// Scraping fijo para métricas expuestas desde el host (scripts Python) // Scraping fijo para métricas expuestas desde el host (scripts Python)
// Corre por defecto en host.docker.internal:9102 para PrometheusMetric // Corre por defecto en host.docker.internal:9102 para PrometheusMetric
@@ -168,66 +168,66 @@ loki.write "loki" {
} }
//============================================================================= //=============================================================================
// TEMPO - TRAZAS // TEMPO - TRAZAS (COMENTADO - NO SE USA)
//============================================================================= //=============================================================================
// Receptor OTLP // // Receptor OTLP
otelcol.receiver.otlp "tempo" { // otelcol.receiver.otlp "tempo" {
grpc { // grpc {
endpoint = "0.0.0.0:4317" // endpoint = "0.0.0.0:4317"
} // }
http { // http {
endpoint = "0.0.0.0:4318" // endpoint = "0.0.0.0:4318"
} // }
output { // output {
traces = [otelcol.processor.batch.tempo.input] // traces = [otelcol.processor.batch.tempo.input]
} // }
} // }
// Receptor Jaeger // // Receptor Jaeger
otelcol.receiver.jaeger "jaeger_traces" { // otelcol.receiver.jaeger "jaeger_traces" {
protocols { // protocols {
grpc { // grpc {
endpoint = "0.0.0.0:14250" // endpoint = "0.0.0.0:14250"
} // }
thrift_http { // thrift_http {
endpoint = "0.0.0.0:14268" // endpoint = "0.0.0.0:14268"
} // }
thrift_compact { // thrift_compact {
endpoint = "0.0.0.0:6831" // endpoint = "0.0.0.0:6831"
} // }
} // }
output { // output {
traces = [otelcol.processor.batch.tempo.input] // traces = [otelcol.processor.batch.tempo.input]
} // }
} // }
// Receptor Zipkin // // Receptor Zipkin
otelcol.receiver.zipkin "zipkin_traces" { // otelcol.receiver.zipkin "zipkin_traces" {
endpoint = "0.0.0.0:9411" // endpoint = "0.0.0.0:9411"
output { // output {
traces = [otelcol.processor.batch.tempo.input] // traces = [otelcol.processor.batch.tempo.input]
} // }
} // }
// Procesador batch // // Procesador batch
otelcol.processor.batch "tempo" { // otelcol.processor.batch "tempo" {
send_batch_size = 1024 // send_batch_size = 1024
timeout = "1s" // timeout = "1s"
output { // output {
traces = [otelcol.exporter.otlp.tempo.input] // traces = [otelcol.exporter.otlp.tempo.input]
} // }
} // }
// Exportador a Tempo // // Exportador a Tempo
otelcol.exporter.otlp "tempo" { // otelcol.exporter.otlp "tempo" {
client { // client {
endpoint = "http://tempo:4317" // endpoint = "http://tempo:4317"
tls { // tls {
insecure = true // insecure = true
} // }
} // }
} // }
//============================================================================= //=============================================================================
// CONFIGURACIÓN GENERAL // CONFIGURACIÓN GENERAL
+63 -77
View File
@@ -33,41 +33,29 @@ services:
- monitoring - monitoring
restart: always restart: always
# Tempo para trazas - Solo almacenamiento (Alloy maneja la recolección) # # Tempo para trazas - Solo almacenamiento (Alloy maneja la recolección)
tempo: # tempo:
image: grafana/tempo:latest # image: grafana/tempo:latest
container_name: tempo # container_name: tempo
ports: # ports:
- "${TEMPO_PORT:-3200}:3200" # Solo puerto de consulta, sin endpoints de recepción # - "${TEMPO_PORT:-3200}:3200" # Solo puerto de consulta, sin endpoints de recepción
volumes: # volumes:
- ./config/tempo/tempo.yaml:/etc/tempo/tempo.yaml # - ./config/tempo/tempo.yaml:/etc/tempo/tempo.yaml
- tempo_data:/var/tempo # - tempo_data:/var/tempo
command: # command:
- -config.file=/etc/tempo/tempo.yaml # - -config.file=/etc/tempo/tempo.yaml
networks: # networks:
- monitoring # - monitoring
restart: always # restart: always
# Grafana Alloy para colección de datos - ÚNICA PUERTA DE ENTRADA # Grafana Alloy para colección de métricas y logs
alloy: alloy:
image: grafana/alloy:latest image: grafana/alloy:latest
container_name: alloy container_name: alloy
ports: ports:
- "${ALLOY_UI_PORT:-12345}:12345" # Puerto para la UI de Alloy - "${ALLOY_UI_PORT:-12345}:12345" # Puerto para la UI de Alloy
# Puertos para métricas
- "${ALLOY_METRICS_PORT:-9999}:9999" # HTTP receiver para métricas externas - "${ALLOY_METRICS_PORT:-9999}:9999" # HTTP receiver para métricas externas
# Puertos para logs
- "${ALLOY_LOGS_HTTP_PORT:-3101}:3101" # HTTP receiver para logs externos - "${ALLOY_LOGS_HTTP_PORT:-3101}:3101" # HTTP receiver para logs externos
- "${ALLOY_SYSLOG_PORT:-1514}:1514" # Syslog TCP receiver
# Puertos para trazas - OpenTelemetry
- "${ALLOY_OTLP_GRPC_PORT:-4317}:4317" # OTLP gRPC
- "${ALLOY_OTLP_HTTP_PORT:-4318}:4318" # OTLP HTTP
# Puertos para trazas - Jaeger compatibility
- "${ALLOY_JAEGER_GRPC_PORT:-14250}:14250" # Jaeger gRPC
- "${ALLOY_JAEGER_HTTP_PORT:-14268}:14268" # Jaeger HTTP
- "${ALLOY_JAEGER_COMPACT_PORT:-6831}:6831/udp" # Jaeger compact thrift
# Puertos para trazas - Zipkin compatibility
- "${ALLOY_ZIPKIN_PORT:-9411}:9411" # Zipkin HTTP
volumes: volumes:
- ./config/alloy/alloy.river:/etc/alloy/config.river - ./config/alloy/alloy.river:/etc/alloy/config.river
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
@@ -89,7 +77,6 @@ services:
depends_on: depends_on:
- prometheus - prometheus
- loki - loki
- tempo
# Grafana para visualización # Grafana para visualización
grafana: grafana:
@@ -115,56 +102,55 @@ services:
depends_on: depends_on:
- prometheus - prometheus
- loki - loki
- tempo
# Node Exporter para métricas del host # # Node Exporter para métricas del host
node-exporter: # node-exporter:
image: prom/node-exporter:latest # image: prom/node-exporter:latest
container_name: node-exporter # container_name: node-exporter
ports: # ports:
- "${NODE_EXPORTER_PORT:-9100}:9100" # - "${NODE_EXPORTER_PORT:-9100}:9100"
command: # command:
- '--path.rootfs=/host' # - '--path.rootfs=/host'
volumes: # volumes:
- /proc:/host/proc:ro # - /proc:/host/proc:ro
- /sys:/host/sys:ro # - /sys:/host/sys:ro
- /:/host:ro # - /:/host:ro
networks: # networks:
- monitoring # - monitoring
restart: always # restart: always
# cAdvisor para métricas detalladas de Docker # # cAdvisor para métricas detalladas de Docker
cadvisor: # cadvisor:
image: gcr.io/cadvisor/cadvisor:latest # image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor # container_name: cadvisor
privileged: true # privileged: true
ports: # ports:
- "${CADVISOR_PORT:-8081}:8080" # - "${CADVISOR_PORT:-8081}:8080"
volumes: # volumes:
- /:/rootfs:ro # - /:/rootfs:ro
- /var/run/docker.sock:/var/run/docker.sock:ro # - /var/run/docker.sock:/var/run/docker.sock:ro
- /sys:/sys:ro # - /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro # - /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro # - /dev/disk/:/dev/disk:ro
networks: # networks:
- monitoring # - monitoring
restart: always # restart: always
# Promtail para exportar logs de todos los contenedores hacia Alloy # # Promtail para exportar logs de todos los contenedores hacia Alloy
promtail: # promtail:
image: grafana/promtail:latest # image: grafana/promtail:latest
container_name: promtail # container_name: promtail
command: -config.file=/etc/promtail/promtail-config.yml # command: -config.file=/etc/promtail/promtail-config.yml
volumes: # volumes:
- ./config/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro # - ./config/promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro
- promtail_positions:/var/lib/promtail # - promtail_positions:/var/lib/promtail
- /var/run/docker.sock:/var/run/docker.sock:ro # - /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro # - /var/lib/docker/containers:/var/lib/docker/containers:ro
networks: # networks:
- monitoring # - monitoring
restart: always # restart: always
depends_on: # depends_on:
- alloy # - alloy
networks: networks:
monitoring: monitoring:
@@ -174,7 +160,7 @@ networks:
volumes: volumes:
prometheus_data: prometheus_data:
loki_data: loki_data:
tempo_data:
alloy_data: alloy_data:
grafana_data: grafana_data:
promtail_positions: # tempo_data:
# promtail_positions: