Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Docker ๋ฐ Kubernetes์—์„œ ๋กœ๊น…์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณธ ๋‹ค์Œ ํ”„๋กœ๋•์…˜์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๋„๊ตฌ์ธ Grafana Loki ๋ฐ EFK ์Šคํƒ(Elasticsearch + Fluent Bit + Kibana)์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์˜ ์†Œ์žฌ๋Š” ์งœ๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•™๊ต "Slurm"์˜ ๊ณต๊ฐœ ๊ฐ•์˜. ์š•๋ง์ด ์žˆ๊ณ  ์ œ์ž‘์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ๋‚˜์•„๊ฐ€ ์ „์ฒด ๊ต์œก์„๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณผ์ •์— ๋“ฑ๋กํ•˜์‹ญ์‹œ์˜ค Kubernetes์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์ธํ”„๋ผ.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๋„์ปค ๋กœ๊น…

Kubernetes ์ˆ˜์ค€์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํฌ๋“œ์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ๋Š” ์—ฌ์ „ํžˆ Docker์—์„œ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋กœ๊น…์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” Docker์— ์˜ํ•ด ์‹œ์ž‘๋˜๋ฏ€๋กœ Docker ์ˆ˜์ค€์—์„œ ๋กœ๊น…์ด ๋ฐฐ์—ด๋˜๋Š” ๋ฐฉ์‹์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋…์ž๊ฐ€ ์•Œ๊ณ  ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋กœ๊ทธ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ stdout/stderr์— ๊ธฐ๋ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ๋Š” Docker Daemon์— ์˜ํ•ด ์ง‘๊ณ„๋˜๋ฉฐ stdout/stderr๋กœ ์ „์†ก๋˜๋Š” ๋กœ๊ทธ์™€ ์ •ํ™•ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํŒฝ์ฐฝํ•˜๊ณ (์ปจํ…Œ์ด๋„ˆ์— Logrotate๊ฐ€ ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์—) Docker Daemon์€ ์ด ๋กœ๊ทธ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

Docker์—๋Š” ์ปจํ…Œ์ด๋„ˆ ๋กœ๊น…์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๋กœ๊น… ๋“œ๋ผ์ด๋ฒ„ ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ Docker Community Edition(CE)์—๋Š” ์ƒ์šฉ Docker Enterprise Edition(EE)๋ณด๋‹ค ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„ ์ˆ˜๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ €๋Š” ์‹ค์ œ๋กœ Docker EE๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. Southbridge์—์„œ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์„ ๊ณ ์ˆ˜ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ฉฐ ๊ณ ๊ฐ์€ Docker EE์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋Œ€๋ถ€๋ถ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Docker CE์˜ ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„:

์ง€๋ฐฉ์˜ - ๋‚ด๋ถ€ Docker Daemon ํŒŒ์ผ์— ๋กœ๊ทธ ์“ฐ๊ธฐ
json ํŒŒ์ผ - ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ํด๋”์— json-log ์ƒ์„ฑ
์ €๋„๋ง - journald์— ๋กœ๊ทธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

Docker ๋กœ๊น… ์„ค์ •์€ daemon.json ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.

"log-driver" ํ•„๋“œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์ •ํ•˜๊ณ  "log-opts" ํ•„๋“œ๋Š” ํ•ด๋‹น ์„ค์ •์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ "json-file" ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ง€์ •๋˜๊ณ  ๋กœ๊ทธ ํฌ๊ธฐ ์ œํ•œ์€ "max-size": "10m"์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์ˆ˜ ์ œํ•œ(ํšŒ์ „ ์„ค์ •) โ€” "max-file": "3"; ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋กœ๊ทธ์— ์ฒจ๋ถ€๋  ๊ฐ’.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ผ๋ถ€ ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„ ์„ค์ •์€ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅธ ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Docker์—์„œ ๋กœ๊น… ์ฒด๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ฒด๊ณ„ ์ž‘๋™ ๋ฐฉ์‹: json-file๊ณผ ๊ฐ™์€ ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ(Rsyslog, Fluentd, Logagent ๋ฐ ๊ธฐํƒ€)๋Š” ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ์ˆ˜์ง‘ํ•˜์—ฌ Elastic, Sematext ๋˜๋Š” ๊ธฐํƒ€ ์ €์žฅ์†Œ์˜ ์ €์žฅ์†Œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

๋‹จ์ˆœํ™”๋œ Kubernetes์˜ ๋กœ๊น… ์ฒด๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Pod๊ฐ€ ์žˆ๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋กœ๊ทธ๋ฅผ stdout/stderr๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Docker๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ํšŒ์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

Kubernetes ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

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

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

์ด์ „์—๋Š” ์‹œ์Šคํ…œ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ชจ๋‘์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋„๊ตฌ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ์Šคํ…œ ๋กœ๊ทธ๋Š” ํ•˜๋‚˜์˜ ๋„๊ตฌ(์˜ˆ: Rsyslog)๋กœ ์ˆ˜์ง‘ํ•˜๊ณ , Docker ๋กœ๊ทธ๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ(์˜ˆ: journald๋กœ ๊ตฌ์„ฑ๋œ Docker ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” journal-bit)๋กœ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” journal-bit๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ(Docker ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„์—์„œ ๋กœ๊ทธ๋ฅผ journald์— ๊ธฐ๋กํ•˜๋„๋ก ์ง€์ •)์™€ ์‹œ์Šคํ…œ(docker-bit) ๋ชจ๋‘์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. CentOS Windows 7์—๋Š” ์ด๋ฏธ systemd์™€ journald๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ž‘๋™ํ•˜์ง€๋งŒ ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ๋งŽ์œผ๋ฉด journal-bit์ด ๋А๋ ค์ง€๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ—˜์€ ๊ณ„์†๋˜์—ˆ๊ณ , ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๋‹ค. CentOS 7๊ฐ€์ง€ ์ฃผ์š” ์‹œ์Šคํ…œ ๋กœ๊ทธ(๋ฉ”์‹œ์ง€, ๊ฐ์‚ฌ, ๋ณด์•ˆ)๋Š” var log์— ํŒŒ์ผ๋กœ ์ค‘๋ณต ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Docker๋Š” ๋กœ๊ทธ๋ฅผ JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ํŒŒ์ผ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. CentOS Windows 7๊ณผ Docker๋Š” ํ•จ๊ป˜ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ELK ์Šคํƒ ์†”๋ฃจ์…˜์ด ๋Œ€์ค‘ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Elasticsearch, Logstash ๋ฐ Kibana์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋„๊ตฌ์˜ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค.

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

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

๊ตฌ๋ฌธ ๋ถ„์„ ๋กœ๊ทธ. ์›ƒ๊ธฐ์ง€๋งŒ ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ์œ ์ง€ ๋น„์šฉ์ด ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋น„์šฉ์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋‹น ์ˆ˜๋งŒ, ์ˆ˜์‹ญ๋งŒ ๊ฐœ์˜ ๋กœ๊ทธ๊ฐ€ ๋‚ ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ ์ด๋Š” ๋‹น์—ฐํ•ด ๋ณด์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ผ์ธ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—์ง€๋ฅผ ์ฐพ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋กœ๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ ์ €์žฅ์„ ์œ„ํ•ด ์ผ๋ถ€๋งŒ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: "๊ฒฝ๊ณ " ๋˜๋Š” "์˜ค๋ฅ˜" ์ƒํƒœ์˜ ๋กœ๊ทธ). nginx ๋˜๋Š” ingress ์ปจํŠธ๋กค๋Ÿฌ ๋กœ๊ทธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ์ƒํƒœ๊ฐ€ 200์ด ์•„๋‹Œ ๋กœ๊ทธ๋งŒ ์Šคํ† ๋ฆฌ์ง€๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ณดํŽธ์ ์ธ ์กฐ์–ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. Nginx ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„์„ ๊ตฌ์ถ•ํ•œ๋‹ค๋ฉด ๋ถ„๋ช…ํžˆ ์ˆ˜์ง‘ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

์•„์ง ๋กœ๊น…์— ๋Œ€ํ•œ ํ‘œ์ค€ ์†”๋ฃจ์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ Prometheus ์†”๋ฃจ์…˜์ด ํ•˜๋‚˜ ์žˆ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋‹ฌ๋ฆฌ ๋กœ๊น…์—๋Š” ํ‘œ์ค€์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ๋„๊ตฌ๋ฅผ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ธ๊ธฐ๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ์žˆ์ง€๋งŒ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•  ๋•Œ Kubernetes ๋กœ๊ทธ์ธ์€ ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ๋Š” ์œ ์ง€๋˜๊ณ  ํšŒ์ „๋˜์ง€๋งŒ ์ˆ˜์ง‘๊ธฐ ์—์ด์ „ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜ ๋กœ๊ทธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ €์žฅ์„ ์œ„ํ•ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค(๋‹ค์ด์–ด๊ทธ๋žจ - ๋กœ๊น… ๋ฐฑ์—”๋“œ). ์—์ด์ „ํŠธ๋Š” ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ Kubernetes์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋กœ๊น… ๋„๊ตฌ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ผํŒŒ๋‚˜ ๋กœํ‚ค

๊ทธ๋ผํŒŒ๋‚˜ ๋กœํ‚ค ์ตœ๊ทผ์— ๋“ฑ์žฅํ–ˆ์ง€๋งŒ ์ด๋ฏธ ๊ฝค ์œ ๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์žฅ์ : ์„ค์น˜๊ฐ€ ์‰ฝ๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, TSDB(์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ Elasticsearch๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ๊ธ€์—์„œ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๊ฐ€ ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ์ผ๋Š”๋ฐ, ์ด๊ฒƒ์ด ๋‘ ์ œํ’ˆ ์‚ฌ์ด์˜ ๋งŽ์€ ์œ ์‚ฌ์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ์‹ฌ์ง€์–ด Loki๊ฐ€ "๋กœ๊น… ์„ธ๊ณ„๋ฅผ ์œ„ํ•œ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค"๋ผ๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ TSDB์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ์—ฌ๋‹ด ์ด์ „ ๊ธฐ์‚ฌ: TSDB๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ, ์‹œ๊ณ„์—ด์„ ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์žฅ๊ธฐ ์ €์žฅ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ๋กœ๊ทธ๋ฅผ XNUMX์ฃผ ์ด์ƒ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์˜ ์ „์†ก์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

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

Loki ์•„ํ‚คํ…์ฒ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

DaemonSet๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Promtail ๋˜๋Š” Fluent Bit์™€ ๊ฐ™์€ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋ฒ„์— ์—์ด์ „ํŠธ๊ฐ€ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. Loki๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์ง‘์–ด ์ž์‹ ์˜ TSDB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์ฆ‰์‹œ ๋กœ๊ทธ์— ์ถ”๊ฐ€๋˜๋ฏ€๋กœ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, ์‹ฌ์ง€์–ด ๋ผ๋ฒจ๋กœ๋„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Loki ์„ค์น˜ ์ง€์นจ

Loki๋Š” ์นœ์ˆ™ํ•œ Grafana ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Loki์—๋Š” Prometheus์˜ PromQL๊ณผ ์ด๋ฆ„ ๋ฐ ๊ตฌ๋ฌธ์ด ์œ ์‚ฌํ•œ LogQL์ด๋ผ๋Š” ์ž์ฒด ์ฟผ๋ฆฌ ์–ธ์–ด๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Loki ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์•”๊ธฐํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

LogQL ์„ค๋ช…์„œ

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
Grafana ์ธํ„ฐํŽ˜์ด์Šค์˜ Loki

ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Loki๋Š” ์ฝ”๋“œ("400", "404" ๋ฐ ๊ธฐํƒ€)๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋…ธ๋“œ์—์„œ ๋กœ๊ทธ๋ฅผ ๋ด…๋‹ˆ๋‹ค. "์˜ค๋ฅ˜"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์นด๋“œ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

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

Elastic + Fluent Bit + Kibana(EFK ์Šคํƒ)

EFK ์Šคํƒ์€ ๋” ๊ณ ์ „์ ์ด์ง€๋งŒ ๋˜‘๊ฐ™์ด ์ธ๊ธฐ ์žˆ๋Š” ๋กœ๊น… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ELK(Elasticsearch + Logstash + Kibana)์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์ด ์Šคํƒ์€ ์ƒ์‚ฐ์„ฑ์ด ๋‚ฎ๊ณ  ๋™์‹œ์— ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ Logstash๋กœ ์ธํ•ด ๊ตฌ์‹์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ทธ๋“ค์€ ๋” ๊ฐ€๋ณ๊ณ  ์ƒ์‚ฐ์ ์ธ Fluentd๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์–ผ๋งˆ ํ›„ ๊ทธ๋Š” ๊ตฌ์กฐ์— ๋‚˜์„ฐ์Šต๋‹ˆ๋‹ค. ์œ ์ฐฝํ•œ ๋น„ํŠธ - ํ›จ์”ฌ ๋” ๊ฐ€๋ณ๊ณ  ๋” ์ƒ์‚ฐ์ ์ธ ์—์ด์ „ํŠธ ์ˆ˜์ง‘๊ธฐ.

๊ฐœ๋ฐœ์ž์— ๋”ฐ๋ฅด๋ฉด Fluent Bit๋Š” Fluentd๋ณด๋‹ค ์„ฑ๋Šฅ์ด 100๋ฐฐ ์ด์ƒ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด๋ฉด Fluent Bit๊ฐ€ ๋” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Fluent Bit๋Š” Fluentd๋ณด๋‹ค ๊ธฐ๋Šฅ์ด ์ ์ง€๋งŒ ์ฃผ์š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋ฏ€๋กœ ์ฃผ๋กœ Fluent Bit๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ‚ค๋ฐ” ๋‚˜ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฐจํŠธ, ํ•„ํ„ฐ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์œ ์ฐฝํ•œ ๋น„ํŠธ ๊ธฐ๋Šฅ

Fluent Bit๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Logstash๋ณด๋‹ค ๋œ ๋“ค๋ฆฌ๋ฏ€๋กœ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Fluent Bit๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ 6๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ Fluent Bit์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ์ผ๋ถ€ ๋ชจ๋“ˆ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์— ๋กœ๊ทธ์ธ: ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ์ €์žฅ, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž…๋ ฅ ๋ชจ๋“ˆ ํŒŒ์ผ, ์‹œ์Šคํ…œ ์„œ๋น„์Šค, ์‹ฌ์ง€์–ด tcp-socket์—์„œ๋„ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค(์—”๋“œํฌ์ธํŠธ๋งŒ ์ง€์ •ํ•˜๋ฉด Fluent Bit๊ฐ€ ๊ทธ๊ณณ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค). ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์‹œ์Šคํ…œ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ผฌ๋ฆฌ (๋กœ๊ทธ๊ฐ€ ์žˆ๋Š” ํด๋”์— ์„ค์ • ๊ฐ€๋Šฅ) ๋ฐ ์‹œ์Šคํ…œ (๊ทธ๋Š” ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•  ์„œ๋น„์Šค๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

ํŒŒ์„œ ๋ชจ๋“ˆ ๋กœ๊ทธ๋ฅผ ๊ณตํ†ต ๋ณด๊ธฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Nginx ๋กœ๊ทธ๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ž์—ด์„ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ์™€ ํ•ด๋‹น ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. JSON์€ ๋” ์œ ์—ฐํ•œ ์ •๋ ฌ ์˜ต์…˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ๋กœ๊ทธ๋ณด๋‹ค ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ•„ํ„ฐ ๋ชจ๋“ˆ. ์ด ์ˆ˜์ค€์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ๋Š” ๊ฐ’์ด "๊ฒฝ๊ณ "์ด๊ฑฐ๋‚˜ ํŠน์ • ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ์ €์žฅ์†Œ๋กœ๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋กœ๊ทธ๊ฐ€ ๋ฒ„ํผ๋ง๋ฉ๋‹ˆ๋‹ค.

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

๋ผ์šฐํŒ…/์ถœ๋ ฅ ๋ชจ๋“ˆ ๋กœ๊ทธ ์ „์†ก์„ ์œ„ํ•œ ๊ทœ์น™ ๋ฐ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋กœ๊ทธ๋Š” Elasticsearch, PostgreSQL ๋˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด Kafka๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ Fluent Bit์—์„œ Fluentd๋กœ ๋กœ๊ทธ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋” ๊ฐ€๋ณ๊ณ  ๊ธฐ๋Šฅ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  Fluentd๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ถ”๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋„์›€์„ ๋ฐ›์•„ ์ถ”๊ฐ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅ์†Œ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Elasticsearch๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด๋ผ๋ฉดโ€ฆ

๋งˆ์ง€๋ง‰์œผ๋กœ Elasticsearch๋ฅผ ํ”„๋กœ๋•์…˜์—์„œ ๋กœ๊ทธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ํŒ์ž…๋‹ˆ๋‹ค.

  1. ์•Œ๋ฆผ ์„ค์ • ElastAlert. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜ ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ์—์„œ ์ค‘์š”ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ฉ”์ผ ๋˜๋Š” ๊ธฐํƒ€ ์ฑ„๋„์—์„œ ์ด์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋งž์•„์š” ์–ผ๋งˆ ์•ˆ๋‚จ์•˜์–ด์š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณง ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์Šฌํ”ˆ ์†Œ์‹.
  2. ์•ฑ์œผ๋กœ ๋กœ๊ทธ ํšŒ์ „ ํ๋ ˆ์ดํ„ฐ ๋˜๋Š” Elasticsearch API์— ๋Œ€ํ•œ ํ˜ธ์ถœ. ์›์น™์ ์œผ๋กœ Elastic ์ž์ฒด๋Š” ์ด์ œ ํƒ€์‚ฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค ์ˆ˜๋ช…์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์˜ค๋žซ๋™์•ˆ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. 5์ฃผ ํ›„์—๋Š” ๋กœ๊ทธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ง ์ค‘์š”ํ•œ ๊ฒฝ์šฐ XNUMX์ฃผ ์•ˆ์— ํ™•์‹คํžˆ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ ์˜ค๋ž˜๋œ ๋กœ๊ทธ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žฅ๊ธฐ ์ €์žฅ์„ ์œ„ํ•ด ์–ด๋”˜๊ฐ€๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ•์ ์œผ๋กœ ์ตœ๋Œ€ XNUMX๋…„ ๋™์•ˆ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š” ํŠน์ˆ˜ ๋กœ๊ทธ์— ๋Œ€ํ•ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ณธ ์ ์ด ์—†์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์ผ๋ฐ˜ ๋กœ๊ทธ์™€ ๋™์ผ์‹œํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„๋กœ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ„์† ๋  ...

์ž‘์„ฑ์ž: Marcel Ibraev, ์ธ์ฆ๋œ Kubernetes ๊ด€๋ฆฌ์ž, ํšŒ์‚ฌ์—์„œ ์‹ค์Šต ์—”์ง€๋‹ˆ์–ด ์‚ฌ์šฐ์Šค ๋ธŒ๋ฆฌ์ง€, ์—ฐ์‚ฌ ๋ฐ ์ฝ”์Šค ๊ฐœ๋ฐœ์ž ์Šฌ๋Ÿผ.

์ถœ์ฒ˜ : habr.com

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster