feat(observability): add OpenTelemetry Collector, Jaeger, and custom dashboard for monitoring

fix(infra): update NATS configuration for OpenTelemetry tracing and JetStream support
refactor(dapr): modify Dapr sidecar configuration to use new resources path and config file
chore(docs): update deployment documentation to include observability services
docs(commit-convention): establish commit message guidelines for Asepharyana Hub
docs(deploy-workflow): outline CI/CD pipeline and manual deployment steps for Asepharyana Hub
feat(event-driven): implement event-driven architecture patterns with Dapr and NATS
docs(hub-rules): define repository structure, submodule strategy, and infrastructure patterns
This commit is contained in:
asepharyana
2026-07-22 16:43:37 +07:00
parent df71487563
commit dcb93035f3
20 changed files with 1055 additions and 23 deletions
+2 -3
View File
@@ -11,11 +11,10 @@ services:
- '4222:4222' # client connections
- '8222:8222' # HTTP monitor / health
command:
- '-js'
- '-sd'
- '/data'
- '--config=/etc/nats/nats.conf'
volumes:
- nats_data:/data
- ../../infra/nats/nats.conf:/etc/nats/nats.conf:ro
volumes:
nats_data:
+58
View File
@@ -0,0 +1,58 @@
services:
# ── OpenTelemetry Collector ──
otel-collector:
container_name: otel-collector
image: otel/opentelemetry-collector-contrib:latest
restart: always
networks:
app-shared-net:
aliases:
- otel-collector
ports:
- '4317:4317' # OTLP gRPC
- '4318:4318' # OTLP HTTP
- '8889:8889' # Prometheus metrics
command:
- '--config=/etc/otel/config.yml'
volumes:
- ../../infra/otel/otel-collector-config.yml:/etc/otel/config.yml:ro
depends_on:
jaeger:
condition: service_started
# ── Jaeger (Tracing Backend + Built-in UI) ──
jaeger:
container_name: jaeger
image: jaegertracing/all-in-one:latest
restart: always
networks:
app-shared-net:
aliases:
- jaeger
ports:
- '16686:16686' # Jaeger UI + API
environment:
- COLLECTOR_OTLP_ENABLED=true
- COLLECTOR_ZIPKIN_HOST_PORT=:9411
- METRICS_STORAGE_TYPE=prometheus
- PROMETHEUS_SERVER_URL=http://otel-collector:8889
- LOG_LEVEL=info
# ── Custom Dashboard (nginx:alpine) ──
dashboard:
container_name: dashboard
build:
context: ../..
dockerfile: infra/docker/dashboard.Dockerfile
restart: always
networks:
app-shared-net:
aliases:
- dashboard
ports:
- '8080:8080'
networks:
app-shared-net:
name: app-shared-net
external: true
+5 -2
View File
@@ -35,6 +35,8 @@ services:
condition: service_started
dapr-placement:
condition: service_started
otel-collector:
condition: service_started
networks:
- app-shared-net
command:
@@ -44,9 +46,10 @@ services:
- '--dapr-http-port=3500'
- '--dapr-grpc-port=50001'
- '--placement-host-address=dapr-placement:50005'
- '--resources-path=/components'
- '--config=/dapr/config.yaml'
- '--resources-path=/dapr/components'
volumes:
- ../../infra/dapr/components:/components
- ../../infra/dapr:/dapr:ro
networks:
app-shared-net:
+5
View File
@@ -50,6 +50,11 @@ services:
- '--experimental.plugins.blockpath.moduleName=github.com/traefik/plugin-blockpath'
- '--experimental.plugins.blockpath.version=v0.2.1'
- '--ping=true'
- '--tracing.openTelemetry=true'
- '--tracing.openTelemetry.address=otel-collector:4318'
- '--tracing.openTelemetry.insecure=true'
- '--tracing.openTelemetry.grpc=false'
- '--tracing.serviceName=traefik'
healthcheck:
test: ['CMD', 'wget', '--spider', 'http://localhost:8080/ping']
interval: 30s