
eks pod๋ค์ log๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํ์ฌ datadog์ ์ฌ์ฉ
elastic search์ ๋น์ทํ ๊ฐ๋
๋ชจ๋ ๋
ธ๋์ ํ๋ ์คํ:
๋ฐ๋ชฌ์
์ ์ง์ ๋ ๋ชจ๋ ๋
ธ๋(ํน์ ํน์ ๋ ์ด๋ธ์ด ์๋ ๋
ธ๋)์ ๋์ผํ ํ๋๋ฅผ ํ๋์ฉ ๋ฐฐํฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Datadog ์์ด์ ํธ๋ฅผ ๋ฐ๋ชฌ์
์ผ๋ก ๋ฐฐํฌํ๋ฉด, ํด๋ฌ์คํฐ์ ์๋ ๋ชจ๋ ๋
ธ๋๋ง๋ค Datadog ์์ด์ ํธ ํ๋๊ฐ ํ๋์ฉ ์คํ๋ฉ๋๋ค.
๋
ธ๋ ์ถ๊ฐ ์ ์๋ ๋ฐฐํฌ:
์๋ก์ด ๋
ธ๋๊ฐ ํด๋ฌ์คํฐ์ ์ถ๊ฐ๋๋ฉด, ๋ฐ๋ชฌ์
์ ์๋์ผ๋ก ๊ทธ ๋
ธ๋์ ํ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ๋ฐ๋๋ก ๋
ธ๋๊ฐ ์ญ์ ๋๋ฉด ํด๋น ๋
ธ๋์ ํ๋๋ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
์ฃผ๋ก ์์คํ
๋ ๋ฒจ์ ์์
์ ์ฌ์ฉ:
๋ก๊ทธ ์์ง: Fluentd, Logstash์ ๊ฐ์ ๋ก๊ทธ ์์ง๊ธฐ.
๋ชจ๋ํฐ๋ง ์์ด์ ํธ: Datadog, Prometheus ๋
ธ๋ ์ต์คํฌํฐ.
๋คํธ์ํน: CNI ํ๋ฌ๊ทธ์ธ, IP ๊ด๋ฆฌ, ๋คํธ์ํฌ ์ ์ฑ
๋ฑ.
'Daemon'์ ์๋ฏธ:
Unix/Linux์์ ๋ฐ๋ชฌ์ ์์คํ
๋ ๋ฒจ์์ ์ง์์ ์ผ๋ก ์คํ๋๋ฉฐ, ํน์ ์์
(์: ๋ก๊ทธ ์์ง, ๋คํธ์ํฌ ์๋น์ค ์ ๊ณต ๋ฑ)์ ์ํํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์๋ฒ์ธ httpd๋ ๋ก๊ทธ ์์ง๊ธฐ์ธ syslogd ๊ฐ์ ์๋น์ค๊ฐ ๋ฐ๋ชฌ์
๋๋ค.
Kubernetes์ 'Set':
Set์ ์ฌ๋ฌ ๊ฐ์ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๋ฌถ์ด ๊ด๋ฆฌํ ๋ ์ฌ์ฉ๋๋ Kubernetes ์ฉ์ด์
๋๋ค. ์๋ฅผ ๋ค์ด, ReplicaSet์ ๋์ผํ ํ๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์งํ๋ ๋ฐ๋ฉด, DaemonSet์ ๋ชจ๋ ๋
ธ๋์ ๋์ผํ ํ๋๋ฅผ ํ๋์ฉ ๋ฐฐํฌํฉ๋๋ค.
๋ฐ๋ผ์, 'DaemonSet'์ด๋ผ๋ ์ด๋ฆ์ "๊ฐ ๋ ธ๋๋ง๋ค ๋ฐฐํฌ๋๋ ๋ฐ๋ชฌ๊ณผ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋๋ฅผ ์ธํธ๋ก ๊ด๋ฆฌํ๋ค"๋ ์๋ฏธ๋ก ์ดํดํ ์ ์์ต๋๋ค.
aws load balancer์์ health check url ์ค์ ์ ์ํด์ฃผ๋ datadog์์ ๊ณ์ํด์ 401 error ๊ฐ ๋ฌ๋ค.
Django health check url์ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ๊ณ load balancer health check url์ ์ค์ ํด์ฃผ์ด ํด๊ฒฐํ์๋ค.(์ด ์๋ฒ์ ํด๋นํ๋ pod load balancer ์ฐพ๊ธฐ ์ํ์ฌ rancher์์ pod IP ์ฃผ์ ํ์ธํจ)
๋ํ, health check ์ฃผ๊ธฐ๋ฅผ 300์ผ๋ก ๋๋ฆผ์ผ๋ก datadog์ผ๋ก api request ๋ชจ๋ํฐ๋ง ํจ์จ์ฑ์ด ๋์์ก๋ค.
โ์๋น์ค ๋ฐ์นญ์ผ๋ก ์ ์ ๊ฐ ๋์ด๋๋ฉด health check ์ฃผ๊ธฐ ์งง๊ฒ ๋ฐ๊ฟ์ผํจ.
๐llm-ops fast api ์๋ฒ๋ ์ ์ฉ์์ผ์คฌ๋ค.
@app.get("/health") async def health_check(): # ํ์ํ ์ํ ์ฒดํฌ ๋ก์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค. # EX)๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ํ๋ ์ธ๋ถ ์๋น์ค ์ํ ํ์ธ ๋ฑ. return JSONResponse(content={"status": "ok"}, status_code=200)
datadog์ ํ์ฉํด, 500์๋ฌ๊ฐ ๊ฐ์ง๋์์ ๋ slack์ ์๋ฆผ์ด ๊ฐ๋๋ก ํด์ผํ๋ค.
ํด๋น ์๋น์ค๋ workflow๋ผ๋ ์ ๋ฃ ์๋น์ค๊ฐ ํ์ํ๋ค.
๋ฐ๋ผ์, ์ถํ์ ์ค์ ์ฌ์ฉ์๊ฐ ์๊ธฐ๋ฉด pro version์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ํ๋ค.