์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ“Š Grafana๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ ์‹œ๊ฐํ™”

๐Ÿ“Š Grafana๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ ์‹œ๊ฐํ™”

๋ฐ์ดํ„ฐ๋ฅผ ์•„๋ฆ„๋‹ค์šด ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋ณ€์‹ ์‹œํ‚ค๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ์ด์•ผ๊ธฐ

์•ˆ๋…•! ๐Ÿ‘‹ ํ˜น์‹œ ์„œ๋ฒ„๊ฐ€ ์–ธ์ œ ํ„ฐ์งˆ์ง€ ๋ชฐ๋ผ์„œ ๋ฐค์ž  ์„ค์น˜๊ณ  ์žˆ์ง„ ์•Š์•„? ์•„๋‹ˆ๋ฉด ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™”๋ฉด์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์„œ ๋ญ๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๊ณ ? ๊ทธ๋ ‡๋‹ค๋ฉด ์˜ค๋Š˜ ์ด์•ผ๊ธฐํ•  Grafana๊ฐ€ ๋„ˆ์˜ ๊ตฌ์„ธ์ฃผ๊ฐ€ ๋  ๊ฑฐ์•ผ!

Grafana๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”์˜ ๋ํŒ์™•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด. ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ๋“ค์„ ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค๋Š” ๋ฉ‹์ง„ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด์ง€. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ์žฌ๋ฃŒ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทผ์‚ฌํ•œ ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค๋“ฏ์ด, Grafana๋Š” ๋„ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ˆ์ˆ  ์ž‘ํ’ˆ ๊ฐ™์€ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜! ๐ŸŽจ

Grafana ์‹œ๊ฐํ™” ์ƒํƒœ๊ณ„ ๋ฐ์ดํ„ฐ ์†Œ์Šค Prometheus InfluxDB MySQL Grafana ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ์‹œ๊ฐํ™” ์—”์ง„ ๋Œ€์‹œ๋ณด๋“œ ๊ทธ๋ž˜ํ”„ ํ…Œ์ด๋ธ” ์•Œ๋ฆผ ์‚ฌ์šฉ์ž ๋ชจ๋‹ˆํ„ฐ๋ง ๋ถ„์„ ์˜์‚ฌ๊ฒฐ์ • ๐Ÿ“Š โš™๏ธ ๐Ÿ“ˆ ๐Ÿ‘จโ€๐Ÿ’ป ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜ ์‹œ๊ฐํ™” ํ™œ์šฉ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์œผ๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…!

๐ŸŽฏ Grafana๊ฐ€ ๋ญ๊ธธ๋ž˜ ์ด๋ ‡๊ฒŒ ๋‚œ๋ฆฌ์•ผ?

Grafana๋Š” 2014๋…„์— Torkel ร–degaard๋ผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์•ผ. ์›๋ž˜๋Š” Kibana์˜ ํฌํฌ(fork) ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ, ์ง€๊ธˆ์€ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ํ”Œ๋žซํผ์œผ๋กœ ์„ฑ์žฅํ–ˆ์ง€. ๐Ÿš€

๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฑฐ์•ผ. Prometheus, InfluxDB, Elasticsearch, MySQL, PostgreSQL ๋“ฑ๋“ฑ... ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด. ๋งˆ์น˜ ๋งŒ๋Šฅ ์–ด๋Œ‘ํ„ฐ ๊ฐ™์€ ์กด์žฌ์ง€!

๐Ÿ’ก Grafana์˜ ํ•ต์‹ฌ ๊ฐ•์ 

1. ์œ ์—ฐ์„ฑ: ์–ด๋–ค ๋ฐ์ดํ„ฐ ์†Œ์Šค๋“  ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ
2. ์ง๊ด€์„ฑ: ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ
3. ํ™•์žฅ์„ฑ: ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋ฌดํ•œ ํ™•์žฅ
4. ์ปค๋ฎค๋‹ˆํ‹ฐ: ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ณต์œ  ๋Œ€์‹œ๋ณด๋“œ ํ…œํ”Œ๋ฆฟ
5. ๋ฌด๋ฃŒ: ์˜คํ”ˆ์†Œ์Šค๋ผ์„œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์™„์ „ ๋ฌด๋ฃŒ!

ํŠนํžˆ DevOps ํ™˜๊ฒฝ์—์„œ Grafana๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜ ๋„๊ตฌ๊ฐ€ ๋์–ด. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ฑ๋Šฅ ์ถ”์ , ์ธํ”„๋ผ ์ƒํƒœ ํ™•์ธ ๋“ฑ... ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ ๋น ์งˆ ์ˆ˜ ์—†๋Š” ์กด์žฌ์ง€. โ˜๏ธ

๐Ÿ› ๏ธ Grafana ์„ค์น˜ํ•˜๊ธฐ - ์ƒ๊ฐ๋ณด๋‹ค ์‰ฌ์›Œ!

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ Grafana๋ฅผ ์„ค์น˜ํ•ด๋ณผ๊นŒ? ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์†Œ๊ฐœํ•ด์ค„๊ฒŒ!

๐Ÿ“ฆ ๋ฐฉ๋ฒ• 1: Docker๋กœ ์„ค์น˜ํ•˜๊ธฐ (๊ฐ€์žฅ ์ถ”์ฒœ!)

Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•ด. ๋‹จ ํ•œ ์ค„์˜ ๋ช…๋ น์–ด๋กœ ๋๋‚˜๊ฑฐ๋“ !

docker run -d -p 3000:3000 --name=grafana grafana/grafana

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Grafana๊ฐ€ 3000๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰๋ผ. ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ๋ฐ”๋กœ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜! ๊ธฐ๋ณธ ๊ณ„์ •์€ admin/admin์ด์•ผ. ๐Ÿ”

๐Ÿง ๋ฐฉ๋ฒ• 2: Linux์— ์ง์ ‘ ์„ค์น˜ํ•˜๊ธฐ

Ubuntu/Debian ๊ณ„์—ด์ด๋ผ๋ฉด ์ด๋ ‡๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด:

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana

์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•ด์ค˜:

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

๐Ÿ’ก ํ”„๋กœ ํŒ!

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Grafana์™€ Prometheus๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด. ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ๋ฐฉ๋ฒ•์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€. ๋‚˜์ค‘์— ์„ค์ • ํŒŒ์ผ๋งŒ ๊ด€๋ฆฌํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ํ›จ์”ฌ ํŽธ๋ฆฌํ•ด!

๐ŸชŸ ๋ฐฉ๋ฒ• 3: Windows์— ์„ค์น˜ํ•˜๊ธฐ

Windows ์‚ฌ์šฉ์ž๋ผ๋ฉด ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์—์„œ MSI ์„ค์น˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ด์„œ ์„ค์น˜ํ•˜๋ฉด ๋ผ. ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ํ•˜๋“ฏ์ด Next๋งŒ ๋ˆ„๋ฅด๋ฉด ๋!

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

์ฒ˜์Œ ์„ค์น˜ํ•˜๋ฉด ๊ธฐ๋ณธ ํฌํŠธ๊ฐ€ 3000๋ฒˆ์ด์•ผ. ๋งŒ์•ฝ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด๋ฏธ 3000๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ถฉ๋Œ์ด ๋‚  ์ˆ˜ ์žˆ์–ด. ์ด๋Ÿด ๋•Œ๋Š” ์„ค์ • ํŒŒ์ผ(/etc/grafana/grafana.ini)์—์„œ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋ผ!

๐ŸŽจ ์ฒซ ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค๊ธฐ - ์˜ˆ์ˆ  ์ž‘ํ’ˆ์˜ ์‹œ์ž‘

์ž, ์ด์ œ Grafana๊ฐ€ ์„ค์น˜๋์œผ๋‹ˆ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ? ์ฒ˜์Œ์—๋Š” ์ข€ ๋ง‰๋ง‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ฒœ์ฒœํžˆ ๋”ฐ๋ผ์˜ค๋ฉด ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์งˆ ๊ฑฐ์•ผ! ๐ŸŽฏ

1๏ธโƒฃ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๊ฒฐํ•˜๊ธฐ

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— ๋จผ์ € ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ด. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ์‹œ๊ฐํ™”ํ•  ๊ฒŒ ์—†์œผ๋‹ˆ๊นŒ! ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Prometheus๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณผ๊ฒŒ.

๐Ÿ“Š Prometheus ์—ฐ๊ฒฐ ๋‹จ๊ณ„

Step 1: ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ Configuration(โš™๏ธ) โ†’ Data Sources ํด๋ฆญ
Step 2: "Add data source" ๋ฒ„ํŠผ ํด๋ฆญ
Step 3: Prometheus ์„ ํƒ
Step 4: URL ์ž…๋ ฅ (์˜ˆ: http://localhost:9090)
Step 5: "Save & Test" ๋ฒ„ํŠผ์œผ๋กœ ์—ฐ๊ฒฐ ํ™•์ธ

์ดˆ๋ก์ƒ‰์œผ๋กœ "Data source is working"์ด ๋œจ๋ฉด ์„ฑ๊ณต! ๐ŸŽ‰

2๏ธโƒฃ ์ƒˆ ๋Œ€์‹œ๋ณด๋“œ ์ƒ์„ฑํ•˜๊ธฐ

์ด์ œ ์ง„์งœ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด์•ผ! ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ "+" ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๊ณ  "Dashboard"๋ฅผ ์„ ํƒํ•ด. ๊ทธ๋Ÿฌ๋ฉด ๋นˆ ์บ”๋ฒ„์Šค๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”๋ฐ, ์—ฌ๊ธฐ์— ๋„ˆ๋งŒ์˜ ์ž‘ํ’ˆ์„ ๊ทธ๋ ค๋‚˜๊ฐ€๋Š” ๊ฑฐ์ง€! ๐ŸŽจ

๐ŸŽฏ ํŒจ๋„(Panel) ์ถ”๊ฐ€ํ•˜๊ธฐ

ํŒจ๋„์€ ๋Œ€์‹œ๋ณด๋“œ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์•ผ. ๊ฐ ํŒจ๋„์€ ํ•˜๋‚˜์˜ ์ฐจํŠธ๋‚˜ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œ์‹œํ•˜์ง€.

1. "Add panel" ํด๋ฆญ
2. "Add a new panel" ์„ ํƒ
3. ์ฟผ๋ฆฌ ์ž‘์„ฑ: ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค„์ง€ ์ •์˜
4. ์‹œ๊ฐํ™” ํƒ€์ž… ์„ ํƒ: ๊ทธ๋ž˜ํ”„, ๊ฒŒ์ด์ง€, ํ…Œ์ด๋ธ” ๋“ฑ
5. ํŒจ๋„ ์ œ๋ชฉ๊ณผ ์„ค๋ช… ์ถ”๊ฐ€
6. "Apply" ๋ฒ„ํŠผ์œผ๋กœ ์ €์žฅ

3๏ธโƒฃ ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐ - ๋ฐ์ดํ„ฐ์˜ ์–ธ์–ด

์ฟผ๋ฆฌ๋Š” Grafana์—๊ฒŒ "์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค˜!"๋ผ๊ณ  ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์•ผ. ๋ฐ์ดํ„ฐ ์†Œ์Šค๋งˆ๋‹ค ์ฟผ๋ฆฌ ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅธ๋ฐ, Prometheus์˜ ๊ฒฝ์šฐ PromQL์„ ์‚ฌ์šฉํ•ด. ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ์˜ˆ์ œ๋ฅผ ๋ณด์—ฌ์ค„๊ฒŒ!

# CPU ์‚ฌ์šฉ๋ฅ  ์กฐํšŒ
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ์กฐํšŒ
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

# ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  ์กฐํšŒ
100 - ((node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100)

๐Ÿ’ก ์ฟผ๋ฆฌ ์ž‘์„ฑ ํŒ

์ฒ˜์Œ์—๋Š” ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์–ด. ๊ทธ๋Ÿด ๋• Grafana์˜ "Query Inspector" ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด๋ด. ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋””๋ฒ„๊น…์— ์—„์ฒญ ์œ ์šฉํ•ด! ๐Ÿ”

Grafana ํŒจ๋„ ํƒ€์ž… ๊ฐ€์ด๋“œ Time Series ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ๋ณ€ํ™” CPU, ๋ฉ”๋ชจ๋ฆฌ ์ถ”์ด Gauge ํ˜„์žฌ ์ƒํƒœ ํ‘œ์‹œ ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  Stat ๋‹จ์ผ ์ˆ˜์น˜ ๊ฐ•์กฐ 98.5% ๊ฐ€๋™๋ฅ  Table ์ƒ์„ธ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก ์„œ๋ฒ„ ๋ชฉ๋ก Bar Chart ํ•ญ๋ชฉ๋ณ„ ๋น„๊ต ํŠธ๋ž˜ํ”ฝ ๋ถ„ํฌ Heatmap ๋ฐ€๋„ ์‹œ๊ฐํ™” ์‘๋‹ต ์‹œ๊ฐ„ ๋ถ„ํฌ Pie Chart ๋น„์œจ ํ‘œ์‹œ ์—๋Ÿฌ ํƒ€์ž… ๋น„์œจ Logs ๋กœ๊ทธ ์ŠคํŠธ๋ฆผ INFO: Server started WARN: High memory ERROR: Connection lost ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ

๐Ÿ”ฅ ์‹ค์ „ ํ™œ์šฉ - ์ง„์งœ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘ํ•˜๊ธฐ

์ด๋ก ์€ ์ด์ œ ์ถฉ๋ถ„ํ•ด! ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œ๋“ค์„ ์‚ดํŽด๋ณด์ž. ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๊ฐ€ ์ง„์งœ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด์•ผ! ๐Ÿ˜Ž

๐Ÿ–ฅ๏ธ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋ฉด์„œ๋„ ์ค‘์š”ํ•œ ๋Œ€์‹œ๋ณด๋“œ์•ผ. CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ฑฐ๋“ !

๐Ÿ“Š ํ•„์ˆ˜ ํŒจ๋„ ๊ตฌ์„ฑ

1. CPU ์‚ฌ์šฉ๋ฅ  (Time Series)
- ์ „์ฒด CPU ์‚ฌ์šฉ๋ฅ  ์ถ”์ด
- ์ฝ”์–ด๋ณ„ ์‚ฌ์šฉ๋ฅ  ๋ถ„ํฌ
- ์ž„๊ณ„๊ฐ’ ์„ค์ •์œผ๋กœ 80% ์ด์ƒ ์‹œ ๊ฒฝ๊ณ 

2. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  (Gauge + Time Series)
- ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์„ Gauge๋กœ ํ‘œ์‹œ
- ์‹œ๊ฐ„๋ณ„ ์ถ”์ด๋ฅผ Time Series๋กœ ํ‘œ์‹œ
- ์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ํ•จ๊ป˜ ๋ชจ๋‹ˆํ„ฐ๋ง

3. ๋””์Šคํฌ I/O (Bar Chart)
- ์ฝ๊ธฐ/์“ฐ๊ธฐ ์†๋„
- ํŒŒํ‹ฐ์…˜๋ณ„ ์‚ฌ์šฉ๋ฅ 
- IOPS(์ดˆ๋‹น ์ž…์ถœ๋ ฅ ์ž‘์—… ์ˆ˜)

4. ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ (Time Series)
- ์ธ๋ฐ”์šด๋“œ/์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ
- ํŒจํ‚ท ์†์‹ค๋ฅ 
- ์—ฐ๊ฒฐ ์ˆ˜

โœ… ์‹ค๋ฌด ํŒ

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ์ •๋ณด์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ด. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฉ”ํŠธ๋ฆญ์€ ์ƒ๋‹จ์—, ์ƒ์„ธํ•œ ์ •๋ณด๋Š” ํ•˜๋‹จ์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒŒ ์ข‹์•„. ๊ทธ๋ฆฌ๊ณ  ์ƒ‰์ƒ ์ฝ”๋”ฉ์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ง๊ด€์„ฑ์ด ํ›จ์”ฌ ์ข‹์•„์ ธ!

์˜ˆ๋ฅผ ๋“ค์–ด ์ดˆ๋ก์ƒ‰์€ ์ •์ƒ, ๋…ธ๋ž€์ƒ‰์€ ์ฃผ์˜, ๋นจ๊ฐ„์ƒ‰์€ ์œ„ํ—˜ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ง์ด์•ผ. ๐Ÿšฆ

๐Ÿณ Docker ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง

์š”์ฆ˜ ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌ๋˜์ž–์•„? Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฑด ํ•„์ˆ˜์•ผ!

# Docker ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ cAdvisor ์‹คํ–‰
docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  gcr.io/cadvisor/cadvisor:latest

cAdvisor๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ณ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์–ด. ์ด ๋ฐ์ดํ„ฐ๋ฅผ Prometheus๋กœ ์Šคํฌ๋ž˜ํ•‘ํ•˜๊ณ , Grafana๋กœ ์‹œ๊ฐํ™”ํ•˜๋ฉด ์™„๋ฒฝํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ด ์™„์„ฑ๋ผ! ๐ŸŽฏ

๐Ÿ‹ ์ปจํ…Œ์ด๋„ˆ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ ์š”์†Œ

์ปจํ…Œ์ด๋„ˆ ์ˆ˜ CPU ์‚ฌ์šฉ๋ฅ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋„คํŠธ์›Œํฌ I/O ๋””์Šคํฌ I/O ์žฌ์‹œ์ž‘ ํšŸ์ˆ˜

๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ , ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์ด ๊ฐ์ง€๋˜๋ฉด ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด. ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ CPU ์ŠคํŒŒ์ดํฌ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์ง€!

โ˜ธ๏ธ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

Kubernetes๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด Grafana๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜์•ผ. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ณต์žกํ•œ ์ƒํƒœ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์—„์ฒญ๋‚œ ๋„์›€์ด ๋˜๊ฑฐ๋“ !

โš™๏ธ K8s ๋ชจ๋‹ˆํ„ฐ๋ง ๋ ˆ์ด์–ด

ํด๋Ÿฌ์Šคํ„ฐ ๋ ˆ๋ฒจ:
- ๋…ธ๋“œ ์ƒํƒœ ๋ฐ ๋ฆฌ์†Œ์Šค
- ์ „์ฒด Pod ์ˆ˜ ๋ฐ ์ƒํƒœ
- ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰

๋…ธ๋“œ ๋ ˆ๋ฒจ:
- ๊ฐ ๋…ธ๋“œ์˜ CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ 
- ๋””์Šคํฌ ๋ฐ ๋„คํŠธ์›Œํฌ ์ƒํƒœ
- ์‹คํ–‰ ์ค‘์ธ Pod ๋ชฉ๋ก

Pod ๋ ˆ๋ฒจ:
- ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ
- ๋กœ๊ทธ ๋ฐ ์ด๋ฒคํŠธ
- ๋ฆฌ์†Œ์Šค ์š”์ฒญ/์ œํ•œ ๋Œ€๋น„ ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ:
- ์‘๋‹ต ์‹œ๊ฐ„
- ์—๋Ÿฌ์œจ
- ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput)

Kubernetes ๋ชจ๋‹ˆํ„ฐ๋ง์—๋Š” ๋ณดํ†ต Prometheus Operator์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด. ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๋Œ€์‹œ๋ณด๋“œ ํ…œํ”Œ๋ฆฟ๋“ค์ด ๋งŽ์•„์„œ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋ผ! ๐Ÿ˜Š

๐Ÿ’ก ์ถ”์ฒœ ๋Œ€์‹œ๋ณด๋“œ ID

Grafana ๊ณต์‹ ์‚ฌ์ดํŠธ(grafana.com/grafana/dashboards)์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด. ์ธ๊ธฐ ์žˆ๋Š” K8s ๋Œ€์‹œ๋ณด๋“œ ID๋“ค:

315 - Kubernetes cluster monitoring
6417 - Kubernetes Cluster (Prometheus)
8588 - Kubernetes Deployment Statefulset Daemonset metrics

๋Œ€์‹œ๋ณด๋“œ Import ๊ธฐ๋Šฅ์œผ๋กœ ID๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด!

๐ŸŽจ ๋Œ€์‹œ๋ณด๋“œ ๋””์ž์ธ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

๊ธฐ๋Šฅ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ๋ณด๊ธฐ ์ข‹์€ ๋–ก์ด ๋จน๊ธฐ๋„ ์ข‹๋‹ค๊ณ  ํ–ˆ์ž–์•„? ๋Œ€์‹œ๋ณด๋“œ ๋””์ž์ธ๋„ ์—„์ฒญ ์ค‘์š”ํ•ด! ๐Ÿ‘€

๐ŸŽฏ ๋ ˆ์ด์•„์›ƒ ์›์น™

๐Ÿ“ F-ํŒจํ„ด ๋ ˆ์ด์•„์›ƒ

์‚ฌ๋žŒ๋“ค์€ ๋ณดํ†ต ์™ผ์ชฝ ์œ„์—์„œ ์‹œ์ž‘ํ•ด์„œ F์ž ํ˜•ํƒœ๋กœ ํ™”๋ฉด์„ ์Šค์บ”ํ•ด. ๊ทธ๋ž˜์„œ:

1. ์ตœ์ƒ๋‹จ: ๊ฐ€์žฅ ์ค‘์š”ํ•œ KPI (ํ•ต์‹ฌ ์„ฑ๊ณผ ์ง€ํ‘œ)
2. ์™ผ์ชฝ ์ƒ๋‹จ: ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ํ‘œ์‹œ
3. ์ค‘์•™: ์‹œ๊ณ„์—ด ๊ทธ๋ž˜ํ”„
4. ํ•˜๋‹จ: ์ƒ์„ธ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋กœ๊ทธ

์ด๋ ‡๊ฒŒ ๋ฐฐ์น˜ํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‹œ์„ ์ด ํ๋ฅด๋ฉด์„œ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด!

๐ŸŽจ ์ƒ‰์ƒ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

์ƒ‰์ƒ์€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์•ผ. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์ ธ.

์ƒํƒœ ๊ถŒ์žฅ ์ƒ‰์ƒ ์‚ฌ์šฉ ์˜ˆ์‹œ
์ •์ƒ ์ดˆ๋ก์ƒ‰ (#4CAF50) ์‹œ์Šคํ…œ ๊ฐ€๋™ ์ค‘, ์ •์ƒ ๋ฒ”์œ„ ๋‚ด
์ฃผ์˜ ๋…ธ๋ž€์ƒ‰ (#FFC107) ์ž„๊ณ„๊ฐ’ ๊ทผ์ ‘, ํ™•์ธ ํ•„์š”
๊ฒฝ๊ณ  ์ฃผํ™ฉ์ƒ‰ (#FF9800) ๋น„์ •์ƒ ์ง•ํ›„, ์กฐ์น˜ ๊ถŒ์žฅ
์œ„ํ—˜ ๋นจ๊ฐ„์ƒ‰ (#F44336) ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ, ์ฆ‰์‹œ ์กฐ์น˜ ํ•„์š”
์ •๋ณด ํŒŒ๋ž€์ƒ‰ (#2196F3) ์ผ๋ฐ˜ ์ •๋ณด, ์ค‘๋ฆฝ์  ๋ฐ์ดํ„ฐ

โš ๏ธ ์ƒ‰๋งน ์‚ฌ์šฉ์ž ๊ณ ๋ คํ•˜๊ธฐ

์ „ ์„ธ๊ณ„ ๋‚จ์„ฑ์˜ ์•ฝ 8%, ์—ฌ์„ฑ์˜ ์•ฝ 0.5%๊ฐ€ ์ƒ‰๋งน์ด์•ผ. ๋นจ๊ฐ•-์ดˆ๋ก ์ƒ‰๋งน์ด ๊ฐ€์žฅ ํ”ํ•œ๋ฐ, ์ด๋“ค์„ ์œ„ํ•ด ์ƒ‰์ƒ๋งŒ์œผ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ง๊ณ  ์•„์ด์ฝ˜์ด๋‚˜ ํ…์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„. ์ ‘๊ทผ์„ฑ๋„ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ! โ™ฟ

๐Ÿ“Š ์ฐจํŠธ ํƒ€์ž… ์„ ํƒ ๊ฐ€์ด๋“œ

์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ์ฐจํŠธ๋กœ ํ‘œํ˜„ํ• ์ง€๋„ ์ค‘์š”ํ•ด. ์ž˜๋ชป๋œ ์ฐจํŠธ๋ฅผ ์„ ํƒํ•˜๋ฉด ์˜คํžˆ๋ ค ์ •๋ณด ์ „๋‹ฌ์ด ์–ด๋ ค์›Œ์ ธ.

๐Ÿ“ˆ ์ฐจํŠธ ์„ ํƒ ๊ธฐ์ค€

Time Series (์‹œ๊ณ„์—ด ๊ทธ๋ž˜ํ”„):
- ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋ณ€ํ™”๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ
- CPU, ๋ฉ”๋ชจ๋ฆฌ, ํŠธ๋ž˜ํ”ฝ ๋“ฑ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ
- ์—ฌ๋Ÿฌ ๋ฉ”ํŠธ๋ฆญ์„ ๋น„๊ตํ•  ๋•Œ

Gauge (๊ฒŒ์ด์ง€):
- ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด์—ฌ์ค„ ๋•Œ
- ๋ฐฑ๋ถ„์œจ์ด๋‚˜ ๋น„์œจ ๋ฐ์ดํ„ฐ
- ์ž„๊ณ„๊ฐ’์ด ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ

Stat (ํ†ต๊ณ„):
- ๋‹จ์ผ ์ˆซ์ž๋ฅผ ๊ฐ•์กฐํ•  ๋•Œ
- KPI๋‚˜ ์ค‘์š” ์ง€ํ‘œ
- ์ „์ผ ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ  ํ‘œ์‹œ

Bar Chart (๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„):
- ํ•ญ๋ชฉ ๊ฐ„ ๋น„๊ต
- ์ˆœ์œ„๋‚˜ ๋ถ„ํฌ ํ‘œ์‹œ
- ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ฐ์ดํ„ฐ

Pie Chart (์› ๊ทธ๋ž˜ํ”„):
- ์ „์ฒด ๋Œ€๋น„ ๋น„์œจ
- ๊ตฌ์„ฑ ์š”์†Œ ๋ถ„์„
- ๋‹จ, ํ•ญ๋ชฉ์ด 5๊ฐœ ์ดํ•˜์ผ ๋•Œ๋งŒ!

Table (ํ…Œ์ด๋ธ”):
- ์ƒ์„ธํ•œ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ
- ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๋™์‹œ์— ํ‘œ์‹œ
- ์ •๋ ฌ์ด๋‚˜ ํ•„ํ„ฐ๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

โœ… ํ”„๋กœ ๋””์ž์ด๋„ˆ์˜ ์กฐ์–ธ

๋Œ€์‹œ๋ณด๋“œ๋Š” "ํ•œ๋ˆˆ์— ํŒŒ์•…"์ด ํ•ต์‹ฌ์ด์•ผ. ๋„ˆ๋ฌด ๋งŽ์€ ์ •๋ณด๋ฅผ ํ•œ ํ™”๋ฉด์— ๋„ฃ์œผ๋ ค๊ณ  ํ•˜์ง€ ๋งˆ. ์ฐจ๋ผ๋ฆฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ๋‚˜์•„. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์„œ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒŒ ์ค‘์š”ํ•ด!

๐Ÿ”” ์•Œ๋ฆผ(Alert) ์„ค์ •ํ•˜๊ธฐ - ์ž ์ž๋Š” ๋™์•ˆ์—๋„ ์•ˆ์‹ฌ

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ์•ผ. 24์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์ง€์ผœ๋ณผ ์ˆœ ์—†์ž–์•„? ๊ทธ๋ž˜์„œ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด! ๐Ÿšจ

๐Ÿ“ฌ ์•Œ๋ฆผ ์ฑ„๋„ ์„ค์ •ํ•˜๊ธฐ

Grafana๋Š” ๋‹ค์–‘ํ•œ ์•Œ๋ฆผ ์ฑ„๋„์„ ์ง€์›ํ•ด. ์ด๋ฉ”์ผ, Slack, Discord, PagerDuty, Webhook ๋“ฑ๋“ฑ... ๋„ˆ์˜ ํŒ€์ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์–ด!

๐Ÿ’ฌ Slack ์•Œ๋ฆผ ์„ค์ • ์˜ˆ์ œ

Step 1: Slack์—์„œ Incoming Webhook URL ์ƒ์„ฑ
Step 2: Grafana์—์„œ Alerting โ†’ Notification channels
Step 3: "New channel" ํด๋ฆญ
Step 4: Type์„ "Slack"์œผ๋กœ ์„ ํƒ
Step 5: Webhook URL ์ž…๋ ฅ
Step 6: ์ฑ„๋„๋ช… ์ž…๋ ฅ (์˜ˆ: #monitoring)
Step 7: "Test" ๋ฒ„ํŠผ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ „์†ก
Step 8: Save!

โšก ์•Œ๋ฆผ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ

์ด์ œ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ์ง€ ์ •์˜ํ•ด์•ผ ํ•ด. ์•Œ๋ฆผ ๊ทœ์น™์€ ํŒจ๋„ ๋‹จ์œ„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด.

# CPU ์‚ฌ์šฉ๋ฅ ์ด 80% ์ด์ƒ์ผ ๋•Œ ์•Œ๋ฆผ
WHEN avg() OF query(A, 5m, now) IS ABOVE 80

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์ด 90% ์ด์ƒ์ด๊ณ  5๋ถ„ ์ด์ƒ ์ง€์†๋  ๋•Œ
WHEN avg() OF query(A, 5m, now) IS ABOVE 90
FOR 5m

# ๋””์Šคํฌ ์—ฌ์œ  ๊ณต๊ฐ„์ด 10GB ๋ฏธ๋งŒ์ผ ๋•Œ
WHEN last() OF query(A, 5m, now) IS BELOW 10000000000

โš ๏ธ ์•Œ๋ฆผ ํ”ผ๋กœ๋„ ์ฃผ์˜!

๋„ˆ๋ฌด ๋ฏผ๊ฐํ•œ ์ž„๊ณ„๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ์•Œ๋ฆผ์ด ํญํƒ„์ฒ˜๋Ÿผ ์Ÿ์•„์ ธ. ์ด๊ฑธ "Alert Fatigue"(์•Œ๋ฆผ ํ”ผ๋กœ)๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ •๋ง ์ค‘์š”ํ•œ ์•Œ๋ฆผ๋„ ๋ฌด์‹œํ•˜๊ฒŒ ๋˜๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์–ด.

ํ•ด๊ฒฐ์ฑ…:
1. ์ž„๊ณ„๊ฐ’์„ ์ ์ ˆํžˆ ์„ค์ • (๋„ˆ๋ฌด ๋‚ฎ์ง€ ์•Š๊ฒŒ)
2. ์ผ์ • ์‹œ๊ฐ„ ์ง€์†๋  ๋•Œ๋งŒ ์•Œ๋ฆผ (FOR ์กฐ๊ฑด ํ™œ์šฉ)
3. ์•Œ๋ฆผ ๋นˆ๋„ ์ œํ•œ (๊ฐ™์€ ์•Œ๋ฆผ์€ 1์‹œ๊ฐ„์— 1๋ฒˆ๋งŒ)
4. ์‹ฌ๊ฐ๋„ ๋ ˆ๋ฒจ ๊ตฌ๋ถ„ (Warning vs Critical)

๐ŸŽฏ ํšจ๊ณผ์ ์ธ ์•Œ๋ฆผ ์ „๋žต

1. ๊ณ„์ธตํ™”๋œ ์•Œ๋ฆผ:
- Info: ๋กœ๊ทธ๋กœ๋งŒ ๊ธฐ๋ก
- Warning: Slack ๋ฉ”์‹œ์ง€
- Critical: Slack + ์ด๋ฉ”์ผ + SMS

2. ์ปจํ…์ŠคํŠธ ํฌํ•จ:
์•Œ๋ฆผ ๋ฉ”์‹œ์ง€์— ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ:
- ์–ด๋–ค ์„œ๋ฒ„/์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€
- ํ˜„์žฌ ๊ฐ’๊ณผ ์ž„๊ณ„๊ฐ’
- ๋Œ€์‹œ๋ณด๋“œ ๋งํฌ
- ์˜ˆ์ƒ ์›์ธ ๋ฐ ์กฐ์น˜ ๋ฐฉ๋ฒ•

3. ์—์Šค์ปฌ๋ ˆ์ด์…˜ ์ •์ฑ…:
- 5๋ถ„ ๋‚ด ์‘๋‹ต ์—†์œผ๋ฉด โ†’ ํŒ€ ๋ฆฌ๋”์—๊ฒŒ ์•Œ๋ฆผ
- 15๋ถ„ ๋‚ด ์‘๋‹ต ์—†์œผ๋ฉด โ†’ ๋งค๋‹ˆ์ €์—๊ฒŒ ์•Œ๋ฆผ
- 30๋ถ„ ๋‚ด ์‘๋‹ต ์—†์œผ๋ฉด โ†’ ์˜จ์ฝœ ๋‹ด๋‹น์ž์—๊ฒŒ ์ „ํ™”

๐Ÿ’ก ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ ์˜ˆ์ œ

์ข‹์€ ์˜ˆ:
๐Ÿ”ด [CRITICAL] Production API Server CPU ์‚ฌ์šฉ๋ฅ  95%
์„œ๋ฒ„: api-prod-01
ํ˜„์žฌ๊ฐ’: 95.3% (์ž„๊ณ„๊ฐ’: 80%)
์ง€์†์‹œ๊ฐ„: 7๋ถ„
๋Œ€์‹œ๋ณด๋“œ: https://grafana.example.com/d/api-monitoring
์กฐ์น˜: ํ”„๋กœ์„ธ์Šค ํ™•์ธ ๋ฐ ์Šค์ผ€์ผ ์•„์›ƒ ๊ฒ€ํ† 

๋‚˜์œ ์˜ˆ:
Alert: High CPU
(์–ด๋–ค ์„œ๋ฒ„์ธ์ง€, ์–ผ๋งˆ๋‚˜ ๋†’์€์ง€, ๋ญ˜ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ)

์•Œ๋ฆผ ์›Œํฌํ”Œ๋กœ์šฐ ๐Ÿ“Š ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๐Ÿ” ์กฐ๊ฑด ํ‰๊ฐ€ โš ๏ธ ์ž„๊ณ„๊ฐ’ ์ดˆ๊ณผ ๐Ÿ”” ์•Œ๋ฆผ ๋ฐœ์†ก ๐Ÿ‘จโ€๐Ÿ’ป ๋‹ด๋‹น์ž ๋Œ€์‘ ์•Œ๋ฆผ ์ฑ„๋„ Slack Email SMS Webhook ์‹ฌ๊ฐ๋„ ๋ ˆ๋ฒจ INFO - ์ •๋ณด์„ฑ ์•Œ๋ฆผ WARNING - ์ฃผ์˜ ํ•„์š” CRITICAL - ์ฆ‰์‹œ ์กฐ์น˜ ๋Œ€์‘ ์‹œ๊ฐ„ INFO: 24์‹œ๊ฐ„ ์ด๋‚ด WARNING: 1์‹œ๊ฐ„ ์ด๋‚ด CRITICAL: 15๋ถ„ ์ด๋‚ด SLA ๊ธฐ์ค€ ํ†ต๊ณ„ 247 ์ด๋ฒˆ ๋‹ฌ ์•Œ๋ฆผ 98.5% ๋Œ€์‘๋ฅ 

๐Ÿ”ง ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜๊ธฐ

๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ์ต์ˆ™ํ•ด์กŒ๋‹ค๋ฉด ์ด์ œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•ด๋ณผ ์ฐจ๋ก€์•ผ! ์ด๊ฒƒ๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ง„์งœ ํ”„๋กœํŽ˜์…”๋„ํ•œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด. ๐Ÿš€

๐Ÿ”„ Variables (๋ณ€์ˆ˜) ํ™œ์šฉํ•˜๊ธฐ

Variables๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ๊ธฐ๋Šฅ์ด์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„์˜ ๋ฉ”ํŠธ๋ฆญ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์‹์œผ๋กœ ๋ง์ด์•ผ!

๐Ÿ“ Variable ํƒ€์ž…

Query Variable:
๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์™€. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  ์„œ๋ฒ„ ๋ชฉ๋ก์„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด.
label_values(node_uname_info, instance)

Custom Variable:
์ง์ ‘ ๊ฐ’์„ ์ž…๋ ฅํ•ด. ํ™˜๊ฒฝ(dev, staging, prod) ๊ฐ™์€ ๊ณ ์ •๋œ ๊ฐ’๋“ค์— ์œ ์šฉํ•ด.
dev,staging,production

Interval Variable:
์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ ๋™์ ์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด. ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์ข‹์•„.
1m,5m,10m,30m,1h

Data Source Variable:
์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด. ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•ด.

Variables๋ฅผ ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” $๋ณ€์ˆ˜๋ช… ํ˜•์‹์œผ๋กœ ์ฐธ์กฐํ•ด:

# ์„ ํƒํ•œ ์„œ๋ฒ„์˜ CPU ์‚ฌ์šฉ๋ฅ 
100 - (avg(rate(node_cpu_seconds_total{instance="$server",mode="idle"}[5m])) * 100)

# ์„ ํƒํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ Pod ์ˆ˜
count(kube_pod_info{namespace="$namespace"})
๐Ÿ“Š Transformations (๋ฐ์ดํ„ฐ ๋ณ€ํ™˜)

Transformations๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด์•ผ. ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด!

๐Ÿ”จ ์œ ์šฉํ•œ Transformation๋“ค

Merge: ์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ธฐ
Filter by name: ํŠน์ • ํ•„๋“œ๋งŒ ์„ ํƒํ•˜๊ธฐ
Organize fields: ํ•„๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ
Add field from calculation: ๊ณ„์‚ฐ๋œ ํ•„๋“œ ์ถ”๊ฐ€ (์˜ˆ: ํ•ฉ๊ณ„, ํ‰๊ท )
Filter data by values: ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ํ‘œ์‹œ
Sort by: ํŠน์ • ํ•„๋“œ๋กœ ์ •๋ ฌ
Group by: ๋ฐ์ดํ„ฐ ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„

๐ŸŽญ Annotations (์ฃผ์„) ํ™œ์šฉํ•˜๊ธฐ

Annotations๋Š” ๊ทธ๋ž˜ํ”„์— ์ด๋ฒคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์ด์•ผ. ๋ฐฐํฌ ์‹œ์ , ์žฅ์•  ๋ฐœ์ƒ ์‹œ์  ๋“ฑ์„ ํ‘œ์‹œํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ถ„์„์ด ํ›จ์”ฌ ์‰ฌ์›Œ์ ธ!

๐Ÿ“Œ Annotation ํ™œ์šฉ ์˜ˆ์‹œ

๋ฐฐํฌ ์ด๋ฒคํŠธ:
์ƒˆ ๋ฒ„์ „ ๋ฐฐํฌ ์‹œ์ ์„ ํ‘œ์‹œํ•ด์„œ, ์„ฑ๋Šฅ ๋ณ€ํ™”๊ฐ€ ๋ฐฐํฌ์™€ ๊ด€๋ จ ์žˆ๋Š”์ง€ ํ™•์ธ

์žฅ์•  ์ด๋ฒคํŠธ:
๊ณผ๊ฑฐ ์žฅ์•  ๋ฐœ์ƒ ์‹œ์ ์„ ํ‘œ์‹œํ•ด์„œ, ํŒจํ„ด ๋ถ„์„

์Šค์ผ€์ผ๋ง ์ด๋ฒคํŠธ:
์˜คํ† ์Šค์ผ€์ผ๋ง์ด ๋ฐœ์ƒํ•œ ์‹œ์ ์„ ํ‘œ์‹œํ•ด์„œ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ํŒจํ„ด ํŒŒ์•…

์™ธ๋ถ€ ์ด๋ฒคํŠธ:
๋งˆ์ผ€ํŒ… ์บ ํŽ˜์ธ, ์ด๋ฒคํŠธ ์‹œ์ž‘ ์‹œ์  ๋“ฑ์„ ํ‘œ์‹œํ•ด์„œ ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™” ์›์ธ ๋ถ„์„

๐Ÿ”— Templating๊ณผ Linking

์—ฌ๋Ÿฌ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ๋“œ๋ฆด๋‹ค์šด(drill-down) ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ์–ด. ์ „์ฒด ๊ฐœ์š”์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ ์  ์ƒ์„ธํ•œ ์ •๋ณด๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฑฐ์ง€!

# ํŒจ๋„์—์„œ ๋‹ค๋ฅธ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋งํฌ ์„ค์ •
/d/detailed-dashboard?var-server=$server&from=$__from&to=$__to

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŠน์ • ์„œ๋ฒ„๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์„œ๋ฒ„์˜ ์ƒ์„ธ ๋Œ€์‹œ๋ณด๋“œ๋กœ ์ด๋™ํ•˜๋ฉด์„œ, ๊ฐ™์€ ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด. ์ •๋ง ํŽธ๋ฆฌํ•˜์ง€? ๐Ÿ˜Ž

โœ… ์‹ค์ „ ํŒ: ๋Œ€์‹œ๋ณด๋“œ ๊ณ„์ธต ๊ตฌ์กฐ

๋Œ€์‹œ๋ณด๋“œ๋ฅผ 3๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ํšจ๊ณผ์ ์ด์•ผ:

Level 1 - Overview: ์ „์ฒด ์‹œ์Šคํ…œ ์ƒํƒœ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ
Level 2 - Service: ํŠน์ • ์„œ๋น„์Šค๋‚˜ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ธ ์ •๋ณด
Level 3 - Deep Dive: ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค๋‚˜ ๋ฉ”ํŠธ๋ฆญ ์‹ฌ์ธต ๋ถ„์„

๊ฐ ๋ ˆ๋ฒจ์—์„œ ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งํฌ๋ฅผ ์„ค์ •ํ•ด์ค˜!

๐ŸŽ“ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋งŒ๋‚˜๋Š” ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ๋ฒ•

์ด๋ก ์€ ์™„๋ฒฝํ•ด๋„ ์‹ค์ „์—์„œ๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋“ค์ด ์ƒ๊ธฐ๊ธฐ ๋งˆ๋ จ์ด์•ผ. ๋‚ด๊ฐ€ ๊ฒช์—ˆ๋˜ (๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฒช๋Š”) ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ๋ฒ•์„ ๊ณต์œ ํ• ๊ฒŒ! ๐Ÿ’ช

๐ŸŒ ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

โš ๏ธ ๋ฌธ์ œ: ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋А๋ ค์š”!

๋Œ€์‹œ๋ณด๋“œ์— ํŒจ๋„์ด ๋„ˆ๋ฌด ๋งŽ๊ฑฐ๋‚˜, ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•˜๋ฉด ๋กœ๋”ฉ์ด ์—„์ฒญ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์–ด.

๐Ÿš€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ์ฟผ๋ฆฌ ์ตœ์ ํ™”:
- ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด๋ธ” ์ œ๊ฑฐ
- ์ง‘๊ณ„ ํ•จ์ˆ˜ ํ™œ์šฉ (avg, sum ๋“ฑ)
- ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์ ์ ˆํžˆ ์ œํ•œ

2. ํŒจ๋„ ์ˆ˜ ์ค„์ด๊ธฐ:
- ํ•œ ํ™”๋ฉด์— 15๊ฐœ ์ดํ•˜์˜ ํŒจ๋„ ๊ถŒ์žฅ
- ๋น„์Šทํ•œ ๋ฉ”ํŠธ๋ฆญ์€ ํ•˜๋‚˜์˜ ํŒจ๋„์— ํ†ตํ•ฉ
- ๋œ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋ณ„๋„ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋ถ„๋ฆฌ

3. ์บ์‹ฑ ํ™œ์šฉ:
- Query caching ํ™œ์„ฑํ™”
- ์ ์ ˆํ•œ refresh interval ์„ค์ • (5์ดˆ๋ณด๋‹ค๋Š” 30์ดˆ)
- ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉ

4. ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ตœ์ ํ™”:
- Prometheus์˜ ๊ฒฝ์šฐ recording rules ์‚ฌ์šฉ
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค ํ™•์ธ
- ๋ถˆํ•„์š”ํ•œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ์ค‘๋‹จ

๐Ÿ”’ ๋ณด์•ˆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ

ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณด์•ˆ์€ ํ•„์ˆ˜์•ผ. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ชจ๋“  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ณผ ํ•„์š”๋Š” ์—†์œผ๋‹ˆ๊นŒ!

๐Ÿ›ก๏ธ ๊ถŒํ•œ ๊ด€๋ฆฌ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

Organization ํ™œ์šฉ:
ํŒ€์ด๋‚˜ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ Organization์„ ๋ถ„๋ฆฌํ•ด. ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.

Team ๊ธฐ๋ฐ˜ ๊ถŒํ•œ:
๊ฐœ์ธ์ด ์•„๋‹Œ ํŒ€ ๋‹จ์œ„๋กœ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด. ์‚ฌ๋žŒ์ด ๋ฐ”๋€Œ์–ด๋„ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ ธ.

Folder ๊ถŒํ•œ:
๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํด๋”๋กœ ๊ตฌ์กฐํ™”ํ•˜๊ณ , ํด๋” ๋‹จ์œ„๋กœ ๊ถŒํ•œ์„ ์„ค์ •ํ•ด.

Read-only ์‚ฌ์šฉ์ž:
๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ํŽธ์ง‘ ๊ถŒํ•œ์€ ์ตœ์†Œํ•œ์œผ๋กœ ์ œํ•œํ•ด.

๐Ÿ’พ ๋ฐฑ์—… ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ

๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—ด์‹ฌํžˆ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๋‚ ์•„๊ฐ€๋ฉด ์ •๋ง ์Šฌํ”„์ž–์•„? ๋ฐฑ์—…์€ ํ•„์ˆ˜์•ผ!

๐Ÿ“ฆ ๋Œ€์‹œ๋ณด๋“œ ๋ฐฑ์—… ์ „๋žต

1. JSON ํŒŒ์ผ๋กœ Export:
๊ฐ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•ด์„œ Git์— ์ปค๋ฐ‹

2. API๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋ฐฑ์—…:

# ๋ชจ๋“  ๋Œ€์‹œ๋ณด๋“œ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ
#!/bin/bash
GRAFANA_URL="http://localhost:3000"
API_KEY="your-api-key"

curl -H "Authorization: Bearer $API_KEY" \
  "$GRAFANA_URL/api/search?type=dash-db" | \
  jq -r '.[] | .uid' | \
  while read uid; do
    curl -H "Authorization: Bearer $API_KEY" \
      "$GRAFANA_URL/api/dashboards/uid/$uid" > "backup_$uid.json"
  done

3. Grafana์˜ Provisioning ๊ธฐ๋Šฅ: YAML ํŒŒ์ผ๋กœ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ , Git์œผ๋กœ ๊ด€๋ฆฌ. Infrastructure as Code ๋ฐฉ์‹!

4. ์ •๊ธฐ์ ์ธ ์Šค๋ƒ…์ƒท:
์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์ „์—๋Š” ํ•ญ์ƒ ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•ด. Grafana Cloud๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ๋ฐฑ์—…๋„ ๊ฐ€๋Šฅํ•ด.

๐Ÿ” ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๊ฒฐ ๋ฌธ์ œ

โš ๏ธ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋“ค

"Connection refused":
โ†’ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
โ†’ ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
โ†’ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ํ™•์ธ

"Unauthorized":
โ†’ ์ธ์ฆ ์ •๋ณด ํ™•์ธ (API ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ)
โ†’ ๊ถŒํ•œ ์„ค์ • ํ™•์ธ

"Timeout":
โ†’ ์ฟผ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ
โ†’ ์‹œ๊ฐ„ ๋ฒ”์œ„ ์ค„์ด๊ธฐ
โ†’ ์ฟผ๋ฆฌ ์ตœ์ ํ™”

"No data":
โ†’ ์ฟผ๋ฆฌ ๋ฌธ๋ฒ• ํ™•์ธ
โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
โ†’ ์‹œ๊ฐ„ ๋ฒ”์œ„ ํ™•์ธ (๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ์žˆ๋Š”์ง€)

๐ŸŒŸ ์žฌ๋Šฅ๋„ท์—์„œ Grafana ์ „๋ฌธ๊ฐ€ ์ฐพ๊ธฐ

ํ˜ผ์ž์„œ Grafana๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด? ๊ฑฑ์ • ๋งˆ! ์žฌ๋Šฅ๋„ท์—๋Š” Grafana์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์ „๋ฌธ๊ฐ€๋“ค์ด ๋งŽ์•„. ๐ŸŽฏ

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

๐Ÿ’ผ ์žฌ๋Šฅ๋„ท์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋„์›€

โœ… Grafana ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •
โœ… ๋งž์ถคํ˜• ๋Œ€์‹œ๋ณด๋“œ ๋””์ž์ธ ๋ฐ ๊ตฌ์ถ•
โœ… ์•Œ๋ฆผ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
โœ… ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ปจ์„คํŒ…
โœ… ๋ชจ๋‹ˆํ„ฐ๋ง ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
โœ… ํŒ€ ๊ต์œก ๋ฐ ์›Œํฌ์ƒต
โœ… ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ฐ ๊ธฐ์ˆ  ์ง€์›

ํŠนํžˆ DevOps ์—”์ง€๋‹ˆ์–ด๋‚˜ SRE(Site Reliability Engineer) ์ „๋ฌธ๊ฐ€๋“ค์ด ์‹ค์ „ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•ด์ค„ ์ˆ˜ ์žˆ์–ด. ์ฑ…์ด๋‚˜ ๋ฌธ์„œ๋กœ๋Š” ๋ฐฐ์šธ ์ˆ˜ ์—†๋Š” ์‹ค๋ฌด ํŒ๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์ง€! ๐Ÿ˜Š

๐Ÿš€ Grafana์˜ ๋ฏธ๋ž˜์™€ ํŠธ๋ Œ๋“œ

Grafana๋Š” ๊ณ„์† ์ง„ํ™”ํ•˜๊ณ  ์žˆ์–ด. ์ตœ์‹  ํŠธ๋ Œ๋“œ๋ฅผ ์•Œ์•„๋‘๋ฉด ์•ž์œผ๋กœ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ• ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์ง€!

๐Ÿ”ฎ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค

๐Ÿ†• Grafana์˜ ์ตœ์‹  ๊ธฐ๋Šฅ๋“ค

1. Grafana Loki:
๋กœ๊ทธ ์ง‘๊ณ„ ์‹œ์Šคํ…œ. Prometheus์ฒ˜๋Ÿผ ๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ๋กœ๊ทธ์™€ ๋ฉ”ํŠธ๋ฆญ์„ ํ•œ ๊ณณ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ํฐ ์žฅ์ !

2. Grafana Tempo:
๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing) ์‹œ์Šคํ…œ. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์š”์ฒญ์˜ ์ „์ฒด ํ๋ฆ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด.

3. Grafana Mimir:
๋Œ€๊ทœ๋ชจ Prometheus ๋ฉ”ํŠธ๋ฆญ์„ ์œ„ํ•œ ์žฅ๊ธฐ ์ €์žฅ์†Œ. ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด.

4. Machine Learning ํ†ตํ•ฉ:
์ด์ƒ ํƒ์ง€(Anomaly Detection)์™€ ์˜ˆ์ธก ๋ถ„์„ ๊ธฐ๋Šฅ์ด ๊ฐ•ํ™”๋˜๊ณ  ์žˆ์–ด. AI๊ฐ€ ์ž๋™์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์‹œ๋Œ€๊ฐ€ ์˜ค๊ณ  ์žˆ์ง€!

5. Grafana Cloud:
์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค. ์„ค์น˜๋‚˜ ๊ด€๋ฆฌ ๊ฑฑ์ • ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ๋ฌด๋ฃŒ ํ‹ฐ์–ด๋„ ์ œ๊ณตํ•ด!

๐Ÿ“ˆ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ(Observability)์˜ 3๊ฐ€์ง€ ๊ธฐ๋‘ฅ

ํ˜„๋Œ€์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ๋‹จ์ˆœํžˆ ๋ฉ”ํŠธ๋ฆญ๋งŒ ๋ณด๋Š” ๊ฒŒ ์•„๋‹ˆ์•ผ. ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ํ†ตํ•ฉํ•ด์„œ ๋ด์•ผ ํ•ด:

๐Ÿ›๏ธ Observability์˜ 3 Pillars

1. Metrics (๋ฉ”ํŠธ๋ฆญ):
์ˆซ์ž๋กœ ํ‘œํ˜„๋˜๋Š” ์‹œ์Šคํ…œ ์ƒํƒœ. CPU, ๋ฉ”๋ชจ๋ฆฌ, ์‘๋‹ต ์‹œ๊ฐ„ ๋“ฑ
โ†’ Prometheus + Grafana

2. Logs (๋กœ๊ทธ):
์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ก
โ†’ Loki + Grafana

3. Traces (์ถ”์ ):
์š”์ฒญ์ด ์‹œ์Šคํ…œ์„ ํ†ต๊ณผํ•˜๋Š” ์ „์ฒด ๊ฒฝ๋กœ
โ†’ Tempo + Grafana

์ด ์„ธ ๊ฐ€์ง€๋ฅผ Grafana ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์—„์ฒญ๋‚œ ์žฅ์ ์ด์•ผ! ๐ŸŽฏ

๐ŸŒ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ์˜ Grafana

Kubernetes์™€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด ๋Œ€์„ธ๊ฐ€ ๋˜๋ฉด์„œ, Grafana์˜ ์—ญํ• ๋„ ๋” ์ค‘์š”ํ•ด์ง€๊ณ  ์žˆ์–ด.

โ˜๏ธ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๋ชจ๋‹ˆํ„ฐ๋ง ํŠธ๋ Œ๋“œ

๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง:
์—ฌ๋Ÿฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๊ด€๋ฆฌ

์„œ๋น„์Šค ๋ฉ”์‹œ ํ†ตํ•ฉ:
Istio, Linkerd ๊ฐ™์€ ์„œ๋น„์Šค ๋ฉ”์‹œ์™€ ํ†ตํ•ฉํ•ด์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ชจ๋‹ˆํ„ฐ๋ง

๋น„์šฉ ์ตœ์ ํ™”:
ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋น„์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ 

GitOps ํ†ตํ•ฉ:
๋Œ€์‹œ๋ณด๋“œ ์„ค์ •์„ Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํ†ตํ•ฉ

๐Ÿ’ก ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ

์ด๋ก ๋งŒ ๋ฐฐ์šฐ๋ฉด ์žฌ๋ฏธ์—†์ž–์•„? ์‹ค์ œ๋กœ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ๋ฅผ ์†Œ๊ฐœํ• ๊ฒŒ! ๐Ÿ› ๏ธ

๐ŸŽฎ ํ”„๋กœ์ ํŠธ 1: ๊ฐœ์ธ ํ™ˆ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง

์ง‘์— ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋‚˜ NAS๊ฐ€ ์žˆ๋‹ค๋ฉด ์™„๋ฒฝํ•œ ์—ฐ์Šต ๋Œ€์ƒ์ด์•ผ!

๐Ÿ“‹ ๊ตฌ์ถ• ๋‹จ๊ณ„

Step 1: Node Exporter ์„ค์น˜ (์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘)
Step 2: Prometheus ์„ค์น˜ ๋ฐ ์„ค์ •
Step 3: Grafana ์„ค์น˜
Step 4: ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌ์„ฑ
Step 5: ๋””์Šคํฌ ๊ณต๊ฐ„ ์•Œ๋ฆผ ์„ค์ •
Step 6: ๋ชจ๋ฐ”์ผ์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”

# Node Exporter ์„ค์น˜ (Ubuntu/Debian)
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
./node_exporter &

# Prometheus ์„ค์ • (prometheus.yml)
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
๐ŸŒ ํ”„๋กœ์ ํŠธ 2: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง

์ž์‹ ์ด ๋งŒ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด๋ณด์ž!

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ฃผ์š” ๋ฉ”ํŠธ๋ฆญ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”ํŠธ๋ฆญ:
- ์š”์ฒญ ์ˆ˜ (RPS: Requests Per Second)
- ์‘๋‹ต ์‹œ๊ฐ„ (ํ‰๊ท , P50, P95, P99)
- ์—๋Ÿฌ์œจ
- ํ™œ์„ฑ ์‚ฌ์šฉ์ž ์ˆ˜

์ธํ”„๋ผ ๋ฉ”ํŠธ๋ฆญ:
- ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ˆ˜
- ์บ์‹œ ํžˆํŠธ์œจ
- ํ ๊ธธ์ด

๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”ํŠธ๋ฆญ:
- ์‹ ๊ทœ ๊ฐ€์ž…์ž ์ˆ˜
- ์ „ํ™˜์œจ
- ๋งค์ถœ
- ์‚ฌ์šฉ์ž ํ–‰๋™ ํŒจํ„ด

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฉ”ํŠธ๋ฆญ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ:

# Python Flask ์˜ˆ์ œ
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/api/users')
@metrics.counter('api_users_requests', 'Number of requests to /api/users')
def get_users():
    # ์‚ฌ์šฉ์ž ๋ชฉ๋ก ๋ฐ˜ํ™˜
    return jsonify(users)

# Node.js Express ์˜ˆ์ œ
const promClient = require('prom-client');
const register = new promClient.Registry();

const httpRequestDuration = new promClient.Histogram({
  name: 'http_request_duration_seconds',
  help: 'Duration of HTTP requests in seconds',
  labelNames: ['method', 'route', 'status_code']
});

register.registerMetric(httpRequestDuration);
๐Ÿข ํ”„๋กœ์ ํŠธ 3: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ชจ๋‹ˆํ„ฐ๋ง

์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ณต์žกํ•œ ํ™˜๊ฒฝ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด๋ณด์ž!

๐Ÿ”— ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ ์‹œ๊ฐํ™”

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด. Grafana์—์„œ๋Š”:

1. Service Graph: ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œ์‹œ
2. Trace View: ๊ฐœ๋ณ„ ์š”์ฒญ์˜ ์ „์ฒด ํ๋ฆ„ ์ถ”์ 
3. Dependency Map: ์„œ๋น„์Šค ์˜์กด์„ฑ ๋งต
4. Error Tracking: ์–ด๋А ์„œ๋น„์Šค์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ 

โœ… ํ”„๋กœ ํŒ: Golden Signals

Google SRE ํŒ€์ด ์ œ์•ˆํ•œ "Golden Signals"๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด:

1. Latency (์ง€์—ฐ์‹œ๊ฐ„): ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„
2. Traffic (ํŠธ๋ž˜ํ”ฝ): ์‹œ์Šคํ…œ์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜
3. Errors (์—๋Ÿฌ): ์‹คํŒจํ•œ ์š”์ฒญ์˜ ๋น„์œจ
4. Saturation (ํฌํ™”๋„): ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋ฅ 

์ด ๋„ค ๊ฐ€์ง€๋งŒ ์ž˜ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด๋„ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŽฏ

๐ŸŽ“ ํ•™์Šต ๋ฆฌ์†Œ์Šค์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ

Grafana๋ฅผ ๋” ๊นŠ์ด ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด? ์ด๋Ÿฐ ๋ฆฌ์†Œ์Šค๋“ค์„ ํ™œ์šฉํ•ด๋ด! ๐Ÿ“š

๐Ÿ“– ์ถ”์ฒœ ํ•™์Šต ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ:
grafana.com/docs - ๊ฐ€์žฅ ์ •ํ™•ํ•˜๊ณ  ์ตœ์‹  ์ •๋ณด

Grafana Labs YouTube:
๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ ์˜์ƒ๋“ค. ์‹ค์ œ ํ™”๋ฉด์„ ๋ณด๋ฉด์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด

Grafana Community:
community.grafana.com - ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํฌ๋Ÿผ

GitHub:
github.com/grafana/grafana - ์†Œ์Šค ์ฝ”๋“œ์™€ ์ด์Šˆ ํŠธ๋ž˜์ปค

Grafana Play:
play.grafana.org - ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ๋ชจ ํ™˜๊ฒฝ

๐Ÿ‘ฅ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌํ•˜๊ธฐ

Slack:
Grafana ๊ณต์‹ Slack ์ฑ„๋„์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ ๋ฐ›๊ธฐ

Reddit:
r/grafana - ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์˜ ๊ฒฝํ—˜๊ณผ ํŒ ๊ณต์œ 

Stack Overflow:
[grafana] ํƒœ๊ทธ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋งŽ์€ Q&A๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด

Meetup:
์ง€์—ญ๋ณ„ Grafana/Prometheus ๋ฐ‹์—…์— ์ฐธ์—ฌํ•ด์„œ ๋„คํŠธ์›Œํ‚น

๐Ÿ’ก ํ•™์Šต ํŒ

Grafana๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฒƒ์ด์•ผ! ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ ์  ๋ณต์žกํ•œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ด. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ Importํ•ด์„œ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€ ๋ถ„์„ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ํฐ ๋„์›€์ด ๋ผ.

ํŠนํžˆ ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์ „๋ฌธ๊ฐ€์—๊ฒŒ 1:1 ๋ฉ˜ํ† ๋ง์„ ๋ฐ›์œผ๋ฉด ํ•™์Šต ์†๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์งˆ ๊ฑฐ์•ผ! ๐Ÿš€

๐ŸŽฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€, ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ •๋ง ๋Œ€๋‹จํ•ด! ๐Ÿ‘ Grafana์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์€ ๊ฑธ ๋ฐฐ์› ์„ ๊ฑฐ์•ผ.

์ฒ˜์Œ์—๋Š” ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ ํ•˜๋‹ค ๋ณด๋ฉด ์–ด๋А์ƒˆ ๋ฉ‹์ง„ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ์ž์‹ ์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋  ๊ฑฐ์•ผ. ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ๋‹จ์ˆœํžˆ ์ˆซ์ž๋ฅผ ๋ณด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ์˜ ๊ฑด๊ฐ• ์ƒํƒœ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฒƒ์ด์•ผ. ๐Ÿฅ

๐ŸŽฏ ํ•ต์‹ฌ ์š”์•ฝ

โœ… Grafana๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ ์‹œ๊ฐํ™” ํ”Œ๋žซํผ
โœ… ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ง€์›ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์—ฐ๋™ ๊ฐ€๋Šฅ
โœ… ์ง๊ด€์ ์ธ UI๋กœ ๋ˆ„๊ตฌ๋‚˜ ๋Œ€์‹œ๋ณด๋“œ ์ œ์ž‘ ๊ฐ€๋Šฅ
โœ… ์•Œ๋ฆผ ๊ธฐ๋Šฅ์œผ๋กœ 24/7 ๋ชจ๋‹ˆํ„ฐ๋ง ์ž๋™ํ™”
โœ… ์˜คํ”ˆ์†Œ์Šค๋ผ์„œ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โœ… ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ’๋ถ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ
โœ… ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”
โœ… ์ง€์†์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ์ƒํƒœ๊ณ„

DevOps์™€ SRE ๋ฌธํ™”๊ฐ€ ํ™•์‚ฐ๋˜๋ฉด์„œ Grafana ๊ฐ™์€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์˜ ์ค‘์š”์„ฑ์€ ๊ณ„์† ์ปค์ง€๊ณ  ์žˆ์–ด. ์ด์ œ๋Š” ๊ฐœ๋ฐœ์ž๋“  ์šด์˜์ž๋“  ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃฐ ์ค„ ์•„๋Š” ๊ฒŒ ๊ธฐ๋ณธ ์Šคํ‚ฌ์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ์ง€. ๐Ÿ“ˆ

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ข‹์€ ์„ ํƒ์ด์•ผ. ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ DevOps ์—”์ง€๋‹ˆ์–ด๋“ค์ด ๋„ˆ์˜ ์ƒํ™ฉ์— ๋งž๋Š” ๋งž์ถคํ˜• ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๊ฑฐ๋“ !

๐Ÿš€ ๋‹ค์Œ ๋‹จ๊ณ„

์ด์ œ ๋ญ˜ ํ•ด์•ผ ํ• ๊นŒ?

1๋‹จ๊ณ„: Grafana๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ฒซ ๋Œ€์‹œ๋ณด๋“œ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
2๋‹จ๊ณ„: ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ๋‚˜ ์„œ๋ฒ„์— ์ ์šฉํ•ด๋ณด๊ธฐ
3๋‹จ๊ณ„: ์•Œ๋ฆผ ์„ค์ •ํ•˜๊ณ  ์‹ค์ œ๋กœ ๋ฌธ์ œ ๊ฐ์ง€ํ•ด๋ณด๊ธฐ
4๋‹จ๊ณ„: ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค ํ•˜๋‚˜์”ฉ ์‹œ๋„ํ•ด๋ณด๊ธฐ
5๋‹จ๊ณ„: ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜๊ณ  ๊ฒฝํ—˜ ๊ณต์œ ํ•˜๊ธฐ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด์•ผ! ์™„๋ฒฝํ•  ํ•„์š” ์—†์–ด. ์ผ๋‹จ ์‹œ์ž‘ํ•˜๊ณ , ์กฐ๊ธˆ์”ฉ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋ฉด ๋ผ. ๐Ÿ’ช

๋ชจ๋‹ˆํ„ฐ๋ง์€ ์˜ˆ์ˆ ์ด์ž ๊ณผํ•™์ด์•ผ. ๋ฐ์ดํ„ฐ๋ฅผ ์•„๋ฆ„๋‹ต๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๋ฉด์„œ๋„, ์‹ค์šฉ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด์•ผ ํ•˜๊ฑฐ๋“ . Grafana๋Š” ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑ์‹œ์ผœ์ฃผ๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์•ผ. ๐ŸŽจ

์ด ๊ธ€์ด ๋„ˆ์˜ Grafana ์—ฌ์ •์— ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด. ์งˆ๋ฌธ์ด ์žˆ๊ฑฐ๋‚˜ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋ฌผ์–ด๋ด. ๋ชจ๋‘๊ฐ€ ์ฒ˜์Œ์—” ์ดˆ๋ณด์˜€์œผ๋‹ˆ๊นŒ, ๋ถ€๋„๋Ÿฌ์›Œํ•  ํ•„์š” ์—†์–ด! ๐Ÿ˜Š

๊ทธ๋Ÿผ ํ–‰๋ณตํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋˜๊ธธ ๋ฐ”๋ผ! Happy Monitoring! ๐ŸŽ‰

Happy Monitoring! Grafana์™€ ํ•จ๊ป˜ํ•˜๋Š” ์ฆ๊ฑฐ์šด ์‹œ๊ฐํ™” ์—ฌ์ • ๐Ÿ“Š ๐Ÿš€ ๐Ÿ’ก ์‹œ๊ฐํ™” ์ž๋™ํ™” ์ตœ์ ํ™”

๐ŸŒŸ ๋” ๋งŽ์€ DevOps ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค๋ฉด?

์žฌ๋Šฅ๋„ท์—์„œ ํด๋ผ์šฐ๋“œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, CI/CD, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ
๋‹ค์–‘ํ•œ DevOps ๋ถ„์•ผ์˜ ์ „๋ฌธ๊ฐ€๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.