From 2989e4767cbd8136c18d8fa2fc7154b52b07d01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Thu, 1 Oct 2026 15:27:31 +0900 Subject: [PATCH 1/3] fix: decouple Prometheus startup dependencies --- docker-compose.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c8d5e8c0..c5d2ee47 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -86,11 +86,7 @@ services: - ./monitoring/prometheus/rules:/etc/prometheus/rules:ro - ./monitoring/prometheus/targets:/etc/prometheus/targets:ro - prometheus-data:/prometheus - depends_on: - alertmanager: - condition: service_healthy - embedding-server: - condition: service_healthy + # 감시 대상과 알림 경로가 장애여도 수집과 규칙 평가는 독립적으로 시작한다. networks: - docgrid-local From c1126ad8e5ef9873cf1abad552e09acdd4686b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Thu, 1 Oct 2026 15:28:07 +0900 Subject: [PATCH 2/3] test: guard Prometheus startup independence --- monitoring/verify.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/monitoring/verify.sh b/monitoring/verify.sh index dc92aadd..f85d52a0 100755 --- a/monitoring/verify.sh +++ b/monitoring/verify.sh @@ -72,7 +72,21 @@ DRILL_TMP_DIR="$SECRET_DIR" docker compose \ # 5. 사용자가 실행할 두 Compose 형태가 모두 정상 렌더링되는지 확인한다. docker compose -f "$ROOT_DIR/docker-compose.yml" config --quiet -docker compose -f "$ROOT_DIR/docker-compose.yml" --profile monitoring config --quiet +MONITORING_COMPOSE_CONFIG="$SECRET_DIR/monitoring-compose.json" +docker compose -f "$ROOT_DIR/docker-compose.yml" --profile monitoring \ + config --format json > "$MONITORING_COMPOSE_CONFIG" +python3 - "$MONITORING_COMPOSE_CONFIG" <<'PY' +import json +import pathlib +import sys + +config = json.loads(pathlib.Path(sys.argv[1]).read_text(encoding="utf-8")) +prometheus_dependencies = config["services"]["prometheus"].get("depends_on", {}) +monitored_dependencies = {"alertmanager", "embedding-server"} & set(prometheus_dependencies) +if monitored_dependencies: + names = ", ".join(sorted(monitored_dependencies)) + raise SystemExit(f"Prometheus must start independently from monitored services: {names}") +PY if [ "${1:-}" = "--e2e" ]; then "$ROOT_DIR/monitoring/alertmanager/tests/run-e2e.sh" From f8cd1ce3e4194de7ec53b64a09fb98afdcdfd1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EA=B8=B0=EB=AF=BC?= Date: Thu, 1 Oct 2026 15:28:49 +0900 Subject: [PATCH 3/3] docs: explain independent monitoring startup --- README.md | 5 ++++- monitoring/prometheus/README.md | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74870da2..d416a639 100644 --- a/README.md +++ b/README.md @@ -127,9 +127,12 @@ npm --prefix frontend run dev Backend와 Embedding Provider의 운영 메트릭을 함께 수집하려면 선택형 monitoring profile을 실행합니다. ```bash -docker compose --profile monitoring up -d prometheus +docker compose --profile monitoring up -d prometheus alertmanager ``` +Prometheus는 감시 대상이나 Alertmanager의 health 상태를 시작 조건으로 사용하지 않는다. 따라서 +Embedding Provider가 준비되지 않아도 먼저 기동해 수집 실패와 경보를 기록한다. + - Prometheus Target: `http://localhost:9090/targets` - 설정과 기존 Prometheus 연결: [monitoring/prometheus/README.md](monitoring/prometheus/README.md) diff --git a/monitoring/prometheus/README.md b/monitoring/prometheus/README.md index 2fb558ca..04cb16f3 100644 --- a/monitoring/prometheus/README.md +++ b/monitoring/prometheus/README.md @@ -15,13 +15,17 @@ Management endpoint는 기본적으로 Host의 `8081` 포트에서 열린다. 실행한다. ```bash -docker compose --profile monitoring up -d prometheus +docker compose --profile monitoring up -d prometheus alertmanager ``` Prometheus는 컨테이너에서 `host.docker.internal:8081`을 수집하고 firing·resolved 경보를 같은 profile의 Alertmanager로 전달한다. Compose의 `extra_hosts`가 Linux의 host gateway를 같은 이름으로 연결하며 Docker Desktop도 같은 주소를 지원한다. +두 monitoring 서비스를 명시하는 이유는 Prometheus가 Alertmanager와 Embedding Provider의 health +상태에 의존하지 않고 시작하기 때문이다. Embedding Provider가 아직 준비되지 않았거나 중단됐어도 +Prometheus는 먼저 기동하고 해당 target을 `DOWN`으로 기록해 장애 경보를 평가한다. + - Target 상태: - Alert 상태: - Alertmanager 상태: