V1 Monitoring - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki
1. ๋์ ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉํ
V1 Monitoring์์๋ ์๋น์ค ์ฅ์ ๋ฅผ โ์๋ฒ๊ฐ ์ฃฝ์๋์งโ๊ฐ ์๋๋ผ โ์๋น์ค๊ฐ ์ ์ ๋์ํ๋์งโ๋ก ํ๋จํด์ผ ํจ. ํนํ ์ธ๋ถ API์ Polling ์์ฒญ์ด ๋ชฐ๋ฆฌ๋ ๊ตฌ์กฐ์์ DB ๋ณ๋ชฉ์ ๊ณง ์ฒด๊ฐ ์ฅ์ ๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์, ์ปค๋ฅ์ ํ(HikariCP)์ Active/Pending ์ํ๋ฅผ ํต์ฌ ์ ํ ์งํ๋ก ์ ์ ํจ.
2. ๋ฌธ์ ์ํฉ
CloudWatch Agent ๊ธฐ๋ฐ์ผ๋ก JVM/GC ๋ฑ ๊ธฐ๋ณธ ์งํ๋ ์์ง ์ค์ด์์ผ๋, ์ ์ ์๋น์ค ์์ ์ฑ์ ์ง๊ฒฐ๋๋ HikariCP ์ปค๋ฅ์ ํ ๋ฉํธ๋ฆญ์ด CloudWatch์ ๋ํ๋์ง ์๋ ์ํฉ์ด ๋ฐ์ํจ. Actuator/JMX์์๋ ๋ฉํธ๋ฆญ ์กฐํ๊ฐ ๊ฐ๋ฅํ์ผ๋, โ์กฐํ ๊ฐ๋ฅโ๊ณผ โCloudWatch๋ก ์ ์กโ์ ๋ณ๊ฐ๋ก ๋์ํ๊ณ ์์์.
3. ํด๊ฒฐ ๋ฐ ๋ถ์ ๊ณผ์
3.1 ๋จ๊ณ 1: ์์กด์ฑ ๋ฐ ๊ถํ ๊ธฐ๋ฐ์ ๊ธฐ๋ณธ ์ฐ๋ ์๋
micrometer-registry-cloudwatch๋ฅผ ์ ์ฉํ๊ณ , CloudWatch ์ ์ก์ ํ์ํ IAM ๊ถํ(์: PutMetricData)์ ๋ถ์ฌํจ.
Actuator/JMX์์ ๊ฐ์ด ๋ณด์ด๋ ๊ฒ์ ๊ทผ๊ฑฐ๋ก โ์๋ ์ ์ก๋ ๊ฒโ์ด๋ผ ๊ธฐ๋ํ์ผ๋, CloudWatch ์ฝ์์์ ์งํ๊ฐ ๊ณ์ ๋น์ด์๋ ์ํ๊ฐ ์ ์ง๋จ.
์ด ๋จ๊ณ์์ ์์กด์ฑ ์ถ๊ฐ๋ง์ผ๋ก ์๋ ์ฐ๋์ด ์์ฑ๋์ง ์์์ ํ์ธํจ.
3.2 ๋จ๊ณ 2: CloudWatchMeterRegistry ์๋ Bean ๋ฑ๋ก์ผ๋ก ์ ์ก ๊ฒฝ๋ก ๊ฐ์ ํ์ฑํ
Spring Boot ์๋ ์ค์ ๋ง์ผ๋ก๋ ์ ์ก ์ฃผ๊ธฐ(step), namespace, registry ํ์ฑํ ์ฌ๋ถ๊ฐ ๋ช
ํํ ์ ์ด๋์ง ์๋ ๋ฌธ์ ๊ฐ ํต์ฌ ์์ธ์ผ๋ก ํ๋จํจ.
๋ฐ๋ผ์ CloudWatchConfig๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๊ณ CloudWatchMeterRegistry๋ฅผ ์๋ Bean์ผ๋ก ๋ฑ๋กํ์ฌ ์ ์ก ๋งค์ปค๋์ฆ์ ๊ฐ์ ๋ก ํ์ฑํํจ.
์ด ์กฐ์น ์ดํ CloudWatch์ HikariCP ๋ฉํธ๋ฆญ์ด ์ค์ ๋ก ์์ฑ๋๋ ๊ฒ์ ํ์ธํ์ฌ, โ์์ง โ ๋ ์ง์คํธ๋ฆฌ ๋ฑ๋ก โ ์ ์กโ ํ์ดํ๋ผ์ธ์ด ์ ์ํ๋์์์ ๊ฒ์ฆํจ.
3.3 ๋จ๊ณ 3: ๋น์ฉ ์๊ธฐ ๊ฐ์ง ๋ฐ ํํฐ๋ง ์ ๋ต ์ ์ฉ
์๋ ๋ฑ๋ก ์ดํ ๋ฌธ์ ๊ฐ ํ๋ ๋ ๋๋ฌ๋จ. HikariCP๋ง ์ฌ๋ผ์ค๋ ๊ฒ์ด ์๋๋ผ, JVM/Tomcat/CPU/์ค๋ ๋ ๋ฑ Actuator ๊ธฐ๋ฐ ์งํ ์ ๋ถ๊ฐ CloudWatch๋ก ์ ์ก๋๋ฉด์ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ด 600๊ฐ ์ด์ ์์ฑ๋๋ ํ์์ด ๋ฐ์ํจ. CloudWatch๋ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ์ด ๋์ด๋ ์๋ก ๋น์ฉ์ด ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์, ์ด ์ํ๋ฅผ ์ ์งํ๋ฉด ์ ์์ญ๋ง ์ ๋จ์ ๊ณผ๊ธ ์ํ์ด ํ์คํ๋จ. ์ด์ ๋ฐ๋ผ ์ด์ ๊ด์ ์์ โ๋ง์ด ๋ชจ์ผ๋ ๋ชจ๋ํฐ๋งโ์ด ์๋๋ผ โํ์๋ง ๋ชจ์ผ๋ ๋ชจ๋ํฐ๋งโ์ผ๋ก ๋ฐฉํฅ์ ์ ํํจ.
์ต์ข
์ ์ผ๋ก MeterFilter๋ฅผ ์ ์ฉํ์ฌ hikaricp ๊ด๋ จ ์งํ๋ง ํ์ฉํ๊ณ ๋๋จธ์ง๋ ์ฐจ๋จํจ.
์ด๋ก์จ ๊ฐ์์ฑ(Active/Pending ๋ชจ๋ํฐ๋ง)๊ณผ ๋น์ฉ(๋ถํ์ ์งํ ์ ์ก ์ฐจ๋จ)์ ๋์์ ๋ฌ์ฑํจ.
4. CloudWatch๋ก๋ง ๋ชจ๋ํฐ๋งํ ์ด์
4.1 V1 ๋จ๊ณ์ ๋ชฉํ๊ฐ โ์ต๋จ ์๊ฐ ๋ด ์ด์ ๊ฐ์์ฑ ํ๋ณดโ์์
V1์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋ฒฝํ ๊ด์ธก ํ๋ซํผ ๊ตฌ์ถ์ด ์๋๋ผ, ์ฅ์ ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์งํ๊ณ ์์ธ์ ์ ๊ทผ ๊ฐ๋ฅํ ์์ค์ ๊ฐ์์ฑ์ ์ต์ ๋น์ฉ/์ต์ ๋ณต์ก๋๋ก ํ๋ณดํ๋ ๊ฒ์ด์์. CloudWatch๋ ์ด๋ฏธ AWS ์ธํ๋ผ ์์์ ๊ธฐ๋ณธ ๊ด์ธก ์ฑ๋๋ก ์๋ฆฌ ์ก๊ณ ์๊ณ , IAM/๋ค์์คํ์ด์ค/๋์๋ณด๋๋ก ๋ฐ๋ก ์ด์ ๊ฐ๋ฅํ ์ฅ์ ์ด ์์ด ์ด๊ธฐ ๋ชฉํ์ ๋ถํฉํจ.
4.2 Prometheus ๋์ ์ โ์ธํ๋ผ ์ด์ ์ฑ ์โ์ด ํจ๊ป ๋ฐ๋ผ์ด
Prometheus๋ฅผ ์ ํํ๋ฉด ๋จ์ํ ๋ฉํธ๋ฆญ์ ๋ณด๋ ์์ค์ ๋์ด, ์๋ฒ/์คํ ๋ฆฌ์ง/๊ณ ๊ฐ์ฉ์ฑ/์ ๊ทธ๋ ์ด๋/๋ฐฑ์ /๋ณด์๊น์ง ์ด์ ํญ๋ชฉ์ด ํ์ฅ๋จ. ์ฆ โ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅโ์ ์ป๋ ๋์ โ๋ชจ๋ํฐ๋ง ํ๋ซํผ ์ด์โ์ด๋ผ๋ ์๋ก์ด ์ ํ์ ํ๋ ๋ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์์ง. V1์์๋ ์ ๊ท ์ด์ ๋ถํ๋ฅผ ๋๋ฆฌ๊ธฐ๋ณด๋ค, ๊ธฐ์กด AWS ์ด์ ํ๋ฆ์ ๋ น๋ CloudWatch๋ก ์ง์คํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์์.
4.3 ๋น์ฉ ๊ด์ ์์ Prometheus๊ฐ ํญ์ ๋ ์ธ๋ค๊ณ ๋จ์ ํ ์ ์์์
Prometheus๋ ๋ฉํธ๋ฆญ ๊ฐ์ ์์ฒด ๊ณผ๊ธ์ ์์ง๋ง, ๊ทธ ๋์ ํด๋ฌ์คํฐ ๋ฆฌ์์ค(๋ฉ๋ชจ๋ฆฌ/๋์คํฌ)์ ๋ณด๊ด ์ ์ฑ (์ฅ๊ธฐ ์ ์ฅ ์ Thanos/Mimir ๋ฑ) ๋น์ฉ์ด ๋ฐ์ํจ. V1์์๋ โ์ฅ๊ธฐ ๋ถ์โ๋ณด๋ค โ์ฆ์ ์ฅ์ ๊ฐ์งโ๊ฐ ์ฐ์ ์ด์๊ณ , ํ์ํ ์งํ๋ฅผ HikariCP๋ก ์ขํ๋ฉด CloudWatch ๋น์ฉ๋ ํต์ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ CloudWatch๊ฐ ๋ ํ์ค์ ์ธ ์ ํ์ด์์.
4.4 ๊ฒฐ๋ก ์ ์ผ๋ก โV1์ CloudWatch, ํ์ฅ ๋จ๊ณ์์ Prometheusโ ์ ๋ต์ด ์ ํฉํ์
ํ ๋จ๊ณ์์๋ CloudWatch๋ก ํต์ฌ ์งํ ์ค์ฌ์ ์ต์ ๊ด์ธก ์ฒด๊ณ๋ฅผ ๋จผ์ ์์ฑํจ์ผ๋ก์จ ์ด์ ์์ ์ฑ์ ํ๋ณดํจ. ์ดํ ํธ๋ํฝ ์ฑ์ฅ๊ณผ ํจ๊ป SLI/SLO ๊ธฐ๋ฐ์ ์ฅ๊ธฐ ๋ถ์, ๊ณ ํด์๋ ๋ฉํธ๋ฆญ/์นด๋๋๋ฆฌํฐ ํ์ฅ, ์๋น์ค ๊ฐ ์์ธ ๋น๊ต๊ฐ ํ์ํด์ง๋ ์์ ์ Prometheus(๋๋ Managed Prometheus)๋ก ํ์ฅํ๋ ๋ก๋๋งต์ด ์์ฐ์ค๋ฌ์.
5. ์ด์ ์ ์ฉ ๋ฐฉ์ ์์ฝ
HikariCP ํต์ฌ ์งํ(Active, Pending ์ค์ฌ)๋ฅผ CloudWatch๋ก ์ ์กํ๊ณ , ๋์๋ณด๋/์๋ ๊ธฐ์ค์ โDB ๋ณ๋ชฉ ์กฐ๊ธฐ ๊ฐ์งโ ๊ด์ ์ผ๋ก ์ค์ ํจ.
๋ถํ์ํ ๋ฉํธ๋ฆญ์ MeterFilter๋ก ์ฐจ๋จํ์ฌ, ๋ชจ๋ํฐ๋ง์ด ๋น์ฉ ๋ถ์ฑ๋ก ๋ณ์ง๋๋ ๊ฒ์ ์๋ฐฉํจ.
6. ๋ฐฐ์ด ์
โ์์กด์ฑ ์ถ๊ฐ = ์๋ ์ฐ๋โ์ด ์๋๋ผ, ํด๋ผ์ฐ๋ ์ฐ๋์์๋ ์ ์ก ์ฃผ๊ธฐ/๋ ์ง์คํธ๋ฆฌ ํ์ฑํ/๊ถํ/๋ค์์คํ์ด์ค๋ฅผ ์๋น์ค๊ฐ ์ง์ ์ ์ดํด์ผ ํจ์ ํ์ธํจ. ๋ํ ๋ชจ๋ํฐ๋ง์ ๋ง์ด ์๋ ๊ฒ์ด ๋ชฉ์ ์ด ์๋๋ผ, ์ฐ๋ฆฌ ์๋น์ค์์ ์ค์ ์ฅ์ ๋ฅผ ์๋น๊ฒจ ๊ฐ์งํ๋ ํต์ฌ ์งํ๋ฅผ ์ ๋ณํ๋ ์ค๊ณ ํ๋์์ ์ฒด๊ฐํจ. ๋น์ฉ๊น์ง ํฌํจํด์ ์ค๊ณํด์ผ ์ด์์์ ์ง์ ๊ฐ๋ฅํ ๋ชจ๋ํฐ๋ง์ด ๋๋ค๋ ์ ์ V1์์ ํ์ตํจ.