Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
시각_UTC,미전송_건,HTTP_요청_건,활성_VU_최대,확보_VU_최대,HTTP_응답대기_p95_ms,연결대기_p95_ms,반복수행_p95_ms,호스트_CPU_%,호스트_가용메모리_MiB,k6_CPU_%,k6_RSS_MiB,k6_스레드_수
2026-10-09T06:14:54Z,0,2,,,62.98,4.94,69.33,,7023.18,,44.25,7
2026-10-09T06:14:55Z,0,30,2.0,80.0,61.06,2.19,64.0,10.61,7019.21,18.95,56.18,7
2026-10-09T06:14:56Z,0,29,1.0,80.0,57.45,2.67,60.46,6.03,7019.3,9.98,58.32,7
2026-10-09T06:14:57Z,0,31,1.0,80.0,57.11,2.35,60.06,5.56,7015.34,9.98,60.39,8
2026-10-09T06:14:58Z,0,30,1.0,80.0,20.29,0.03,21.52,6.97,7011.41,10.98,62.5,8
2026-10-09T06:14:59Z,0,30,1.0,80.0,61.18,0.02,62.88,5.5,7011.49,7.98,62.65,8
2026-10-09T06:15:00Z,0,30,1.0,80.0,19.7,0.02,21.46,5.05,7011.51,7.98,62.65,8
2026-10-09T06:15:01Z,0,29,0.0,80.0,19.67,0.02,21.72,5.05,7011.57,8.98,62.66,8
2026-10-09T06:15:02Z,0,31,0.0,80.0,56.01,0.02,57.17,6.0,7011.41,6.98,64.7,8
2026-10-09T06:15:03Z,0,30,0.0,80.0,55.65,0.02,56.93,6.53,7011.47,10.98,64.72,8
2026-10-09T06:15:04Z,0,30,0.0,80.0,19.01,0.02,20.18,5.03,7011.5,7.98,64.74,8
2026-10-09T06:15:05Z,0,30,1.0,80.0,55.87,0.02,57.3,5.03,7011.61,6.99,64.75,8
2026-10-09T06:15:06Z,0,29,1.0,80.0,55.6,0.02,57.61,4.04,7011.69,7.98,64.8,8
2026-10-09T06:15:07Z,0,31,1.0,80.0,54.75,0.02,55.77,4.5,7011.73,5.99,64.82,8
2026-10-09T06:15:08Z,0,30,1.0,80.0,57.69,0.02,58.55,6.03,7011.77,9.98,64.91,8
2026-10-09T06:15:09Z,0,30,1.0,80.0,56.53,0.02,57.69,4.55,7011.57,7.98,64.91,8
2026-10-09T06:15:10Z,0,30,1.0,80.0,54.5,0.02,55.78,5.0,7011.68,7.98,64.92,8
2026-10-09T06:15:11Z,0,30,0.0,80.0,52.72,0.02,53.95,5.03,7011.74,6.98,64.93,8
2026-10-09T06:15:12Z,0,30,0.0,80.0,55.87,0.03,57.36,5.03,7011.8,6.98,64.94,8
2026-10-09T06:15:13Z,0,30,0.0,80.0,55.52,0.02,56.74,4.06,7011.86,7.98,64.96,8
2026-10-09T06:15:14Z,0,29,0.0,80.0,54.22,0.02,55.42,8.46,7011.95,10.98,64.98,8
2026-10-09T06:15:15Z,0,31,1.0,80.0,54.53,0.02,56.09,6.0,7011.95,7.98,64.99,8
2026-10-09T06:15:16Z,0,29,0.0,80.0,17.55,0.03,19.0,5.03,7012.05,7.98,64.99,8
2026-10-09T06:15:17Z,0,31,1.0,80.0,54.82,0.05,56.16,5.47,7012.16,6.98,65.0,8
2026-10-09T06:15:18Z,0,30,1.0,80.0,56.44,0.02,57.55,3.55,7012.21,7.98,65.01,8
2026-10-09T06:15:19Z,0,30,1.0,80.0,53.81,0.02,54.96,7.0,7012.27,10.97,65.02,8
2026-10-09T06:15:20Z,0,30,1.0,80.0,56.0,0.02,57.28,5.53,7012.31,8.98,65.03,8
2026-10-09T06:15:21Z,0,29,0.0,80.0,55.12,0.02,56.95,6.0,7012.42,7.98,65.03,8
2026-10-09T06:15:22Z,0,31,1.0,80.0,55.16,0.03,56.34,4.55,7012.47,6.99,65.03,8
2026-10-09T06:15:23Z,0,30,0.0,80.0,51.42,0.02,52.59,4.52,7012.54,6.99,65.04,8
2026-10-09T06:15:24Z,0,29,0.0,80.0,18.06,0.01,19.07,6.47,7012.58,8.98,65.05,8
2026-10-09T06:15:25Z,0,31,1.0,80.0,53.23,0.02,54.65,4.06,7012.63,7.98,65.05,8
2026-10-09T06:15:26Z,0,30,1.0,80.0,55.77,0.02,57.14,4.52,7012.74,7.98,65.12,8
2026-10-09T06:15:27Z,0,30,1.0,80.0,54.0,0.01,55.29,4.52,7012.74,6.99,65.13,8
2026-10-09T06:15:28Z,0,30,0.0,80.0,51.59,0.02,52.92,4.04,7012.85,6.99,65.13,8
2026-10-09T06:15:29Z,0,30,1.0,80.0,53.35,0.05,54.41,4.98,7012.85,6.98,65.14,8
2026-10-09T06:15:30Z,0,30,0.0,80.0,54.97,0.02,56.26,7.54,7012.96,10.98,65.21,8
2026-10-09T06:15:31Z,0,29,1.0,80.0,52.27,0.01,53.38,3.05,7013.02,6.99,65.21,8
2026-10-09T06:15:32Z,0,30,1.0,80.0,54.45,0.02,55.42,4.98,7013.08,5.99,65.22,8
2026-10-09T06:15:33Z,0,31,0.0,80.0,55.05,0.02,56.17,4.55,7013.16,7.98,65.29,8
2026-10-09T06:15:34Z,0,30,1.0,80.0,50.92,0.05,51.85,4.55,7013.22,6.98,65.29,8
2026-10-09T06:15:35Z,0,30,1.0,80.0,55.95,0.04,57.79,5.5,7013.27,7.98,67.31,8
2026-10-09T06:15:36Z,0,29,1.0,80.0,56.21,0.02,57.68,5.03,7013.39,6.99,67.34,8
2026-10-09T06:15:37Z,0,31,0.0,80.0,54.38,0.02,55.54,8.46,7009.39,12.97,69.39,8
2026-10-09T06:15:38Z,0,30,0.0,80.0,56.35,0.02,57.6,4.52,7009.46,6.98,69.39,8
2026-10-09T06:15:39Z,0,30,1.0,80.0,19.31,0.02,20.65,5.53,7009.52,8.97,69.39,8
2026-10-09T06:15:40Z,0,29,1.0,80.0,18.86,0.02,20.24,4.04,7009.58,6.99,69.39,8
2026-10-09T06:15:41Z,0,30,1.0,80.0,55.16,0.02,56.55,5.5,7009.64,6.99,69.39,8
2026-10-09T06:15:42Z,0,31,1.0,80.0,55.48,0.02,56.76,5.53,7009.73,8.98,70.04,8
2026-10-09T06:15:43Z,0,30,1.0,80.0,53.81,0.03,55.01,5.03,7009.76,5.99,70.04,8
2026-10-09T06:15:44Z,0,30,0.0,80.0,52.64,0.02,53.4,6.53,7009.9,10.98,70.07,8
2026-10-09T06:15:45Z,0,30,1.0,80.0,54.83,0.01,56.02,4.98,7009.9,5.99,70.07,8
2026-10-09T06:15:46Z,0,30,1.0,80.0,55.44,0.02,56.44,4.55,7010.0,7.99,70.07,8
2026-10-09T06:15:47Z,0,29,1.0,80.0,55.61,0.04,56.87,5.0,7010.05,6.98,70.09,8
2026-10-09T06:15:48Z,0,30,0.0,80.0,56.71,0.02,57.9,4.52,7010.1,6.99,70.09,8
2026-10-09T06:15:49Z,0,31,1.0,80.0,56.1,0.02,57.16,5.47,7010.16,7.98,70.09,8
2026-10-09T06:15:50Z,0,30,1.0,80.0,55.07,0.02,56.19,,,,,
2026-10-09T06:15:51Z,0,29,0.0,80.0,54.61,0.01,55.92,4.06,7010.21,7.98,70.09,8
2026-10-09T06:15:52Z,0,31,1.0,80.0,55.37,0.02,56.5,4.5,7010.27,5.99,70.1,8
2026-10-09T06:15:53Z,0,30,1.0,80.0,53.89,0.1,55.18,6.53,7010.36,10.98,70.17,8
2026-10-09T06:15:54Z,0,29,0.0,80.0,54.71,0.01,55.87,5.05,7010.45,6.99,70.17,8
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# HA 대시보드 표시 변경 로컬 검증 — ha-dashboard-preview-20261009-01

| 항목 | 기록 |
| --- | --- |
| 실행 시각 | 2026-10-09 14:09:52 KST |
| 목적 | 기존 Grafana JSON의 상태 타임라인·현재 리더 카드·앱 오류 패널을 정적으로 검증 |
| 위치·기준 | 로컬 분리 작업 트리, `test/448`의 `c794914` 기반 미커밋 변경 |
| 절차 | `python3 -m unittest monitoring/grafana/tests/test_ha_dashboard.py -v`; `python3 -m json.tool monitoring/grafana/dashboards/docgrid-ha-demo.json`; `git diff --check` |
| 통과 기준 | 단위 테스트 전부 통과, JSON 파싱 성공, diff 공백 오류 0건 |
| 관측 결과 | 단위 테스트 **9/9 통과**, JSON 파싱 성공, diff 검사 오류 **0건** |
| 미검증 | 실제 Grafana 가져오기·시각 표시, 설치된 Patroni/Hikari 메트릭·PromQL 실행, OpenProxy 포트 관측, 장애 시연 |

이 기록은 로컬 정적 검증 결과이며 GCP 관측 VM에 적용됐다는 증거가 아니다. 원격 접근에는 별도 승인이 필요한 임시 OS Login 키 등록이 막혀 있어, 원격 결과를 추정해 기록하지 않았다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# HA 대시보드 실제 적용 확인 — ha-dashboard-live-20261009-01

| 항목 | 기록 |
| --- | --- |
| 실행·확인 시각 | 2026-10-09 14:32:45 KST |
| 목적 | 변경한 Grafana 대시보드를 관측 VM에 적용하고 기존 수집 경로·새 PromQL 응답을 확인 |
| 실행 위치 | GCP 내부 관측 VM의 Prometheus·Grafana; 로컬 IAP SSH 터널은 화면 확인용 |
| 코드 기준 | `test/448`의 `c794914` 기반 미커밋 대시보드 변경 |
| 사전 조건 | 기존 대시보드 8패널의 ID·제목·쿼리 해시가 저장소 기준과 일치; 앱 2대·Patroni 3대 active target **5/5 up** |
| 방법 | Prometheus API에서 필요한 지표명·새 패널 PromQL 조회 → Grafana 기존 JSON을 0600 백업 → Dashboard API로 JSON 가져오기 → API 재조회 → 임시 OS Login 키 제거 |
| 통과 기준 | DB 상태 결과 3개(Primary 1·Replica 2), 현재 primary·timeline 각 1개, 앱 지표 각 2개, Grafana 12패널·상태 타임라인 2개·숫자 카드 2개, 임시 키 잔존 0개 |
| 실제 결과 | DB 역할 **3개(Primary 1·Replica 2)**, primary 카드 **1개**, 해당 timeline **14**, 앱 5xx·Hikari timeout 시계열 **각 2개·현재 값 모두 0**, Grafana 가져오기 `success`, UID 유지·버전 **2→3**·패널 **8→12**, 임시 OS Login 키 잔존 **0개**, 로컬 개인키·공개키 삭제 |
| 화면 접근 | 기존 로컬 포트는 다른 SSH 프로세스가 점유해 새 로컬 포트로 터널을 열었고 Grafana 로그인 HTTP **200** 확인. 사용자 로그인 후 실제 화면에서 primary 카드 **1개**, timeline 카드 **14**, 앱 상태 **2행**, DB 역할 **3행(Primary 1·Replica 2)**의 색·문구를 확인 |
| 미실행 | 장애 주입, OpenProxy TCP probe, 앱→프록시 연결 지표, 장애 annotation 이벤트 기록, HTTP 쓰기 부하·DB 요청 ID 대조 |

처음에는 관측 VM 호스트의 loopback Prometheus 주소로 요청해 연결에 실패했다. Prometheus가 컨테이너 내부 네트워크에서만 응답하는 실제 구성을 확인해, 컨테이너 내부 주소를 쉘 변수로만 사용하여 재조회했다. 내부 주소 자체는 이 기록에 남기지 않았다.

Grafana 대시보드 원본 백업은 관측 VM의 소유자 전용 임시 파일에 남겼다. 관리자 암호는 VM 내부의 기존 보호 파일에서 API 인증에만 사용했고 명령 결과·시험 기록에 출력하지 않았다. 이 실행은 **정상 상태의 지표·API·화면 렌더링 확인**이며, 실제 장애 상황에서 모든 색·막대가 원하는 형태로 바뀌는지 또는 RPO가 0인지 판정하지 않는다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# OpenProxy 포트 관측·상단 패널 축소 실측 — ha-dashboard-proxy-20261009-01

| 항목 | 기록 |
| --- | --- |
| 실행 시각 | 2026-10-09 14:40~14:48 KST |
| 목적 | OpenProxy A/B 포트의 관측 VM 기준 TCP 연결을 Grafana에 표시하고, primary·timeline·앱·DB 상태 패널을 축소 |
| 실행 위치 | 로컬 검증, GCP 내부 관측 VM의 Prometheus·Grafana·Blackbox Exporter, 기존 앱 2대·DB 3대 |
| 코드 기준 | `test/448`의 `c794914` 기반 미커밋 변경. 이번 확인은 PR·배포 JAR 변경이 아님 |
| 방법 | 로컬 Dashboard 구조 검사 → 관측 VM에서 두 프록시 포트 TCP 확인 → TCP 전용 Exporter 실행 → Prometheus 설정 문법 검사·재적용 → `up`·`probe_success` 쿼리 → Grafana API·실제 화면 확인 |
| 통과 기준 | 앱 2/2·Patroni 3/3·프록시 scrape 2/2, `probe_success` A/B 모두 1, 호스트 포트 비공개, Grafana 14패널·상단 높이 4 이하, 임시 접근 키 제거 |

## 실행 결과

| 확인 | 관측 결과 | 해석 |
| --- | --- | --- |
| 로컬 구조 검사 | `python3 -m unittest monitoring/grafana/tests/test_ha_dashboard.py -v`: **10/10 통과**; JSON 파싱·`git diff --check` 통과 | 패널 ID·배치·쿼리·의미 검사를 통과 |
| TCP 접속 사전 점검 | 관측 VM→OpenProxy A/B 포트 **2/2 연결 성공** | 기존 네트워크 규칙으로 접근 가능해 **새 방화벽 규칙은 만들지 않음** |
| 새 수집 경로 | Prometheus 설정 `promtool check config` 통과, Blackbox Exporter 실행, scrape **2/2 up** | 관측 VM의 TCP probe가 주기적으로 실행됨 |
| 전체 수집 대상 | 앱 **2/2**, Patroni **3/3**, OpenProxy TCP **2/2** | 해당 조회 시점의 7개 target 모두 수집 중 |
| 실제 포트 결과 | `probe_success`: proxy-A **1**, proxy-B **1** | 관측 VM에서 두 TCP 포트에 접속 가능. **SQL 성공을 뜻하지 않음** |
| 외부 노출 | Exporter `9115/tcp`의 호스트 바인딩 **없음** | 관측 VM의 내부 Docker 네트워크에서만 Prometheus가 접근 |
| Grafana 화면 | 기존 UID 유지, 버전 **3→4**, 패널 **12→14**, 프록시 연결 수 **2**, A/B 녹색 막대 2행 | 로그인된 실제 화면에서 신규 패널·축소된 카드 및 상태 타임라인 렌더링 확인 |
| 기존 상태 | 현재 primary **db-node3**, 해당 timeline **14** | 화면 확인 시점의 표시값이며 장애 시험 결과 아님 |
| 정리 | 임시 OS Login 공개키 제거·로컬 개인키 삭제·원격 전송 임시 파일 삭제 | 운영 설정과 롤백용 보호 백업은 유지 |

## 실패·재시도와 한계

- 로컬 YAML 검사 첫 시도는 `PyYAML` 미설치로 실패했다. 같은 설정을 Ruby YAML 파서로 확인했고, 최종 Prometheus 설정은 실제 VM의 `promtool` 검사에 통과했다.
- 첫 `promtool` 실행은 0600 임시 파일을 비특권 컨테이너가 읽지 못해 실패했다. 파일 권한을 낮추지 않고 일회성 검증 컨테이너만 root로 재실행하여 통과했다.
- Exporter 실행과 포트 바인딩 확인에서 원격 명령 인용 오류가 각각 1회 있었다. 오류 명령은 설정을 변경하지 않았고 수정 후 성공했다.
- 실제 OpenProxy 중단·복구 장애는 이번 실행에서 주입하지 않았다. 빨간색 전환, 앱→프록시 실제 사용 경로, SQL 성공, HTTP 부하·DB 정합성은 이 결과로 검증되지 않는다.
- k6 패널은 별도 부하 실행이 없으면 빈 상태가 정상이다. 이 화면의 녹색 포트 막대만으로 가용성·RPO를 주장하지 않는다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 응답코드 계측·대시보드 로컬 회귀 — ha-dashboard-code-20261009-01

| 항목 | 기록 |
| --- | --- |
| 실행 날짜·시간대 | 2026-10-09 KST. 정확한 시작·종료 시각은 별도로 보존하지 않아 추정하지 않음 |
| 목적 | k6의 2xx·3xx·4xx·5xx 무태그 Counter, 안전 원장, 최종 Remote Write 대조 및 Grafana 카드·배치가 함께 작동하는지 검사 |
| 위치·기준 | 로컬 `test/448`, 기반 커밋 `c79491408d84` + 이 작업의 미커밋 변경. GCP 앱 JAR 회귀 시험이 아님 |
| 명령 | `python3 -m unittest discover -s scripts/opensql -p 'test_*ha*py'`; `python3 -m unittest discover -s monitoring/grafana/tests -p 'test_ha_dashboard.py'`; `python3 -m json.tool monitoring/grafana/dashboards/docgrid-ha-demo.json`; `git diff --check` |
| 통과 기준 | 관련 Python 시험 모두 성공, JSON 파싱·diff 공백 검사 성공, k6 설치 VM에서 실제 스크립트 파싱 성공 |

## 관측 결과

| 검사 | 결과 | 해석 |
| --- | --- | --- |
| HA 관련 Python 시험 | **85/85 통과**, 실패 0 | 안전 이벤트·원격 합계·원장 재생의 200/201/3xx~5xx 경계를 포함 |
| Grafana 정적 시험 | **11/11 통과**, 실패 0 | 누적 카드 4개, 실행 ID 필터, 역할 색, 타임라인 크기, 프록시 범위, 15초 timeout 쿼리 검사 |
| JSON·diff | 파싱 성공, `git diff --check` 성공 | 저장소 JSON 구문·공백 검사 통과. 실제 Grafana 렌더링의 단독 증거는 아님 |
| GCP 부하 VM의 `k6 inspect -e ...` | 종료 코드 **0** | 설치된 k6가 새 JS를 파싱함. 더미 토큰만 사용하여 HTTP 요청 없음 |

첫 Grafana 정적 시험은 설명문에 ‘결과 불명’ 용어가 빠져 **1건 실패**했다. 설명문을 고치고 재실행하여 11/11 통과했다. 첫 `k6 inspect`는 옵션 대신 프로세스 환경 변수만 주어 필수 `__ENV`가 없다는 파싱 전 오류(종료 코드 107)를 냈다. `-e` 인자로 수정한 재실행은 통과했다. 이 두 실패를 실제 부하 시험 실패나 제품 결함으로 합치지 않는다.

최종 변경 후 핵심 4개 모듈을 다시 돌려 **35/35 통과**했고 JSON 파싱·`git diff --check`도 통과했다. 별도로 로컬 Python 전체 검색을 시도한 결과 처음에는 **134건 중 5건이 샌드박스의 loopback 소켓 바인딩 제한으로 실행 오류**가 났다. 같은 명령을 loopback 사용이 허용되는 환경에서 다시 실행해 **134/134 통과**했다. 최초 제한을 제품 실패로 판정하지 않으며, 재실행 결과로 로컬 전체 Python 검사 통과를 확인했다.

원시 테스트 stdout에는 합성 UUID 등이 포함되어 저장하지 않았다. 이 파일은 검사 건수·오류 종류만 별도로 정리한 안전 요약이다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 최초 접속 시험의 권한 실패 — hadash1009sm01

| 항목 | 기록 |
| --- | --- |
| 시각 | 2026-10-09 **15:11:06~15:11:12 KST** (원본 UTC 06:11:06~06:11:12) |
| 목적·위치 | GCP 내부 부하 VM에서 앱 LB를 통한 HTTP 쓰기와 새 Remote Write 지표를 소량으로 확인 |
| 명령·부하 | `run_ha_probe_k6.sh hadash1009sm01 1 5s <내부 LB> <0600 단기 JWT> baseline-write 5`; 목표 1 req/s·5초, 초기 VU 5 |
| 통과 기준 | 201 응답, k6 미전송 0, 코드 대역·원장·Prometheus 최종 합계 일치 |

| 관측 | 값 | 판정 |
| --- | ---: | --- |
| HTTP 요청·반복 | 6건·6회 | 실제 요청 전송 확인 |
| HTTP 403 / 201 | **6건 / 0건** | **기준선 실패**, k6 종료 코드 99 |
| 미전송·결과 불명 | 0건·0건 | 부하 발생기 드롭이나 네트워크 결과 불명이 원인은 아님 |
| p95 / p99 | 30.32ms / 33.31ms | 실패 응답의 지연. 정상 쓰기 지연과 비교하지 않음 |
| 안전 이벤트 | 12건(전송 6 + 종료 6) | 실행 중 실행별 파일로 수집 |
| 4xx Counter 대조 | 원장 6건 = Prometheus 6건 | **새 코드 대역 계측 자체는 동작** |
| DB 요청 ID 대조 | 미시행 | 201이 없어 성공 쓰기 보존 시험이 아님 |

기존 합성 관리자 식별자로 서명한 새 토큰을 사용했으나, 앱은 403을 반환했다. **기존 계정 부재인지 ADMIN 권한 부재인지는 이번 실행에서 분리하지 않았다.** 세 DB 노드의 독립 정리 타이머를 먼저 무장한 뒤 새 합성 관리자 fixture를 만들고, 다음 실행 ID `hadash1009sm02`로 재시도했다. 이 실패는 감추거나 성공 기준선에 섞지 않는다. 토큰 값·내부 주소·실제 사용자 정보는 이 기록에 남기지 않았다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 새 합성 관리자 접속 시험 — hadash1009sm02

| 항목 | 기록 |
| --- | --- |
| 시각 | 2026-10-09 **15:14:29~15:14:36 KST** (원본 UTC 06:14:29~06:14:36) |
| 목적·위치 | 보호된 합성 ADMIN fixture로 GCP 내부 LB→앱→OpenSQL 쓰기 및 Remote Write를 소량 검증 |
| 안전 관문 | DB 역할 replica 2·primary 1, 기존 시험 계정 0명. DB 3대에 **20분 독립 정리 타이머 3/3** 무장 후 합성 계정 4명 생성. JWT TTL 20분·0600 |
| 명령·부하 | `run_ha_probe_k6.sh hadash1009sm02 1 5s <내부 LB> <0600 단기 JWT> baseline-write 5`; 목표 1 req/s·5초, 초기 VU 5 |
| 통과 기준 | 모든 응답 201, 미전송 0, 안전 이벤트 완결, 원격 지표 최종 합계 일치 |

| 관측 | 값 | 판정 |
| --- | ---: | --- |
| HTTP 201 / 전체 | **6 / 6건** | 통과, k6 종료 코드 0 |
| 미전송·HTTP 실패·결과 불명 | **0·0·0건** | 요청 경로 정상 |
| 2xx / 3xx / 4xx / 5xx | **6 / 0 / 0 / 0건** | 대역별 누적 Counter 확인 |
| p95 / p99 | 101.03ms / 103.08ms | 6건의 작은 표본; 성능 결론에 사용하지 않음 |
| Remote Write 최종 대조 | 원장 6건 = Prometheus 6건, 첫 조회 일치 | 총합 전달 확인. 중간 전송 공백은 이 대조로 검증하지 않음 |
| 실시간 안전 이벤트·1초 계측 | 12건·검증 종료 코드 0 | 전송 6 + 종료 6의 별도 실행 원장 |
| DB 요청 ID 대조 | 미시행 | 다음 60초 기준선에서 개별 대조 수행 |

이 성공은 앞선 403 실행을 성공으로 바꾸지 않는다. 합성 계정은 뒤의 기준선까지 유지한 다음 primary에서 제거하고, replica 2대에서 계정 0명을 확인한 후 정리 타이머를 3/3 해제했다.
Loading
Loading