Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜ ์„ฑ์žฅ์— ์žˆ์–ด ๋งค์šฐ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํ–‰๋™์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์„ฑ๋Šฅ ๋ถ„์„, ์˜ค๋ฅ˜ ์‹œ์—ฐ, ๊ฐ€์šฉ์„ฑ ๋ฐ ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋™์ผํ•œ ๋„๊ตฌ๋Š” ํšจ์œจ์ ์ด๊ณ  ์ƒ์‚ฐ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ์ˆ  ์Šคํƒ์ธ EFK(Elasticsearch)์™€ PLG(Loki)๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜์™€ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

EFK ์Šคํƒ

๋งค์šฐ ์ธ๊ธฐ ์žˆ๋Š” ELK ๋˜๋Š” EFK์— ๋Œ€ํ•ด ์ด๋ฏธ ๋“ค์–ด๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํƒ์€ Elasticsearch(๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€), Logstash ๋˜๋Š” FluentD(๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ์ง‘๊ณ„), ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ Kibana ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ž‘์—… ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

ํƒ„์„ฑ ๊ฒ€์ƒ‰ โ€” ๊ฒ€์ƒ‰ ๋ฐ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ถ„์‚ฐ ๊ฐœ์ฒด ์Šคํ† ๋ฆฌ์ง€์ž…๋‹ˆ๋‹ค. ๋กœ๊ทธ์™€ ๊ฐ™์€ ๋ฐ˜๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ํƒ์›”ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ์ •๋ณด๋Š” JSON ๋ฌธ์„œ๋กœ ์ €์žฅ๋˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ‰์ธํ™”๋˜๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๋ชจ๋“  ๊ณ ์œ  ๋‹จ์–ด์™€ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ˜์ „๋œ ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ ์ด๋Š” Apache Lucene ๊ฒ€์ƒ‰ ์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์œ ์ฐฝํ•จD ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์†Œ๋น„ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ธฐ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ JSON์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ ๊ฐ€์ง€์˜ ๋‹ค์–‘ํ•œ ํ™•์žฅ, ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›.

ํ‚ค๋ฐ” ๋‚˜ - ์‹œ๊ณ„์—ด ๋ถ„์„, ๊ทธ๋ž˜ํ”„ ๋ถ„์„, ๊ธฐ๊ณ„ ํ•™์Šต ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ Elasticsearch์šฉ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์•„ํ‚คํ…์ฒ˜

Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋ถ„์‚ฐ๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ฐ€์šฉ์„ฑ๊ณผ ๋ณต์›๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํ™•์žฅ ๋ฐฐํฌ์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋…ธ๋“œ์— ๊ฐœ๋ณ„ ์ž‘์—…์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์œ ํ˜•:

  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ - ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ XNUMX๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ํ•˜๋‚˜๋Š” ํ•ญ์ƒ ํ™œ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ - ์ธ๋ฑ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ˆ˜์ง‘ ๋…ธ๋“œ - ์ธ๋ฑ์‹ฑ ์ „์— ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์„ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ์กฐ์ • - ์š”์ฒญ ๋ผ์šฐํŒ…, ๊ฒ€์ƒ‰ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ๊ฐ์†Œ, ๋Œ€๋Ÿ‰ ์ธ๋ฑ์‹ฑ ์กฐ์ •
  • ๊ฒฝ๊ณ  ๋…ธ๋“œ โ€” ๊ฒฝ๊ณ  ์ž‘์—… ์‹œ์ž‘
  • ๊ธฐ๊ณ„ ํ•™์Šต ๋…ธ๋“œ - ๊ธฐ๊ณ„ ํ•™์Šต ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋” ๋†’์€ ๋ฐ์ดํ„ฐ ๊ฐ€์šฉ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ ์ „์ฒด์— ์ €์žฅ๋˜๊ณ  ๋ณต์ œ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

๊ฐ ๋ณต์ œ๋ณธ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜์ „๋œ ์ธ๋ฑ์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

์„ค์น˜

์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—, Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ helm install efk-stack stable/elastic-stack --set logstash.enabled=false --set fluentd.enabled=true --set fluentd-elastics

PLG ์Šคํƒ

Grafana Loki๋กœ ๋” ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ด ์•ฝ์–ด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋”๋ผ๋„ ๋†€๋ผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์–ด์จŒ๋“  ์ด ์Šคํƒ์€ ์ž…์ฆ๋œ ๊ธฐ์ˆ  ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ฐํ™” ๋„๊ตฌ์ธ Grafana์— ๋Œ€ํ•ด ์ด๋ฏธ ๋“ค์–ด๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Prometheus์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ์ œ์ž‘์ž๋Š” ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ๊ณ ์„ฑ๋Šฅ ๋กœ๊ทธ ์ง‘๊ณ„ ์‹œ์Šคํ…œ์ธ Loki๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. Loki๋Š” ์ €๋„ ์ž์ฒด๊ฐ€ ์•„๋‹Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ƒ‰์ธํ™”ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋น„์šฉ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

ํ”„๋กฌํ…Œ์ผ - ์šด์˜ ์ฒด์ œ์—์„œ Loki ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•˜๋Š” ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ผ ํŒŒ๋‚˜ Loki์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์‹œ๊ฐํ™” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

Loki๋Š” Prometheus์™€ ๋™์ผํ•œ ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด Kubernetes ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋กœํ‚ค ์•„ํ‚คํ…์ฒ˜

Loki๋Š” ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

๋˜ํ•œ ๋ชจ๋†€๋ฆฌ์‹ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋กœ์ปฌ ๊ฐœ๋ฐœ์ด๋‚˜ ์‚ฌ์†Œํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฐ์—… ๊ตฌํ˜„ ๋ฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์›Œํฌ๋กœ๋“œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ๊ฒฝ๋กœ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”์— ๋”ฐ๋ผ ๋ฏธ์„ธ ์กฐ์ • ๋ฐ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ณ  ๋กœ๊ทธ ์ˆ˜์ง‘ ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜).

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

๊ตฌ์„ฑ ์š”์†Œ :

ํ”„๋กฌํ…Œ์ผ โ€” ๋…ธ๋“œ์— ์„œ๋น„์Šค ์„ธํŠธ๋กœ ์„ค์น˜๋œ ์—์ด์ „ํŠธ๋กœ, ์ž‘์—…์—์„œ ๋กœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  Kubernetes API์— ์•ก์„ธ์Šคํ•˜์—ฌ ๋กœ๊ทธ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ณธ Loki ์„œ๋น„์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋งคํ•‘์€ Prometheus์™€ ๋™์ผํ•œ ํƒœ๊ทธ ์ง€์ • ๊ทœ์น™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์‚ด์ˆ˜ ์žฅ์น˜ โ€” ๋ฒ„ํผ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋น„์Šค ๋ฐฐํฌ์ž. ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋„์ฐฉํ•˜๋Š” ๋Œ€๋กœ ๋ธ”๋ก์œผ๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์‹ฑํฌ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ ํ•˜๋‚˜์˜ ์ˆ˜์‹  ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์— ์†ํ•˜๋Š” ๋กœ๊ทธ๋Š” ๋ชจ๋“  ๋ธ”๋ก์— ๋Œ€ํ•ด ๊ทธ ์ค‘ ํ•˜๋‚˜์—๋งŒ ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ฑํฌ ๋ง๊ณผ ์ˆœ์ฐจ ํ•ด์‹ฑ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฒฐํ•จ์„ฑ ๋ฐ ์ค‘๋ณต์„ฑ์„ ์œ„ํ•ด ์ด ์ž‘์—…์€ nํšŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค(๊ตฌ์„ฑ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ 3ํšŒ).

์„ญ์ทจ๊ธฐ - ์„œ๋น„์Šค ์ˆ˜์‹ ์ž. ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋กœ๊ทธ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์••์ถ•๋˜์–ด ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํ•ด์ง€๋ฉด ๋ธ”๋ก์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ”Œ๋Ÿฌ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•˜๊ณ , ๋กœ๊ทธ ๋ธ”๋ก์˜ ๋ฐ์ดํ„ฐ๋Š” ์ฒญํฌ(์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์žฌ์„ค์ • ํ›„ ์ˆ˜์‹ ์ž๋Š” ์ƒˆ ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋  ์ƒˆ ๋ธ”๋ก์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

์ƒ‰์ธ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, DynamoDB, Cassandra, Google BigTable ๋“ฑ

์ฒญํฌ โ€” ์ผ๋ฐ˜์ ์œผ๋กœ S3์™€ ๊ฐ™์€ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋˜๋Š” ์••์ถ• ํ˜•์‹์˜ ๋กœ๊ทธ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ์–ด - ๋ชจ๋“  ๋”๋Ÿฌ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋…์„œ ๊ฒฝ๋กœ. ์‹œ๊ฐ„ ๋ฒ”์œ„์™€ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ดํŽด๋ณธ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ฅผ ๋ณด๊ณ  ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ฝ๊ณ  ํ•„ํ„ฐ๋งํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

Kubernetes์— ์„ค์น˜ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ helm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์„ค์น˜ํ•˜๊ณ  ๊ตฌ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์„ธ ๋ฒˆ์งธ ๋ฒ„์ „! ์•ฝ. ์—ญ์ž)

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์Šคํƒ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update
$ helm upgrade --install loki loki/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false

๋‹ค์Œ์€ Etcd ์ง€ํ‘œ์— ๋Œ€ํ•œ Prometheus ๋ฐ Etcd Pod ๋กœ๊ทธ์— ๋Œ€ํ•œ Loki์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹œ๋ณด๋“œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: EFK์™€ PLG

์ด์ œ ๋‘ ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์„œ๋กœ์˜ ๊ธฐ๋Šฅ์„ ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋น„๊ต

์ฟผ๋ฆฌ ์–ธ์–ด

Elasticsearch๋Š” Query DSL ๋ฐ Lucene ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ด‘๋ฒ”์œ„ํ•œ ์šด์˜์ž ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ํ™•๋ฆฝ๋˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ฒ€์ƒ‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ด€๋ จ์„ฑ์— ๋”ฐ๋ผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ง์˜ ๋ฐ˜๋Œ€ํŽธ์—๋Š” PromQL(Prometheus ์ฟผ๋ฆฌ ์–ธ์–ด)์˜ ํ›„์† ์ œํ’ˆ์ธ Loki์—์„œ ์‚ฌ์šฉ๋˜๋Š” LogQL์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…๋œ ๋Œ€๋กœ ์ผ๋ถ€ ์—ฐ์‚ฐ์ž์™€ ์‚ฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—, ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋Šฅ ์ธก๋ฉด์—์„œ๋Š” Elastic ์–ธ์–ด์— ๋น„ํ•ด ๋’ค๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

Loki์˜ ์ฟผ๋ฆฌ๋Š” ํƒœ๊ทธ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”ํŠธ๋ฆญ๊ณผ ์‰ฝ๊ฒŒ ์—ฐ๊ด€์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ตฌ์„ฑํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ™•์žฅ์„ฑ

๋‘ ์Šคํƒ ๋ชจ๋‘ ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ Loki๋Š” ๋ณ„๋„์˜ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๊ฒฝ๋กœ์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์–ด ๋” ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Loki๋Š” ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€์šฉ๋Ÿ‰ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ ํ…Œ๋„ŒํŠธ

ํด๋Ÿฌ์Šคํ„ฐ ๋‹ค์ค‘ ํ…Œ๋„Œ์‹œ๋Š” OPEX ์•ฝ์–ด์˜ ๊ณตํ†ต ์ฃผ์ œ์ด๋ฉฐ, ๋‘ ์Šคํƒ ๋ชจ๋‘ ๋‹ค์ค‘ ํ…Œ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Elasticsearch์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๊ธธ ํด๋ผ์ด์–ธํŠธ ๋ถ„๋ฆฌ: ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ธ๋ฑ์Šค, ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ๊ณ ์œ ํ•œ ํด๋ผ์ด์–ธํŠธ ํ•„๋“œ, ๊ฒ€์ƒ‰ ํ•„ํ„ฐ. ๋กœํ‚ค๋Š” ์ง€์› HTTP X-Scope-OrgID ํ—ค๋” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

๋น„์šฉ

Loki๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ‰์ธํ™”ํ•˜์ง€ ์•Š๊ณ  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ƒ‰์ธํ™”ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋งค์šฐ ๋น„์šฉ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ฌ์„ฑํ•œ๋‹ค ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ(์บ์‹œ)๋Š” Elasticsearch ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ธ”๋ก ์Šคํ† ๋ฆฌ์ง€๋ณด๋‹ค ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ €๋ ดํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

EFK ์Šคํƒ์€ ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ„์„, ์‹œ๊ฐํ™” ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•œ ์ตœ๋Œ€์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ Kibana ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋จธ์‹ ๋Ÿฌ๋‹ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋”์šฑ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Loki ์Šคํƒ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ธํ•ด Kubernetes ์ƒํƒœ๊ณ„์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Grafana ๋ฐ ๋กœ๊ทธ์˜ ์‹œ๊ณ„์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์—ฐ๊ด€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์šฉ ๋ฐ ์žฅ๊ธฐ ๋กœ๊ทธ ์ €์žฅ ์ธก๋ฉด์—์„œ Loki๋Š” ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ํƒ์›”ํ•œ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.

์‹œ์žฅ์—๋Š” ๋” ๋งŽ์€ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ๊ท€ํ•˜์—๊ฒŒ ๋” ์ ํ•ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GKE์—๋Š” ํƒ์›”ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” Stackdriver ํ†ตํ•ฉ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๊ธฐ์‚ฌ์˜ ๋ถ„์„์— ์ด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋งํฌ :

์ด ๊ธฐ์‚ฌ๋Š” ์ง์›๋“ค์ด Habr์„ ์œ„ํ•ด ๋ฒˆ์—ญํ•˜๊ณ  ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋Ÿผ ํŠธ๋ ˆ์ด๋‹ ์„ผํ„ฐ โ€” ์‹ค๋ฌด ์ „๋ฌธ๊ฐ€(Kubernetes, DevOps, Docker, Ansible, Ceph, SRE, Agile)์˜ ์ง‘์ค‘ ๊ณผ์ •, ๋น„๋””์˜ค ๊ณผ์ • ๋ฐ ๊ธฐ์—… ๊ต์œก

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€