Prometheus
๐ฟ Prometheus
๋ฉํธ๋ฆญ ๊ธฐ๋ฐ์ ์คํ์์ค ๋ชจ๋ํฐ๋ง ์์คํ
- PromQL ๊ธฐ๋ฐ์ ๋จ์ํ๋ฉด์ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ๋ชจ๋ธ
Monitoring(๋ชจ๋ํฐ๋ง)
์ข ๋ฅ
- ์๋ฆผ(alerting): ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๊ธฐ๋ ์์ ์ ํ์
- ๋๋ฒ๊น (Debugging): ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ์ ๊ท๋ช , ํด๊ฒฐ
- ์ถ์ธํ์
(trending): ๊ธด๊ธํ์ง ์์ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ์๋ ์์คํ
์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๊ณ ์๊ฐ์ ๋ฐ๋ผ ๋ณํํ๋์ง๋ ํ์ธ
- ์๋ฆผ๊ณผ ๋๋ฒ๊น ์ ๋ณดํต ๋ช ๋ถ๋ถํฐ ๋ช ์๊ฐ๊น์ง ์๊ฐ ๋จ์๋ก ๋ฐ์ํ๊ธฐ ๋๋ฌธ
- ํ๋ฌ๋ฐ(Plumbing): ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- ๊ฒฐ๊ตญ ๋ชจ๋ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ
๋ฒ์ฃผ
- ํ๋กํ์ผ๋ง(profiling): ๋ชจ๋ ์๊ฐ์ ๋ํด ๋ชจ๋ ์ด๋ฒคํธ์ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ง ์ ์์ง๋ง ์ ํ๋ ๊ธฐ๊ฐ์ ์ผ๋ถ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผ
- Tcpdump: ์ง์ ๋ ํํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ธฐ๋ก(๋์คํฌ ๊ณต๊ฐ์ด ๋ถ์กฑํด ์ง ์ ์์)
- Debug builds: ํจ์ ํธ์ถ ํ์ด๋ฐ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์์ง(์ฑ๋ฅ์ ์ํฅ์ ๋ผ์นจ)
- eBPF: ํ์ผ ์์คํ ๋ถํฐ ๋คํธ์ํฌ ๊ธฐํธ๊น์ง ์ปค๋ ์ด๋ฒคํธ์ ๋ํด ์์ธํ๊ฒ ํ๋กํ์ผ๋ง
- ํธ๋ ์ด์ฑ(Tracing): ๊ด์ฌ ๊ธฐ๋ฅ์ ํต๊ณผํ๋ ์ดใ
ใน๋ถ ์ด๋ฒคํธ์ฒ๋ผ ์๋ฐฑ๊ฐ์ ์ด๋ฒคํธ ์คํน์ ์ด๋ฒคํธ์๋ง ์ง์คํ๋ค.
- ex) HTTP ์์ฒญ ์ค ํ๋๋ฅผ ์ํ๋งํ๊ณ ์ด ์์ฒญ์ ๋ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์บ์ ๊ฐ์ ๋ฐฑ์๋์ ํต์ ํ๋๋ฐ ์ผ๋ง๋ ์ค๋ ์๊ฐ์ด ์๋น๋์๋์ง ํ์ธ
- ๋ถ์ฐ ํธ๋ ์ด์ฑ(distributed tracing): ์๊ฒฉ ํ๋ก์์ ํธ์ถ์์ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋๋ ์์ฒญ์ ๊ณ ์ ํ ID๋ฅผ ์ถ๊ฐํด, ํด๋น ์์ฒญ์ด ์ฒ์ ๋์ด์ผ ํ๋์ง ์ฌ๋ถ ๋ฑ ํ๋ก์ธ์ค ์ ๋ฐ์ ๊ฑธ์น ์์ ์ ์ถ์ ํ๋ค.(Zipkin, Jaeger)
- ์ํ๋ง: ๋ฐ์ดํฐ ๋ณผ๋ฅจ ์ ์ง ๋ฐ ๊ณ์ธก ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ
- ๋ก๊น
(Logging): ์ ํ๋ ์ด๋ฒคํธ ์งํฉ์ ์ดํด๋ณด๊ณ ๊ฐ ์ด๋ฒคํธ์ ๋ํ ์ปจํ
์คํธ ์ผ๋ถ๋ฅผ ๊ธฐ๋ก
- ex) ์์ ๋๋ ๋ชจ๋ HTTP ์์ฒญ์ด๋ ๋ฐ์ ๋๋ ๋ชจ๋ DB ํธ์ถ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ดํด๋ณด๊ณ ๊ธฐ๋ก
- ๋ฒ์ฃผ
- ํธ๋์ญ์ ๋ก๊ทธ(Transaction logs): ๋งค์ฐ ์ค์ํจ. ์ฃผ๋ก ๋น์ฉ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ฌ์ฉํ๋ ์ฃผ์๊ธฐ๋ฅ์ด ํธ๋์ญ์ ๋ก๊ทธ์ ์ํจ
- ์์ฒญ ๋ก๊ทธ(request logs): ๋ชจ๋ HTTP ์์ฒญ์ด๋ DB ํธ์ถ์ ์ถ์ ํ๋ ๊ฒฝ์ฐ์ ๋ก๊ทธ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ ๋ด๋ถ ์ต์ ํ์ ๊ตฌํ์ ์ฐ์
- ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ(application logs): ํ๋ก์ธ์ค ์์ฒด์ ๊ดํ ๋ก๊ทธ
- ๋๋ฒ๊ทธ ๋ก๊ทธ(Debug logs): ์์ฑ๊ณผ ์ ์ฅ์ ๋น์ฉ์ด ๋ง์ด ๋ฌ
- ์๋ก๋ ELK ์คํ๊ณผ ๊ทธ๋ ์ด๋ก๊ทธ ๋ฑ์ด ์๋ค.
- ๋งคํธ๋ฆญ(Metric): ์ปจํ
์คํธ๋ฅผ ๋๋ถ๋ถ ๋ฌด์ํ๊ณ ๋ค์ํ ์ ํ์ ์ด๋ฒคํธ์ ๋ํด ์๊ฐ์ ๋ฐ๋ฅธ ์ง๊ณ(aggregation)์ ์ถ์
- ex) HTTP ์์ฒญ ํ์, ์์ฒญ์ฒ๋ฆฌ ์๊ฐ, ํ์ฌ ์งํ์ค์ธ ์์ฒญ ์
- ๋ก๊ทธ์ ๋ง์ ํ๋๋ฅผ ๊ธฐ๋กํ ์๋ ์๋ค.
- ๋ฉํธ๋ฆญ์ ํ๋ก์ธ์ค ์ ๋ฐ์ ๊ฑธ์ณ ์ด๋ฒคํธ ์ ๋ณด๋ฅผ ์์งํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์นด๋๋๋ฆฌํฐ๊ฐ ์ ํ๋ ์ปจํ ์คํธ๋ 1~2๊ฐ ์ด์์ ํ๋๋ฅผ ๊ฐ์ง ์๋๋ค.
- ๋ก๊ทธ๋ ํ๊ฐ์ง ์ ํ์ ์ด๋ฒคํธ์ ๋ํด ๋ชจ๋ ์ ๋ณด๋ฅผ ์์งํ ์ ์์ง๋ง ์นด๋๋๋ฆฌํฐ๊ฐ ์ ํ๋์ง ์์ ์ปจํ ์คํธ์ ๋ํด ์๋ฐฑ ๊ฐ ํ๋๋ง ์ถ์ ํ ์ ์๋ค.
์ฆ Prometheus๋ ๊ฐ๋ณ ์ด๋ฒคํธ๋ณด๋ค๋ ์ ๋ฐ์ ์ธ ์์คํ ์ ์ํ์ ๋์, ์ฑ๋ฅ์ ์ถ์ ํ๋๋ก ์ค๊ณ๋์๋ค.
- ๋ค์๋งํด, Prometheus๋ ์ฒ๋ฆฌํ๋๋ฐ 4์ด๊ฐ ๊ฑธ๋ฆฐ 15๊ฐ์ ์์ฒญ์ด ๋ง์ง๋ง 1๋ถ๋์ ๋ฐ์ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก 40๋ฒ์ DB ํธ์ถ๊ณผ 17๋ฒ์ ์บ์ ํํธ์ 2๊ฑด์ ๊ณ ๊ฐ ๊ตฌ๋งค๊ฐ ์ผ์ด๋ฌ๋ค๋ ์ฌ์ค์๋ง ์ฃผ์๋ฅผ ๊ธฐ์ธ์
- ๊ฐ ํธ์ถ์ ๊ฑธ๋ฆฐ ๋น์ฉ๊ณผ ์ฝ๋ ๊ฒฝ๋ก๋ ํ๋กํ์ผ๋ง์ด๋ ๋ก๊น ์ ๊ด์ฌ์ฌ
๐ฟ Prometheus ๊ตฌ์กฐ
๋ด๋ถ ๋ชจ๋
- Retrival: ๋ฉํธ๋ฆญ์ ์์งํ ๋์ ์๋ฒ์ ์ ๊ทผํด์(HTTP) ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์๋๋ฉด Pushgateway๋ฅผ ํตํด์ ์ ๊ทผํ ์ ์๋ ๊ณณ์ ์๋ ๋ฐ์ดํฐ(inner server, firewall ๋ด๋ถ์ metric ๋ฑ)์ ๊ฐ์ ธ์ค๋ ์ญํ
- Proxy Forwarding์ ํด์ ์ ๊ทผํ ์ ์๋ ๊ณณ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ด๋ ์ฌ์ฉํ๋ ๋์(์ฌ๋ด๋ง์ ๋ฐ์ดํฐ๊ฐ ์์ด์ ์ธ๋ถ์์ scrape๋ฅผ ๋ชปํ๋ ๊ฒฝ์ฐ)
- TSDB: ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ์กฐํ๋ฅผ ํ ์ ์์ด์ผ ํ๋ฏ๋ก ์๊ณ์ด ๋ฐ์ดํฐ(time-series)๋ฅผ ์ ์ฅํ ์ ์๋ ์ ์ฅ์
- Local Storage, Remote Storage ๋๊ฐ์ง ๋ฐฉ๋ฒ ์ฌ์ฉ
๊ตฌ์กฐ
- Service Discovery: Prometheus๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ํฐ๋ง ๋์ ๋ชฉ๋ก์ ์ ์งํ๊ณ ์์ผ๋ฉฐ ๋์์ ๋ํ ip๋ ๊ธฐํ ์ ์ ์ ๋ณด๋ฅผ ์ค์ ํ์ผ์ ์ฃผ์ด์ ๋ชจ๋ํฐ๋ง ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- Exporter: ๋ชจ๋ํฐ๋ง Agent๋ก ํ๊ฒ ์์คํ ์์ ๋ฉํธ๋ฆญ์ ์ฝ์ด์ Prometheus๊ฐ ํ๋ง ํ ์ ์๋๋ก ํจ
- Push Gateway: ์๋น์ค ๋ ๋ฒจ์ ์ผ๊ด์ฒ๋ฆฌ ์์
์ ๋ํ ๋ฉํธ๋ฆญ ์บ์
- ์ผ๊ด์ฒ๋ฆฌ ์์
: ์๊ฐ ๋จ์๋ ์ผ ๋จ์ ๋ฑ์ ๋ฐฉ์์ผ๋ก ์ ๊ธฐ์ ์ธ ์ผ์ ์ ๋ฐ๋ผ ์ํ๋จ
- ์ง์์ ์ผ๋ก ๋์ํ์ง ์๊ธฐ ๋๋ฌธ์ Prometheus๋ ์ด๋ฌํ ์์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ํํ๊ฒ ์์งํ ์ ์๋ค.
- ์ค์ ๋ก ์ ์ฉํ๋ instance ๋ ์ด๋ธ์ด ์์ ์ฆ ํ๋์ ๋จธ์ ์ด๋ ํ๋ก์ธ์ค ์ธ์คํด์ค์ ๋ฌถ์ด๋ ๊ฒ์ด ์๋๋ผ ๋ชจ๋ ์๋น์ค์ ์ ์ฉ๋จ
- ์๋ฅผ ๋ค์ด ๋ชจ๋ ์๋น์ค์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํ๋ ์์ , ๊ณ ์ฅ๋ ๋จธ์ ์ ์ฐพ๊ธฐ์ํ ๋ฐ์ดํฐ ์ผํฐ์ ์ผ๊ด์ฒ๋ฆฌ ์์
- ์ผ๊ด์ฒ๋ฆฌ ์์
: ์๊ฐ ๋จ์๋ ์ผ ๋จ์ ๋ฑ์ ๋ฐฉ์์ผ๋ก ์ ๊ธฐ์ ์ธ ์ผ์ ์ ๋ฐ๋ผ ์ํ๋จ
- ๋ธ๋ฆฟ์ง: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฉํธ๋ฆญ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํจ
- ํ์: ํ๋ก๋ฉํ ์ฐ์ค ํ์ ํ์์ ํ์ฑํ ์ ์๋ ๊ธฐ๋ฅ(๊ทธ ๋ฐ์ ๋ชจ๋ํฐ๋ง ์์คํ ์ด๋ ๋ก์ปฌ ๋๊ตฌ์ ์ ๋ฌ ํ ์ ์๋ค.)
๐ฟ ๋ฉํธ๋ฆญ
์ข ๋ฅ
- ์นด์ดํฐ(Counter): ์ด๋ฒคํธ์ ๊ฐ์๋ ํฌ๊ธฐ๋ฅผ ์ถ์ ํ๋ฉฐ, ์ฃผ๋ก ํน์ ๊ฒฝ๋ก์ ์ฝ๋๊ฐ ์ผ๋ง๋ ์์ฃผ ์คํ๋๋์ง ์ถ์ ํ๋๋ฐ ์ฌ์ฉ
- ๊ฒ์ด์ง(Gauge): ํ์ฌ ์ํ์ ๋ํ ์ค๋
์ท
- ์นด์ดํฐ๊ฐ ์ผ๋ง๋ ๋นจ๋ฆฌ ์ฆ๊ฐํ๋๊ฐ(๋ฏธ๋ถ๊ฐ)์ธ ๋ฐ๋ฉด ๊ฒ์ด์ง๋ ์ค์ ๊ฐ์ ๊ด์ฌ์ ๋๋ค
- ex) ๋๊ธฐ์ด ๋ด์ ํญ๋ชฉ ๊ฐ์, ์บ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ํ์ฑ ์ค๋ ๋ ๊ฐ์,๋ ์ฝ๋๊ฐ ์ฒ๋ฆฌ๋ ๋ง์ง๋ง ์๊ฐ
- ์๋จธ๋ฆฌ(Summary): ๊ฐ์ ์ฆ๊ฐ์ ๊ด์ฐฐํ๊ณ ์ ์ฒด ํฉ๊ณ๋ฅผ ํ์ธ
- ํน์ ์๊ฐ ๋ด์ ์ ์ฒด ๊ฐ์ด๋ ์์ ๊ตฌ์ฑํ๊ธฐ ํธํจ
- ํ์คํ ๊ทธ๋จ(Histogram): ์๋ต ํฌ๊ธฐ, ์์ฒญ ๊ธฐ๊ฐ ๋ฑ start ~ end ๋จ์์ ์ฃผ๊ธฐ๋ด์์ ๊ฐ์ ์ฆ๊ฐ์ ๊ดํ ํ๊ณ ์ ์ฒด ํฉ๊ณ๋ฅผ ๋ชจ๋ ํ์ธ
- ๋ฒํท: 1๋ฐ๋ฆฌ์ด์์ 10์ด ๋ฒ์๋ฅผ ๋ค๋ฃฌ๋ค.(Web App์ ์ผ๋ฐ์ ์ธ ๋๊ธฐ์๊ฐ์ ๋ฒ์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํจ)
ํ์
<๋ฉํธ๋ฆญ ์ด๋ฆ="">{<๋ ์ด๋ธ ํค="">=<๋ ์ด๋ธ ๊ฐ="">, <๋ ์ด๋ธ ํค="">=<๋ ์ด๋ธ ๊ฐ=""> ...} <๋ฉํธ๋ฆญ ๊ฐ=""> [] ๋ฉํธ๋ฆญ>๋ ์ด๋ธ>๋ ์ด๋ธ>๋ ์ด๋ธ>๋ ์ด๋ธ>๋ฉํธ๋ฆญ>
- ๋ ์ด๋ธ: metric์ ํน์ง์ ํํ
- ๊ณ์ธก ๋ ์ด๋ธ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ์ ์ ์๋ ๋ด์ฉ์ ๋ด๊ณ ์์
- HTTP ์์ฒญ ํ์ ์ด๋ ํต์ ๋์ DB๋ฑ
- ๋์ ๋ ์ด๋ธ: ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ํน์ ๋ชจ๋ํฐ๋ง ๋์์ ์๋ณ
- ์นด๋๋๋ฆฌํฐ: Prometheus๊ฐ ํ๋ณดํ Metric ๊ฐ์
- ๊ณ์ธก ๋ ์ด๋ธ: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ์ ์ ์๋ ๋ด์ฉ์ ๋ด๊ณ ์์
- ํ์์คํฌํ: Unix epoch ์๊ฐ ๋ถํฐ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์์ ์ ์๋ก ํ์