Files
Edu/infra/docker-compose.monitoring.yml
SpecialX 566060fade feat(infra): p6 hardening - observability and deploy compose
- 5 NestJS services add /metrics endpoint via app.getHttpAdapter()
- prometheus.yml scales to 8 services with rule_files and alertmanager
- monitoring compose replaces blackbox with Loki+Promtail
- Grafana datasource adds Loki
- docker-compose.deploy.yml scales to 11 services
- deploy.env.example completes Neo4j/ES/ClickHouse/LLM vars
- teacher-bff adds health.controller
- CI removes continue-on-error on lint step
- teacher-portal lint script changed to eslint src
2026-07-09 10:21:06 +08:00

141 lines
4.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 监控栈 docker-compose独立 profile
# 使用方式: docker compose -f docker-compose.monitoring.yml --profile monitoring up -d
version: "3.9"
networks:
edu-network:
name: edu-network
external: true
volumes:
prometheus-data:
name: edu-prometheus-data
alertmanager-data:
name: edu-alertmanager-data
grafana-data:
name: edu-grafana-data
loki-data:
name: edu-loki-data
services:
# ============================================================
# Prometheus - 指标采集与存储
# ============================================================
prometheus:
image: prom/prometheus:v2.54.1
container_name: edu-prometheus
profiles: ["monitoring"]
restart: unless-stopped
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=15d"
- "--web.enable-lifecycle"
- "--web.enable-admin-api"
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./prometheus/rules.yml:/etc/prometheus/rules.yml:ro
- prometheus-data:/prometheus
networks:
- edu-network
# ============================================================
# Alertmanager - 告警路由与抑制
# ============================================================
alertmanager:
image: prom/alertmanager:v0.27.0
container_name: edu-alertmanager
profiles: ["monitoring"]
restart: unless-stopped
command:
- "--config.file=/etc/alertmanager/alertmanager.yml"
- "--storage.path=/alertmanager"
ports:
- "9093:9093"
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
- alertmanager-data:/alertmanager
networks:
- edu-network
depends_on:
- prometheus
# ============================================================
# Grafana - 可视化
# ============================================================
grafana:
image: grafana/grafana:11.2.2
container_name: edu-grafana
profiles: ["monitoring"]
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin}
- GF_USERS_ALLOW_SIGN_UP=false
- GF_AUTH_ANONYMOUS_ENABLED=false
ports:
- "3000:3000"
volumes:
- ./grafana/provisioning:/etc/grafana/provisioning:ro
- ./grafana/dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
networks:
- edu-network
depends_on:
- prometheus
# ============================================================
# node-exporter - 主机指标采集
# ============================================================
node-exporter:
image: prom/node-exporter:v1.8.2
container_name: edu-node-exporter
profiles: ["monitoring"]
restart: unless-stopped
command:
- "--path.rootfs=/host"
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/host:ro
networks:
- edu-network
# ============================================================
# Loki - 日志聚合P6 硬化新增)
# ============================================================
loki:
image: grafana/loki:3.2.1
container_name: edu-loki
profiles: ["monitoring"]
restart: unless-stopped
command: -config.file=/etc/loki/local-config.yaml
ports:
- "3100:3100"
volumes:
- loki-data:/loki
networks:
- edu-network
# ============================================================
# Promtail - 日志采集(收集 Docker 容器日志发送到 Loki
# ============================================================
promtail:
image: grafana/promtail:3.2.1
container_name: edu-promtail
profiles: ["monitoring"]
restart: unless-stopped
command: -config.file=/etc/promtail/config.yml
volumes:
- ./promtail/config.yml:/etc/promtail/config.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- edu-network
depends_on:
- loki