๐Ÿฅ

์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊น… ์‹œ์Šคํ…œ (EFK stack) ๋ณธ๋ฌธ

๊ธฐํƒ€

์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊น… ์‹œ์Šคํ…œ (EFK stack)

•8• 2024. 10. 9. 10:38

์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊น…

์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋ฉด ๊ฐ ์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒํ•œ ๋กœ๊ทธ ํŒŒ์ผ๋“ค์€ ํŒŒํŽธํ™”๋˜์–ด ๊ฐ๊ฐ ์ €์žฅ๋œ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ณ„ ์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ์—ฐ๊ฒฐ์ง€์–ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค.

๋”ฐ๋ผ์„œ ๋กœ๊ทธ์˜ ์ถœ์ฒ˜์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์ ์œผ๋กœ ์ €์žฅ, ๋ถ„์„ํ•ด์•ผ ํ•˜๋ฉฐ, ์„œ๋น„์Šค ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

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

 

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์™€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ๋กœ๊น…์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

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

* ์ฐธ๊ณ :

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ํ™œ์šฉ ์‚ฌ๋ก€

Pod ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ•ด๊ฒฐ ์‚ฌ๋ก€

 

 

์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊น… ์ปดํฌ๋„ŒํŠธ

  1. ๋กœ๊ทธ ์ƒ์‚ฐ์ž๊ฐ€ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ์„ ์ƒ์‚ฐํ•œ๋‹ค.
  2. ๋กœ๊ทธ ์ ์žฌ๊ธฐ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ ์ƒ์‚ฐ์ž์—์„œ ์ƒ์‚ฐํ•˜๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ ,
    ๋‹ค์–‘ํ•œ ์ข…๋‹จ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. (๋กœ๊ทธ ์ €์žฅ์†Œ, ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๊ธฐ, ๋Œ€์‹œ๋ณด๋“œ ๋“ฑ)
  3. ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ๋Š” ๋กœ๊ทธ ์ €์žฅ์†Œ/๋Œ€์‹œ๋ณด๋“œ ๋“ฑ์— ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ๋ถ„์„/์ฒ˜๋ฆฌํ•œ๋‹ค.
  4. ๋กœ๊ทธ ์ €์žฅ์†Œ์—์„œ๋Š” ๋ชจ๋“  ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
    ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ €์žฅ: elasticsearch ๋“ฑ
    ๋กœ๊ทธ ์•„์นด์ด๋น™: hdfs, s3 ๋“ฑ
    ํ†ต๊ณ„/์š”์•ฝ ๋ฐ์ดํ„ฐ: mongodb, cassandra ๋“ฑ
  5. ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋Š” ๋กœ๊ทธ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐ ํŽธํ•œ ์ฐจํŠธ, ๊ทธ๋ž˜ํ”„๋“ฑ์˜ ํ˜•ํƒœ๋กœ ๋กœ๊ทธ ๋ถ„์„ ๋ณด๊ณ ์„œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

Logstash vs. Fluentd

๋‘ ์†”๋ฃจ์…˜ ๋ชจ๋‘ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋กœ๊ทธ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ๋กœ๊ทธ ๋ถ„์„์šฉ ํŒŒ์„œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ˆ˜์ง‘๋œ ๋กœ๊ทธ๋ฅผ ํ•„ํ„ฐ๋ง, ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋‘ ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1. ์ƒํƒœ๊ณ„ ๋ฐ ์„ค๊ณ„ ์ฒ ํ•™

Logstash๋Š” Elastic ์—์„œ ๊ฐœ๋ฐœํ•œ ํˆด๋กœ, Elasticsearch, Kibana ๋“ฑ์˜ ๋‹ค๋ฅธ Elastic ํˆด๊ณผ์˜ ํ†ตํ•ฉ์ด ์šฉ์ดํ•˜๋‹ค. 

Fluentd๋Š” CNCF(Cloud Native Computing Foundation)์˜ graduated project ์ค‘ ํ•˜๋‚˜๋กœ, ํด๋ผ์šฐ๋“œ ๋„คํ‹ฐ์ด๋ธŒ ์‹œ์Šคํ…œ, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค, prometheus์™€ ๊ฐ™์€ ๋‹ค๋ฅธ CNCF ์žฌ๋‹จ์— ์†ํ•œ ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค. Elastic ์‚ฌ์˜ ์‹œ์Šคํ…œ๊ณผ๋„ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค.

https://www.cncf.io/projects/

 

Logstash์˜ ๊ฒฝ์šฐ Grok ํ•„ํ„ฐ์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ ํŒจํ„ด ๋งค์นญ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋กœ๊ทธ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋ฉฐ, Fluentd์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ „์†กํ•˜๋Š”๋ฐ์— ์ตœ์ ํ™”๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋งŽ๋‹ค.;

 

Fluentd์˜ ๊ฒฝ์šฐ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์„ค๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ณผ ์ „์†ก์„ ๋‹จ์ˆœํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ์— ์ค‘์ ์„ ๋‘๋Š” ๋ฐ˜๋ฉด, Logstash๋Š” ๋‹ค์–‘ํ•œ ์ž…๋ ฅ/ํ•„ํ„ฐ/์ถœ๋ ฅ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ œํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค.

 

 

 

2. ์„ฑ๋Šฅ ๋ฐ ์‚ฌ์šฉ ๋ฆฌ์†Œ์Šค

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

 

Fluentd๋Š” Ruby + C๋กœ ์ œ์ž‘๋˜์–ด ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ๋‚ฎ๋‹ค.

๊ฒฝ๋Ÿ‰์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ์–ด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ์ ๊ณ  ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค. ๋Œ€๊ทœ๋ชจ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋” ํšจ์œจ์ ์ด๋‹ค.

 

 

3. ํ™•์žฅ์„ฑ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง

Logstash๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ธฐ๋Šฅ์€ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์ง€๋งŒ Elasticsearch์™€์˜ ์—ฐ๋™์„ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ํ™•์žฅ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

Fluentd๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฝ๋Ÿ‰ํ™”๋˜์–ด ์žˆ์–ด ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ , ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Kubernetes ํ™˜๊ฒฝ์—์„œ Fluentd๋ฅผ ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‹ค์ค‘ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

 

 

์œ„์™€ ๊ฐ™์€ ํŠน์ง•์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์‚ฌ๋ก€์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

 

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

 

EFK stack - ๊ตฌ์„ฑ ์š”์†Œ 

Fluentd

  • ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋กœ๊ทธ ์ €์žฅ์†Œ์— ๋กœ๊ทธ๋ฅผ ๋ณด๋‚ด๋Š” ์—ญํ• 

Fluentbit๋Š” ์„ฑ๋Šฅ์— ์ค‘์ ์„ ๋‘๊ณ  ๊ฐœ๋ฐœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Fluentd์™€ ๋น„๊ตํ•˜์—ฌ ๋” ๊ฒฝ๋Ÿ‰ํ™” ๋˜์–ด ์žˆ๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋„ ํ›จ์”ฌ ์ ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— FluentBit๋ฅผ deamonset์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  Fluentd ์„œ๋น„์Šค์— ๋กœ๊ทธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit

 

 

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

https://www.fluentd.org/architecture

 

  • input: ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค๋กœ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘
  • buffer(optional): input์—์„œ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์“ฐ์ง€ ์•Š๊ณ  buffer์„ ๋‘  (file/memroy ๋‘ ๊ฐ€์ง€ ํƒ€์ž…)
    ๋กœ๊ทธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” tag๋‹จ์œ„๋กœ chunk ์ƒ์„ฑ
  •  
  • output: ์—ฌ๋Ÿฌ output plugin์„ ์‚ฌ์šฉํ•ด ์ถœ๋ ฅํ•จ.

 

Elasticsearch

  • ๋ถ„์‚ฐํ˜• ๊ฒ€์ƒ‰ ๋ฐ ๋ถ„์„ ์—”์ง„์œผ๋กœ, ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜์—ฌ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๊ฒ€์ƒ‰
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•˜๋Š” ์ƒค๋”ฉ ์ง€์› -> ๋น ๋ฅธ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

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

https://braineanear.medium.com/elasticsearch-architecture-v-node-roles-81ec3d04257e

  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ: ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์œ ์ง€, ๋…ธ๋“œ์˜ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ์ธ๋ฑ์Šค ๊ด€๋ฆฌ ๋“ฑ ๋‹ด๋‹น (๋งˆ์Šคํ„ฐ, ๋งˆ์Šคํ„ฐ ํ›„๋ณด)
  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ: ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰, CRUD ์š”์ฒญ ์ฒ˜๋ฆฌ ( data_content, data_hot, data_warm, data_cold, data_frozen)
  • ์ฝ”๋””๋„ค์ดํ„ฐ ๋…ธ๋“œ: ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ๊ฒ€์ƒ‰ ๋ฐ ์ธ๋ฑ์‹ฑ ์š”์ฒญ ๋ผ์šฐํŒ…, ๋ฐ์ดํ„ฐ ๋…ธ๋“œ๋กœ ์š”์ฒญ์„ ๋ถ„๋ฐฐ. only ํŠธ๋ž˜ํ”ฝ ์กฐ์œจ ์—ญํ• 
  • ingest node: ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์ „ ๋ณ€ํ™˜ ๋ฐ ์ „์ฒ˜๋ฆฌ ์ž‘์—… ๋‹ด๋‹น (fluentd, logstash ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ผ์ด ์—†์Œ)

 

index architecture

https://github.com/exo-archives/exo-es-search?tab=readme-ov-file#es-architecture

 

  • Index: ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์— document ์—์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, document๋ฅผ ๋ชจ์•„๋†“์€ ์ง‘ํ•ฉ (ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌ)
  • Sharding
     indexing ์‹œ์— node ๋‚ด๋ถ€์— ๋…ผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ญ‰ ์“ด๋‹ค. -> ์ €์žฅ ๊ณต๊ฐ„์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋ˆ„๋ฏ€๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.
    ์Šค์ผ€์ผ ์•„์›ƒ์„ ์œ„ํ•ด index๋ฅผ ์—ฌ๋Ÿฌ shard๋กœ ์ชผ๊ฐ ๋‹ค.
  • Replica
     shard์— ๋Œ€ํ•œ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑ.

 

Kibana

  • Elasticsearch์™€ ํ•จ๊ป˜ ์ž‘๋™๋˜๋„๋ก ์„ค๊ณ„๋œ ์‹œ๊ฐํ™” ํ”Œ๋žซํผ. (์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ)
  • Elasticsaerch index์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์กฐํšŒ. ์‹ค์‹œ๊ฐ„ ์ฟผ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ‘œ์‹œํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ Elasticsearch์˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”๊ฐ€ ์šฉ์ดํ•˜๊ฒŒ ๊ฐ€๋Šฅ

๊ธฐ๋Šฅ

  • Discover: ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ
  • Visualize: ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ž˜ํ”„๋‚˜ ํ‘œ, ์ง€๋„ ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…์œผ๋กœ ๋ณด์—ฌ์คŒ
  • Dashboard: ์‹œ๊ฐํ™” ํƒ€์ž…์„ ํ•œ ํŽ˜์ด์ง€์— ๋ชจ์•„๋ณผ ์ˆ˜ ์žˆ์Œ. ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ๊ธฐ๋Šฅ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ์šฉ์ด
  • Canvas: ํŒŒ์›Œํฌ์ธํŠธ์ฒ˜๋Ÿผ ์ธํฌ๊ทธ๋ž˜ํ”ฝ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์คŒ. 
  • Maps: ์œ„์น˜์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋„์— ์˜ฌ๋ ค ์‹œ๊ฐํ™” ๊ฐ€๋Šฅ

 

Fluentd ํ†ตํ•ฉ Common Architecture

Forwarder And Aggregator

 

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋กœ, kubernetes node / vm ๋“ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” edge์— ๊ฐ€๋ฒผ์šด ์ธ์Šคํ„ด์Šค (fluentbit)๋ฅผ ๋ฐฐํฌํ•œ๋‹ค.

forwarder์—์„œ๋Š” ์ตœ์†Œํ•œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ forward protocol์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋ฌด๊ฑฐ์šด Fluentd ์ธ์Šคํ„ด์Šค๋กœ ์ „์†กํ•œ๋‹ค. aggregator ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” fluentd์—์„œ๋Š” ๋‹ค์Œ ๋ฐฑ์—”๋“œ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ธฐ ์ „ ๋” ๋งŽ์€ ํ•„ํ„ฐ๋ง๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

  • ์žฅ์ 
    • edge์—์„œ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ (์ฒ˜๋ฆฌ๋Ÿ‰ ๊ทน๋Œ€ํ™”)
    • aggregate layer์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์šฉ์ด
    • ๋ฐฑ์—”๋“œ์™€์˜ ํ†ตํ•ฉ์ด ์šฉ์ดํ•˜๋‹ค (๋ชจ๋“  forwarders์—์„œ config๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค fluentd ํ•˜๋‚˜์—์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์šฉ์ด)
  • ๋‹จ์ 
    • aggreagor instacne์— ๋”ฐ๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š” (๋น„์šฉ ์ฆ๊ฐ€)

 

Sidecar/Agent deployment

Fluentd๋‚˜ Fluent Bit๋ฅผ edge์— ๋ฐฐํฌํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์ง์ ‘ ๋ณด๋‚ด๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๊ฒฝ์šฐ์— ํšจ๊ณผ์ ์ด๋‹ค.

Deamonset์œผ๋กœ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ pod ๋‚ด๋ถ€์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

  • ์žฅ์ 
    • aggregator ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. 
  • ๋‹จ์ 
    • agent ์ „์ฒด์—์„œ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›€
    • ๋ฐฑ์—”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์–ด๋ ค์›€

 

์ด์™ธ ๋‹ค๋ฅธ ๋กœ๊ทธ ์ˆ˜์ง‘ ์†”๋ฃจ์…˜

1. Prometheus,  Grafana

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

 

2. Loki, Grafana (PLG ์Šคํƒ)

  • Promtail, Loki, Grafana

 

Loki๋Š” Grafana์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋กœ๊ทธ ์ˆ˜์ง‘ ์‹œ์Šคํ…œ์œผ๋กœ, Prometheus์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

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

* ์ฐธ๊ณ : Logging in Kubernetes: EFK vs PLG Stack

 

 

3. AWS CloudWatch ๋ฐ GCP Logging

kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ์šด์˜ํ•˜์ง€ ์•Š๊ณ  EKS๋“ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊น… ์‹œ์Šคํ…œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • AWS CloudWatch: EKS ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง์ ‘ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค
  • Google Cloud Logging: GKE ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Google Cloud Logging์„ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

4. Splunk, Datadog

  • Splunk: ๊ณ ๊ธ‰ ๋กœ๊ทธ ๋ถ„์„ ์†”๋ฃจ์…˜. ๋ณต์žกํ•œ ๋กœ๊ทธ ๋ถ„์„๊ณผ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•˜๋ฉฐ ๋Œ€๊ทœ๋ชจ ๊ธฐ์—…ํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋จ. (kuberenets ์—์„œ๋„ splunk ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ ์ˆ˜์ง‘ ๊ฐ€๋Šฅ). ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์šฉ์€ ๋†’์Œ
  • Datadog: ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊ทธ ์ˆ˜์ง‘์„ ํ†ตํ•ฉ์ ์œผ๋กœ ์ œ๊ณต. Kubernetes์™€์˜ ์‰ฌ์šด ํ†ตํ•ฉ. ๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง, ์ธํ”„๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ์ „์ฒด์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์†”๋ฃจ์…˜ ํ•„์š” ์‹œ ์‚ฌ์šฉ 

 

 

 

 

์ฐธ๊ณ 

https://bravenamme.github.io/2021/01/28/elk-stack/

https://nangman14.tistory.com/68

https://aws.amazon.com/ko/blogs/containers/fluentd-considerations-and-actions-required-at-scale-in-amazon-eks/

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node

https://braineanear.medium.com/elasticsearch-architecture-v-node-roles-81ec3d04257e

https://fluentbit.io/blog/2020/12/03/common-architecture-patterns-with-fluentd-and-fluent-bit/

https://www.infracloud.io/blogs/logging-in-kubernetes-efk-vs-plg-stack/