# chore(observability): Prometheus/Grafana 모니터링 스택 + 공통 JSON 로깅 구성y - #14
Merged
Merged
Conversation
### Summary
OpenRemit 전체 모듈(`remittance-api`, `payout-worker`, `webhook-dispatcher`, `reconciler`)에 Prometheus 메트릭 노출을 통일하고, `docker-compose`에 Prometheus/Grafana를 추가했습니다.
또한 `common` 모듈에 공통 `logback-spring.xml`을 추가해 `local` 프로필은 텍스트 로그, 그 외 프로필은 JSON 로그로 표준화했습니다.
---
### Changes
#### 1) docker-compose: Prometheus + Grafana 추가
- `docker-compose.yml`
- `prometheus` 서비스 추가 (`9090`)
- `grafana` 서비스 추가 (`3000`)
- `host.docker.internal:host-gateway` 설정으로 호스트 JVM scrape 지원
- `prometheus-data`, `grafana-data` 볼륨 추가
- `docker/prometheus.yml` (신규)
- `/actuator/prometheus` scrape 설정
- 대상:
- `host.docker.internal:8080` (`remittance-api`)
- `host.docker.internal:8081` (`payout-worker`)
- `host.docker.internal:8082` (`webhook-dispatcher`)
- `host.docker.internal:8084` (`reconciler`)
#### 2) Grafana provisioning/대시보드 추가
- `docker/grafana/provisioning/datasources/prometheus.yml` (신규)
- datasource `Prometheus` (`uid: prometheus`) 자동 등록
- `docker/grafana/provisioning/dashboards/provider.yml` (신규)
- `OpenRemit` 폴더 dashboard provider 등록
- `docker/grafana/dashboards/openremit.json` (신규)
- `OpenRemit — Service Overview` 대시보드 추가
- HTTP latency/throughput, JVM heap, Resilience4j 지표 패널 구성
#### 3) 각 서비스 Prometheus 노출 설정 통일
- `remittance-api/src/main/resources/application.yaml`
- `payout-worker/src/main/resources/application.yaml`
- `webhook-dispatcher/src/main/resources/application.yaml`
- `reconciler/src/main/resources/application.yaml`
- `management.endpoints.web.exposure.include`에 `prometheus` 추가
- `management.prometheus.metrics.export.enabled=true`
- `management.metrics.tags.application=${spring.application.name}` 추가
#### 4) 의존성 추가 (메트릭/JSON 로깅)
- `remittance-api/build.gradle.kts`
- `payout-worker/build.gradle.kts`
- `webhook-dispatcher/build.gradle.kts`
- `reconciler/build.gradle.kts`
- `io.micrometer:micrometer-registry-prometheus` 추가
- `net.logstash.logback:logstash-logback-encoder:8.0` 추가
- `reconciler`는 scrape endpoint 노출 위해 `spring-boot-starter-webmvc` 추가
#### 5) 공통 로그 포맷 추가
- `common/src/main/resources/logback-spring.xml` (신규)
- `local` 프로필: 콘솔 텍스트 로그
- `!local` 프로필: Logstash JSON 한 줄 로그
- `app` custom field 및 `traceId/spanId` MDC 포함
#### 6) 문서 업데이트
- `README.md`
- mock-webhook/prometheus/grafana 서비스 설명 추가
- 메트릭 확인 방법 및 포트/라벨 표 추가
- 로그 프로필 동작(local vs default) 설명 추가
---
### Checklist
- [x] Prometheus/Grafana docker-compose 구성 추가
- [x] Grafana datasource/dashboard provisioning 추가
- [x] 4개 서비스 `/actuator/prometheus` 노출 설정 통일
- [x] Prometheus registry 및 JSON 로깅 의존성 추가
- [x] 공통 `logback-spring.xml` 추가
- [x] README 관측성 가이드 반영
---
### How to Test
```bash
# 1) 인프라 기동
docker compose up -d
# 2) 각 서비스 실행 (예시)
./gradlew :remittance-api:bootRun
./gradlew :payout-worker:bootRun
./gradlew :webhook-dispatcher:bootRun
./gradlew :reconciler:bootRun
# 3) 메트릭 확인
curl -s http://localhost:8080/actuator/prometheus | head
curl -s http://localhost:9090/api/v1/targets
# 4) Grafana 확인
# http://localhost:3000 접속 → Dashboards → OpenRemit — Service Overview
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
OpenRemit 전체 모듈(
remittance-api,payout-worker,webhook-dispatcher,reconciler)에 Prometheus 메트릭 노출을 통일하고,docker-compose에 Prometheus/Grafana를 추가했습니다. 또한common모듈에 공통logback-spring.xml을 추가해local프로필은 텍스트 로그, 그 외 프로필은 JSON 로그로 표준화했습니다.Changes
1) docker-compose: Prometheus + Grafana 추가
docker-compose.ymlprometheus서비스 추가 (9090)grafana서비스 추가 (3000)host.docker.internal:host-gateway설정으로 호스트 JVM scrape 지원prometheus-data,grafana-data볼륨 추가docker/prometheus.yml(신규)/actuator/prometheusscrape 설정host.docker.internal:8080(remittance-api)host.docker.internal:8081(payout-worker)host.docker.internal:8082(webhook-dispatcher)host.docker.internal:8084(reconciler)2) Grafana provisioning/대시보드 추가
docker/grafana/provisioning/datasources/prometheus.yml(신규)Prometheus(uid: prometheus) 자동 등록docker/grafana/provisioning/dashboards/provider.yml(신규)OpenRemit폴더 dashboard provider 등록docker/grafana/dashboards/openremit.json(신규)OpenRemit — Service Overview대시보드 추가3) 각 서비스 Prometheus 노출 설정 통일
remittance-api/src/main/resources/application.yamlpayout-worker/src/main/resources/application.yamlwebhook-dispatcher/src/main/resources/application.yamlreconciler/src/main/resources/application.yamlmanagement.endpoints.web.exposure.include에prometheus추가management.prometheus.metrics.export.enabled=truemanagement.metrics.tags.application=${spring.application.name}추가4) 의존성 추가 (메트릭/JSON 로깅)
remittance-api/build.gradle.ktspayout-worker/build.gradle.ktswebhook-dispatcher/build.gradle.ktsreconciler/build.gradle.ktsio.micrometer:micrometer-registry-prometheus추가net.logstash.logback:logstash-logback-encoder:8.0추가reconciler는 scrape endpoint 노출 위해spring-boot-starter-webmvc추가5) 공통 로그 포맷 추가
common/src/main/resources/logback-spring.xml(신규)local프로필: 콘솔 텍스트 로그!local프로필: Logstash JSON 한 줄 로그appcustom field 및traceId/spanIdMDC 포함6) 문서 업데이트
README.mdChecklist
/actuator/prometheus노출 설정 통일logback-spring.xml추가How to Test