@@ -13,6 +13,8 @@ services:
1313 - " --entrypoints.traefik.address=:8085"
1414 - " --api=true"
1515 - " --api.insecure=true"
16+ - " --metrics.prometheus=true"
17+ - " --metrics.prometheus.addrouterslabels=true"
1618 ports :
1719 - " 80:80"
1820 - " 8085:8085"
@@ -241,13 +243,15 @@ services:
241243 ports :
242244 - " 8088:8080"
243245 - " 50051:50051"
246+ - " 2112:2112"
244247 environment :
245248 QUERY_DEFAULTS_LIMIT : 25
246249 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED : ' true'
247250 PERSISTENCE_DATA_PATH : ' /var/lib/weaviate'
248251 BACKUP_FILESYSTEM_PATH : ' /var/lib/weaviate/backups'
249252 ENABLE_API_BASED_MODULES : ' true'
250253 CLUSTER_HOSTNAME : ' node1'
254+ PROMETHEUS_MONITORING_ENABLED : ' true'
251255 volumes :
252256 - weaviate-genai-data:/var/lib/weaviate
253257 healthcheck :
@@ -309,10 +313,131 @@ services:
309313 - " traefik.http.middlewares.genai-cors.headers.accessControlAllowOrigin=${CORS_ALLOW_ORIGINS:-*}"
310314 - " traefik.http.routers.genai.middlewares=genai-cors@traefik"
311315
316+ prometheus :
317+ image : prom/prometheus
318+ volumes :
319+ - ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
320+ - ./monitoring/prometheus/alert.rules.yml:/etc/prometheus/alert.rules.yml
321+ - prometheus-data:/prometheus
322+ ports :
323+ - " ${PROMETHEUS_PORT:-9090}:9090"
324+ networks :
325+ - skillforge-network
326+ healthcheck :
327+ test : ["CMD", "wget", "-qO", "-", "http://localhost:9090/-/ready"]
328+ interval : 30s
329+ timeout : 5s
330+ retries : 3
331+
332+ alertmanager :
333+ image : prom/alertmanager
334+ container_name : skillforge-alertmanager
335+ volumes :
336+ - ./monitoring/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml
337+ ports :
338+ - " ${ALERTMANAGER_PORT:-9093}:9093"
339+ networks :
340+ - skillforge-network
341+ healthcheck :
342+ test : ["CMD", "wget", "-qO", "-", "http://localhost:9093/-/ready"]
343+ interval : 30s
344+ timeout : 5s
345+ retries : 3
346+
347+ grafana :
348+ image : grafana/grafana
349+ ports :
350+ - " ${GRAFANA_EXPOSED_PORT:-3001}:3000"
351+ environment :
352+ - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PWD:-admin}
353+ - GF_DATE_FORMATS_DEFAULT_TIMEZONE=browser
354+ volumes :
355+ - ./monitoring/grafana/dashboards/:/var/lib/grafana/dashboards/
356+ - ./monitoring/grafana/provisioning/:/etc/grafana/provisioning/
357+ - grafana-data:/var/lib/grafana
358+ networks :
359+ - skillforge-network
360+ healthcheck :
361+ test : ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
362+ interval : 30s
363+ timeout : 5s
364+ retries : 3
365+
366+
367+ mongo-exporter :
368+ image : percona/mongodb_exporter:0.30
369+ command :
370+ - --mongodb.uri=mongodb://${MONGODB_USERNAME:-root}:${MONGODB_PASSWORD:-password}@mongo:27017/admin?authSource=admin
371+ - --collector.dbstats
372+ - --collector.topmetrics
373+ - --discovering-mode
374+ - --compatible-mode
375+ - --web.listen-address=:9216
376+ environment :
377+ - MONGODB_URI=mongodb://${MONGODB_USERNAME:-root}:${MONGODB_PASSWORD:-password}@mongo:27017/admin?authSource=admin
378+ ports :
379+ - " ${MONGO_EXPORTER_PORT:-9216}:9216"
380+ networks :
381+ - skillforge-network
382+ healthcheck :
383+ test : ["CMD", "wget", "-qO", "-", "http://localhost:9216/metrics"]
384+ interval : 30s
385+ timeout : 5s
386+ retries : 3
387+ depends_on :
388+ mongo :
389+ condition : service_healthy
390+
391+ # ─── Loki for Centralized Logging ────────────────────────────────────────────────
392+ loki :
393+ image : grafana/loki:latest
394+ container_name : skillforge-loki
395+ ports :
396+ - " ${LOKI_PORT:-3100}:3100"
397+ volumes :
398+ - ./monitoring/loki/loki-config.yml:/etc/loki/local-config.yaml
399+ - loki-data:/loki
400+ command : -config.file=/etc/loki/local-config.yaml
401+ networks :
402+ - skillforge-network
403+ healthcheck :
404+ test : ["CMD", "wget", "-qO", "-", "http://localhost:3100/ready"]
405+ interval : 30s
406+ timeout : 5s
407+ retries : 3
408+
409+ # ─── Promtail for Log Collection ────────────────────────────────────────────────
410+ promtail :
411+ image : grafana/promtail:latest
412+ container_name : skillforge-promtail
413+ volumes :
414+ - /var/run/docker.sock:/var/run/docker.sock
415+ - /var/lib/docker/containers:/var/lib/docker/containers:ro
416+ - ./monitoring/loki/promtail-config.yml:/etc/promtail/config.yml
417+ command : -config.file=/etc/promtail/config.yml
418+ networks :
419+ - skillforge-network
420+ depends_on :
421+ loki :
422+ condition : service_healthy
423+
424+ # ─── MailHog (SMTP Test Server) ────────────────────────────────────────────────
425+ mailhog :
426+ image : mailhog/mailhog
427+ container_name : skillforge-mailhog
428+ ports :
429+ - " 1025:1025" # SMTP
430+ - " 8025:8025" # Web UI
431+ networks :
432+ - skillforge-network
433+
312434volumes :
313435 mongo-data :
314436 redis-data :
315437 weaviate-genai-data :
438+ prometheus-data :
439+ grafana-data :
440+ loki-data :
316441
317442networks :
318443 skillforge-network :
0 commit comments