Datadog ์๋ฒ ๋ชจ๋ํฐ๋ง ์ดํด๋ณด๊ธฐ
์ด๋ฏธ์ง๋ฅผ ํด๋ฆญํ๋ฉด ํฐ ํ๋ฉด์์ ๋์ฑ ์์ธํ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
Logs
๋จผ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ก๊ทธ ํ์ธ์ ๋๋ค. ์ข์ธก ๋ฉ๋ด์์ Logs๋ฅผ ์ ํํ๋ฉด Datadog๊ณผ ์ฐ๋๋ ๋ชจ๋ ์๋น์ค์ ๋ก๊ทธ๋ฅผ ํ๋์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ํ๋ ํน์ ์๋น์ค๋ฅผ ์ ํํ์ฌ ๊ทธ ์๋น์ค์ ๋ก๊ทธ๋ง์ ์์ธํ๊ฒ ์กฐํํ ์๋ ์์ต๋๋ค.
๋ก๊ทธ ํญ๋ชฉ์ ํด๋ฆญํ๋ฉด ํด๋น ๋ก๊ทธ์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ Trace์ Metrics ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ ์ฉํ๋ฐ, ๋ก๊ทธ๊ฐ ์์ฑ๋๊ธฐ๊น์ง์ ๊ฒฝ๋ก์ ๋ก๊ทธ ๋ฐ์ ์์ ์ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋์คํฌ I/O ๋ฑ์ ์ค์ํ ๋ฉํธ๋ฆญ์ ์์ธํ๊ฒ ํ์ ํ ์ ์์ต๋๋ค(Trace์ Metrics ํ๋ฉด์ ์๋์์ ๋์ฌ ํ๋ฉด๊ณผ ๋์ผํ๊ธฐ์ ์๋์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค).
APM
APM(Application Performance Monitoring)์ ๊ธฐ๋ฅ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ๋๋ ์์ฒญ๋ค์ ์์ธํ๊ฒ ์ถ์ ํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค. ์ ๊ฐ ์๊ฐํ๊ธฐ์ APM์ Datadog์ ํต์ฌ ๊ธฐ๋ฅ์ด์ ๊ฝ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
0. Service Summary
APM์ ๋ฉ์ธ ํ๋ฉด์์๋ ๊ฐ์ฅ ๋จผ์ Service Summary๋ฅผ ํ์ธํ ์ ์๋๋ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋น ๋ฅด๊ฒ ํ์ ํ๊ณ ๋ถ์ํ๋ ๋ฐ ๋์์ด ๋๋ ํต์ฌ ์งํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํด๋น ๊ทธ๋ํ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋์ผ๋ฉด 4๊ฐ์ง์ ๋ชจ๋ ์งํ์์ ๋์ผํ ์๊ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ข์ธก ์๋จ๋ถํฐ ํด๋น ์นธ์ด ์๋ฏธํ๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Requests and Error: ํน์ ์๊ฐ ๋์ ์๋น์ค๋ก ๋ค์ด์จ ์์ฒญ์ ์ด ์์ ๊ทธ์ค ์๋ฌ๋ก ์๋ต๋ ์์ฒญ์ ๋น์จ์ ๋ณด์ฌ์ค๋๋ค.
- Errors: ์๋น์ค์์ ๋ฐ์ํ ๋ชจ๋ ์๋ฌ์ ์๋ฅผ ์ง๊ณํฉ๋๋ค.
- Latency: ์ง์ฐ ์๊ฐ(๋๋ ๋๊ธฐ ์๊ฐ) ์งํ๋ก์จ ์๋น์ค๊ฐ ์์ฒญ์ ๋ฐ๊ณ ์๋ต์ ์๋ฃํ๋ ๋ฐ ๊ฑธ๋ฆฐ ํ๊ท ์๊ฐ์ ์ธก์ ํฉ๋๋ค. ๋ฐ๋ฆฌ์ด(ms) ๋จ์๋ก ํ์๋ฉ๋๋ค.
- % of TIme Spent: ์๋น์ค๊ฐ ์ฒ๋ฆฌํ๋ ์์ฒญ ์ค์์ ํน์ ์ ํ์ ์์ (DB ์ฟผ๋ฆฌ, ์ธ๋ถ API ํธ์ถ)์ ์์๋ ์๊ฐ์ ๋น์จ์ ๋ํ๋ ๋๋ค.
๊ทธ๋ฆฌ๊ณ APM์ Service Summary ์๋์์๋ ๋ค์ํ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋์ฑ ์์ธํ๊ฒ ๋ถ์ํ ์ ์์ต๋๋ค. ๊ทธ์ค์์ ์ ๋ Resources, JVM Metrics, Traces๋ฅผ ์ฃผ๋ก ํ์ธํ๋ ๋งํผ ์ด ์ธ ๊ฐ์ง์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. APM Resources
๋จผ์ Resources ์นดํ ๊ณ ๋ฆฌ์ ๋๋ค. ์ฌ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ API์ ์งํ์ ์ฑ๋ฅ๋ค์ API๋ณ๋ก ๋์ฑ ์์ธํ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
ํด๋น API๋ฅผ ํด๋ฆญํ๋ฉด ์กฐ๊ธ ๋ ์ธ๋ถ์ ์ผ๋ก Resources ์ฌ์ฉ ํํฉ์ ์ ์ ์๋๋ฐ, Dependencies๋์์๋ ์ ์ด๋ฏธ์ง์ฒ๋ผ ํด๋น API๊ฐ ์ด๋ค ์ธ๋ถ ๋ฆฌ์์ค์ ์์กด ๊ด๊ณ์ ์์ผ๋ฉฐ, ๋ช ๋ฒ์ ์์ฒญ์ด ์ค๊ฐ๋์ง ํ๋์ ํ์ธํ ์ ์์ต๋๋ค.
2. APM JVM Metrics
๋ค์์ JVM Metrics์ ๋ํ ์ค๋ช ์ ๋๋ค.
- Heap Usage: JVM์์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋๊ณผ ์ฌ์ฉ๋์ ๋ํ๋ ๋๋ค. ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ง์์ ์ผ๋ก ๋์ ์ํ๋ฅผ ์ ์งํ๋ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์๋ GC ์ด์๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ ์์ํฉ๋๋ค.
- Non-Heap Usage: JVM์์ ํด๋์ค ๋ฉํ๋ฐ์ดํฐ, ์ปดํ์ผ๋ ์ฝ๋ ๋ฑ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉ๋์ ๋ํ๋ ๋๋ค. ๋นํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ ๊ฒ์ ํด๋์ค ๋ก๋ฉ์ด๋ JIT ์ปดํ์ผ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์๋ฏธํ ์ ์์ต๋๋ค.
๊ฐํน JVM Metrics์ ๋ณด๋๋ผ๋ ํด์ํ์ง ๋ชปํ๋ ๋ถ๋ค์ด ์๋๋ฐ, ์ ์ด๋ฏธ์ง์ฒ๋ผ ๊ทธ๋ํ๊ฐ ์ผ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋์ด๊ฐ ๋ฎ์์ง๋ ํจํด์ ๋ณด์ธ๋ค๋ฉด ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ ์์ ์ผ๋ก ์๋ํ๊ณ ์์์ ์๋ฏธํฉ๋๋ค. ๋ง์ฝ ์ ์ด๋ฏธ์ง์ ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋์ด๊ฐ ๋ฎ์์ง์ง ์๊ณ ๊ณ์ํด์ ์ฆ๊ฐํ๋ ํจํด์ ๋ณด์ผ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ฌํด๋ด์ผ ํฉ๋๋ค.
3. APM Traces
๋ค์์ Traces์ ๋๋ค. Traces๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ์ํ๋๋ ๊ฐ๋ณ ์์ฒญ์ ๊ฒฝ๋ก์ ์ฑ๋ฅ์ ์์ธํ๊ฒ ์ถ์ ํ ์ ์์ต๋๋ค. ์ ๋ ์ฃผ๋ก Traces๋ฅผ ํตํด ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํค๋ API๋ฅผ ์๋ณํ๊ณ ๊ฐ์ ํ๋ฉฐ, ๊ฐ์ ํ์ ์ฑ๋ฅ ๋ณํ๋ ์ฌ๊ธฐ์ ํ์ธํฉ๋๋ค.
DURATION ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ API๋ฅผ ์์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
์์ ๊ฐ์ด ๊ฒ์ ํํฐ๋ง์ ํตํด ์ํ๋ ์ ๋ณด๋ง ์ ๋ณํ ์ ์์ผ๋ฉฐ, ํด๋น ๋ก๊ทธ๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น ์์ฒญ์ ๊ฒฝ๋ก์ ์ฑ๋ฅ์ ๋ํ ๋์ฑ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ ์ด๋ฏธ์ง๋ A ํ๋ก์ ํธ์์ GET /v2/xxx API๋ฅผ ํธ์ถํ ๋ ๋ฐ์ํ๋ ๋ชจ๋ ๋ด๋ถ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ์ ๋ง๋๊ทธ๋ํ๋ฅผ ํตํด ์ฝ๋๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๋์ง, ์๋๋ฉด ์์ฐจ์ ์ผ๋ก ์คํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ณด๋ฉด ํ์ฌ ๋ฃจํธ API์ธ GET /v2/xxx๋ A ํ๋ก์ ํธ ๋ด์์ B ํ๋ก์ ํธ๋ฅผ ํธ์ถํ๋ ๋ก์ง์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด๋ ๋ง์ฝ B ํ๋ก์ ํธ๋ Datadog์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด, A ํ๋ก์ ํธ์ ๊ฒฝ๋ก ์ถ์ ์ ํตํด B ํ๋ก์ ํธ์ ๊ฒฝ๋ก๊น์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ํ Error ๋ก๊ทธ๋ฅผ ํตํด Flame Graph์ ์ ๊ทผํ์ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ทธ๋ํ๊ฐ ๋นจ๊ฐ์์ผ๋ก ํ๊ธฐ๋์ด ๋ด๋ถ์ ์ด๋ค ๋ก์ง์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ์์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก Span List์์๋ ํธ์ถ๋๋ ๋ด๋ถ ๋ก์ง(๊ฒฝ๋ก) ๋ค์ ๋ณด๋ค ํ์คํ๊ฒ ์ ๋ถ ํ์ธํ ์ ์๋๋ฐ, ๊ฐ ๊ฒฝ๋ก์์ ์์๋ ์๊ฐ, ์ ์ก๋ ์ฟผ๋ฆฌ์ ์ด ํ์, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ฟผ๋ฆฌ๊ฐ ์ ์ก๋์๋์ง๋ ํ์ธ๊ฐ๋ฅํฉ๋๋ค.
์ด์ ์ Flame Graph์ Span List๋ฅผ ํจ๊ป ํ์ธํ๋ฉด ๋ก์ง์ ๋ณ๋ชฉ์ง์ ์ ๋ณด๋ค ์ฝ๊ฒ ํ์ ํ์ฌ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Map์์๋ ํด๋น API๋ฅผ ํธ์ถํ์ ๋ ์ผ์ด๋๋ ๊ณผ์ ๋ค์ ๋ง์ธ๋๋งต ํ์์ผ๋ก ์ ๊ณตํด ์ฃผ์ด ์ ์ฒด์ ์ธ ํ๋ฆ์ ์๊ฐ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง APM์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์ค์ผ๋ก ์ถ๋ฐ์ ์ผ๋ก ์ค์ ํ๊ณ ์ถ์ ํ๋๋ฐ, ๋ฐ๋๋ก DB๋ฅผ ์ถ๋ฐ์ ์ผ๋ก ์ผ์ ์ญ์์ผ๋ก ์ถ์ ํ ์๋ ์์ต๋๋ค. ์๋๋ ์ญ์ผ๋ก DB๋ก๋ถํฐ ํธ์ถํ๋ ๋ก์ง์ ์ ๋ณํ๋ ๊ณผ์ ์ ๋๋ค.
Infrastructure
๋ง์ฝ ์ปจํ ์ด๋ ํ๊ฒฝ์์ ๋์ํ๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ CPU ์ฌ์ฉ๋์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด Infrastructure์ Container์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
Metrics
DB์ ์ปดํจํ CPU ์ฌ์ฉ๋ฅ ์ ํ์ธํ๊ณ ์ถ์ผ๋ฉด Metrics์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ฆฌ
์ ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ ์ค์ฌ์ผ๋ก ์ค๋ช ํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ ์๋ ์ ๊ฐ ์ธ๊ธํ์ง ์์ ๋ ๋ง์ ์ ์ฉํ ๊ธฐ๋ฅ๋ค์ด ์์ ์ ์์ต๋๋ค. ๋ํ ์ ๊ฐ ์ง์ ๋ฐ์ดํฐ๋ ์ ์ฐ๋ํ๋ ๊ณผ์ ์ ๊ฑฐ์น์ง ์์ ๋ค๋ฅธ ํ์ฌ์ ์ฌ์ฉ์๋ค๋ ์ ์ ๋์ผํ ๊ตฌ์ฑ์ผ๋ก ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์์ง๋ ๋ชจ๋ฅด๊ฒ ์ผ๋, ์ด ๊ธ์ด ์ด๋ ์ ๋ ๋ฐ์ดํฐ๋ ์ ํ์ฉํ๋ ๋ฐ ์์ด ๊ฐ์ด๋๊ฐ ๋์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ ํผ๋๋ฐฑ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.