Grafana: ์•Œ๋ฆผ: ์‹œ๊ฐ„ ์ œํ•œ

์— ๋งŒ๋“  2016๋…„ 11์›” 16์ผ  ยท  83์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: grafana/grafana

์‹œ๊ฐ„ ์ œํ•œ.

์ด๊ฒƒ์ด ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

1) ๊ฒฝ๋ณด ์กฐ๊ฑด์œผ๋กœ
2) ์•Œ๋ฆผ์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋กœ

arealerting typfeature-request

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ prometheus๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉ:

  • ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ๋ฉ”ํŠธ๋ฆญ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. hour() , ์ด๋Š” ์‹œ๊ฐ„(0-23)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ณ ์— AND ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ hour() ์ฟผ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฒ”์œ„(์˜ˆ: ๊ทผ๋ฌด ์‹œ๊ฐ„) ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

day_of_week() ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  83 ๋Œ“๊ธ€

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

ํ˜„์žฌ ์ƒํƒœ๋กœ ๋ชจ๋“  ๊ฒฝ๊ณ  ์•Œ๋ฆผ์„ ๋„๊ฑฐ๋‚˜ ๋‚ด ํ”„๋กœ์„ธ์Šค๊ฐ€ EOD๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ ๋งŽ์€ ๊ฐ€์งœ ์•Œ๋ฆผ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ˆ˜๋ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

@bblazei ๋‹น์‹  ๋ง์ด ๋งž์•„! ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ด์•ผ ํ•˜๊ณ  ํ™•์‹คํžˆ ๋„์›€์ด ๋˜๋Š” ๋†€๋ผ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค!
@torkelo ์ด ๊ธฐ๋Šฅ์ด ์–ธ์ œ ๊ณ„ํš๋ ์ง€ ์•„์‹ญ๋‹ˆ๊นŒ?

๋‹ค์Œ ๋‘ ๋ฆด๋ฆฌ์Šค(4.3 ๋ฐ 4.4)์— ๋Œ€ํ•œ ๋กœ๋“œ๋งต์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ Eta๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ  ์•„์‰ฝ๋„ค์š”. ์—ฐ์ค‘๋ฌดํœด๊ฐ€ ์•„๋‹Œ ์‹œ์Šคํ…œ์—์„œ ๊ฒฝ๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋ฃจ ์ค‘ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฝ๋ณด ์ˆ˜์ค€์„ ๊ฐ€์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” (๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค) ์ฐธ์„์„ฑ ์žˆ๊ฒŒ ์ด๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ฃผ๊ธฐ์ ์œผ๋กœ Slack ๊ทธ๋ž˜ํ”„์— curl์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@torkelo ํ† ๋ฅด์ผˆ๋กœ. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”์ง€ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ grafana ๊ฒฝ๊ณ ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฒฝ๊ณ  ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ๊ฒฝ๊ณ ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ผ์‹œ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ (์˜ˆ๋ฅผ ๋“ค์–ด) ๋งค์ผ 2:30a DB ์„œ๋ฒ„ ๋ฐฑ์—… ์ค‘์— "Network I/O Waits In Progress"์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์•Œ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ๊ณ ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

grafana๋Š” ๋ชจ๋“ˆ๋กœ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ID ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจ๋„์—์„œ ์ถ”๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ 86400(ํ•˜๋ฃจ์˜ ์ดˆ ์ˆ˜)์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฝ๊ณ ์˜ ์‹œ๊ฐ„ ์ธก์ •ํ•ญ๋ชฉ์— ๋ฒ”์œ„ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

์ด ๋ชฉ์ ์„ ์œ„ํ•ด ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? WIP์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์•„์ง '๊ณ ๋ ค ์ค‘'์ธ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๊ฐ™์€ ํŠน์ • ๊ฒฝ๊ณ ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ฎ์—๋Š” ํŠน์ • ์ž„๊ณ„๊ฐ’ ์ด์ƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์ง€๋งŒ ๋ฐค์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

+1

+1

+1

์‚ฌ๋žŒ๋“ค( @bascarsija & @maizy)์ด ์ด์— ๋Œ€ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์š”์ฒญ์— ๋ฐ˜๋Œ€ ํˆฌํ‘œ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์‚ฌ๋žŒ๋“ค์€ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ด๋ฉ”์ผ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ํ•˜๋Š” ์ด๋Ÿฌํ•œ "+1" ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด "๋ฐ˜๋Œ€ ํˆฌํ‘œ"ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋Ÿฌํ•œ "+1" ๋ฉ”์‹œ์ง€๋ฅผ ์Šค๋ ˆ๋“œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ˆ„์  ํšจ๊ณผ๋Š” ์‹ ํ˜ธ ๋Œ€ ์žก์Œ๋น„๋ฅผ ํฌ๊ฒŒ ์ค„์ž„์œผ๋กœ์จ ์Šค๋ ˆ๋“œ ๊ตฌ๋… ๊ธฐ๋Šฅ์˜ ๊ฐ€์น˜๋ฅผ ํฌ๊ฒŒ ์ค„์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘์„ ํ†ตํ•ด ๋‹จ์ˆœํžˆ "up-voting" ๋˜๋Š” "down-voting"ํ•˜์—ฌ ๊ทธ๋Ÿฌํ•œ ์ด๋ฉ”์ผ ์•Œ๋ฆผ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ์ œ์•ˆ์ด๋‚˜ ์˜๊ฒฌ์— ๋Œ€ํ•œ ๊ด€์‹ฌ ๋˜๋Š” ๋™์˜๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—ฐ๋Œ€/์ด์ฒด์ ์ธ ๊ด€์‹ฌ์˜ ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง„ ํ‘œ์‹œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ์˜ ์ดˆ๊ธฐ/๊ธฐ๋ณธ ์„ค๋ช…์— ๋Œ€ํ•œ ๋ฐ˜์‘ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ๋ฐ˜์‘์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

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

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ +1 ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์ด ๋‹จ์ง€ ์„ฑ๊ฐ€์‹  ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์งง์€ ์„ค๋ช…์„ ๊ฒŒ์‹œํ•˜๋ฉด ๊ทธ ์ค‘ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์งˆ๋ฌธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์‹ซ์–ด์š”๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ, ์ฃผ, ์›”, ์—ฐ๋„ ์ค‘ ํŠน์ • ์‹œ๊ฐ„์— ์ผ์ • ์•Œ๋ฆผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ prometheus๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉ:

  • ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ๋ฉ”ํŠธ๋ฆญ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. hour() , ์ด๋Š” ์‹œ๊ฐ„(0-23)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ณ ์— AND ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ hour() ์ฟผ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฒ”์œ„(์˜ˆ: ๊ทผ๋ฌด ์‹œ๊ฐ„) ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

day_of_week() ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ „ ์„ธ๊ณ„์˜ ์—ฌ๋Ÿฌ ํŒ€์„ ๊ธฐ๋ฐ˜์œผ๋กœ 24์‹œ๊ฐ„ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ์ด ๊ธฐ๋Šฅ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋™์•ˆ ์ด ๊ธฐ๋Šฅ์ด ์ค€๋น„๋˜๋Š” ๋™์•ˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

```
metric A : production.application_a.actual_metric = 123(์ด๊ฒƒ์€ ์‹ค์ œ ๋ฉ”ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค)
metric B : helper.time_helper.hour = 1 ~ 24 ( ๋งค๋ถ„ ๋งค๋ถ„ ํ‘์—ฐ์œผ๋กœ ์ „์†ก๋˜๋Š” ๊ฐ€์งœ ์‹œ๊ฐ„ ๋ฉ”ํŠธ๋ฆญ)

   alert requirement :

(๋ฉ”ํŠธ๋ฆญ A๋Š” 100 ๋ฏธ๋งŒ์ด๊ณ  ์‹œ๊ฐ„์€ 10 ๋ฐ 20 ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Œ)
๋˜๋Š”
(๋ฉ”ํŠธ๋ฆญ A๋Š” 50 ๋ฏธ๋งŒ์ด๊ณ  ์‹œ๊ฐ„์€ 10 ๋ฐ 20 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚จ)
```

๋‹ค์‹œ ๋งํ•ด์„œ:

metric A threshold is 100 between 10AM to 8PM and it is 50 for rest of the time

๋‚ด ์งˆ๋ฌธ :

์œ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋‹จ์ผ ๊ทธ๋ž˜ํ”„ ํŒจ๋„๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚ด๋ถ€ ๋ฒ”์œ„์™€ ์™ธ๋ถ€ ๋ฒ”์œ„์— ๋Œ€ํ•ด ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„ ํŒจ๋„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด grafana์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? (์ฐธ๊ณ : ํ‘์—ฐ 0.9๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

image

๋˜ํ•œ ์ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ grafana์— ์ž˜๋ชป๋œ ๋ฉ”ํŠธ๋ฆญ์„ ๋ณด๋‚ด๋Š” ํฅ๋ฏธ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”ํŠธ๋ฆญ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ข‹์€ ์˜ต์…˜์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ?

+1 ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ  ์กฐ๊ฑด์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์˜์˜ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

1๊ณผ 2 ์‚ฌ์ด์˜ ์‹œ๊ฐ„ AND

+1 ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

์กฐ์žกํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜๊ฒฌ
๋‚˜๋Š” collectd / Influxdb๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ”Œ๋žซ ext ํŒŒ์ผ์— ์‹œ๊ฐ„ ๊ฐ’์„ ์“ฐ๋Š” cron ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ” ์ˆ˜์ง‘ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ด๊ฒƒ์„ Table_Value - ์ธ์Šคํ„ด์Šค "์‹œ๊ฐ„"์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค.
๋ฒ”์œ„๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๊ณ ์—์„œ ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐ„(์ตœ๋Œ€)์„ ๋Œ€์‹œ๋ณด๋“œ์— ์ˆจ๊ฒจ์ง„ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๊ฒฝ๊ณ ์—์„œ AND ๋ฒ”์œ„ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด X์™€ Y ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
๊ฐ™์€ ์ผ์ด ์š”์ผ์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํˆฌ๋ฐ•ํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ

@torkelo ์ด๊ฒƒ์ด ์–ธ์ œ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ํŒ€ ๋กœ๋“œ๋งต์—๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Cloud vm ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ˆ์•ฝ ํ•ด์ œ๋กœ ์ธํ•ด ํ•ด์ œ๋˜๋„๋ก ์˜ˆ์•ฝ๋  ๋•Œ ๊ฒฝ๊ณ ๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ชจ๋“  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•. ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์€ ์ˆ˜๋…„ ๋™์•ˆ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค ;) ๊ฒฝ๊ณ  ํ”ผ๋กœ ์„ค์ •.

ํ”Œ๋žซ ext ํŒŒ์ผ์— ์‹œ๊ฐ„ ๊ฐ’์„ ์“ฐ๋Š” cron ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฒ”์œ„๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๊ณ ์—์„œ ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐ„(์ตœ๋Œ€)์„ ๋Œ€์‹œ๋ณด๋“œ์— ์ˆจ๊ฒจ์ง„ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ๊ฒฝ๊ณ ์—์„œ AND ๋ฒ”์œ„ ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด X์™€ Y ์‚ฌ์ด์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ X - Y ์‚ฌ์ด์˜ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฏธ๋ฌ˜ํ•˜์ง€๋งŒ ์œ ์šฉํ•œ ์ด์ ์ด ์žˆ๋Š” ๋งค์šฐ ํšจ๊ณผ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Y ์ „์— ์ƒํ™ฉ์ด ์ˆ˜์ •๋˜์ง€ ์•Š์œผ๋ฉด Y์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. X - Y ์‚ฌ์ด์˜ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ์ €๋Š” Y ํ›„์—๋„ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค("์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ).

ํ‘์—ฐ์„ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•  ๋•Œ ํฌ๋ก  ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

timeSlice(isNonNull(identity(1)), '02:30 -9h', '06:00 -9h') C ๋ฉ”ํŠธ๋ฆญ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฒฝ๊ณ  ์กฐ๊ฑด AND max() OF query(C, 1m, now) HAS NO VALUE ์„ ์ถ”๊ฐ€ํ•˜์—ฌ 2:30 - 6:00 ์‚ฌ์ด์˜ ๊ฒฝ๊ณ ๋ฅผ ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค. ( -9h ๋Š” ๋‚ด ์‹œ๊ฐ„๋Œ€ ์˜คํ”„์…‹์ด +9:00์ด๊ณ  timeSlice()๊ฐ€ UTC๋กœ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

ํŽธ์ง‘: ์ด๊ฒƒ์„ ์‹œ๋„ํ•œ ํ›„ ๋ฉฐ์น  ํ›„์— timeSlice() ํŠธ๋ฆญ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ €์žฅํ•œ ์‹œ๊ฐ„์— ๊ณ ์ •๋˜์–ด ๋งค์ผ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํฐ ๋ˆ„๋ฝ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋กœ๋“œ๋งต์— ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‚ฌ์†Œํ•ด ๋ณด์ธ๋‹ค

Prometheus์˜ hour() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด @albertvaka ์—๊ฒŒ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ hour() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ž๋™์œผ๋กœ ๊ณ ๋ คํ•  ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(DST๊ฐ€ ์žˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋จ). ์›”๊ณผ ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜๋™์œผ๋กœ ์‹œ๊ฐ„๋Œ€๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜๋งŒ ์žˆ์ง€๋งŒ ์ด๋Š” ์ข‹์€ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

prometheus/prometheus#4160์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด

๋‹ค๋ฅธ ๋‚ ์งœ ์‹œ๊ฐ„ ๊ธฐ๊ฐ„์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ž„๊ณ„๊ฐ’ ์ˆ˜์ค€์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐค์— ์‚ฌ์šฉ์ž ํ™œ๋™ ์ด๋ฒคํŠธ๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ์ง€๋งŒ ๋‚ฎ์—๋Š” ๊ดœ์ฐฎ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์š”์ฒญ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ Grafana 6.1.3์—์„œ ์ด์™€ ๊ด€๋ จ๋œ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Grafana๋ฅผ ์—…๋ฌด์ƒ ์ค‘์š”ํ•œ ๊ฒฝ๊ณ ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํšŒ์‚ฌ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•Œ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

+1, ์ด๊ฒƒ์ด ๊ตฌํ˜„๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

+1 ์ฃผ๋ง์— ์ง‘์— ๊ฐ€๊ธฐ ์ „์— ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™์— ๋Œ€ํ•ด ์›”์š”์ผ์— ์ˆ˜์ฒœ ๊ฐœ์˜ ์ด๋ฉ”์ผ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.

+1 ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค - ์ด๊ฒƒ์ด ๊ณง ๊ตฌํ˜„๋˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์„ thingsboard๋กœ ์ด์‹ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค https://thingsboard.io/

@torkelo ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ง€์‹์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์„ "์–ป๊ธฐ ์œ„ํ•ด" ๋‚ด๊ฐ€ ํ•œ ์ผ์„ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋…์ ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์•„์ด๋””์–ด๋Š” ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์•„์ด๋””์–ด๋Š” ๋…์ ์ ์ธ ํ™ฉ์†Œ * *์˜ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ธ JSON ํŽ˜์ด๋กœ๋“œ์—์„œ ์ „์ฒด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด Grafana REST API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” cron-scheduled [SomeCloudProviderOfYourChoice]Lambda ํ•จ์ˆ˜ ๋ช‡ ๊ฐœ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์˜ ํ™œ์„ฑ/์œ ํœด ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ๊ฒฝ๊ณ  ๋ฐ ์ž„๊ณ„๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(์ €ํฌ ์‹œ์Šคํ…œ์€ ๋งค์ผ 8-10์‹œ๊ฐ„ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋ง ์ œ์™ธ). ๊ทธ๊ฒƒ์€ ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ.

Grafana Web GUI์—์„œ ๋Œ€์‹œ๋ณด๋“œ๋กœ ์ž‘์—…ํ•  ๋•Œ๋งˆ๋‹ค JSON ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋คํ”„ํ•˜๊ณ  "Grafana ์Šค์ผ€์ค„๋Ÿฌ" ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์€ MANDATORY ์ž…๋‹ˆ๋‹ค. ํŽ˜์ด๋กœ๋“œ(South Park S11E09) ๋คํ•‘์„ ์žŠ์–ด๋ฒ„๋ฆฌ๋ฉด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์†์‹ค๋ฉ๋‹ˆ๋‹ค(๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค). ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™œ์„ฑ/์œ ํœด JSON ๋คํ”„ ๋ชจ๋‘์— ์ „ํŒŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ๋ฐฐ์˜ ๋…ธ๋ ฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์ฐจ์ด๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋” ๋งŽ์ด). ํšจ๊ณผ์ ์œผ๋กœ ์ด "์†”๋ฃจ์…˜"์€ ์ž˜ ๋ฌธ์„œํ™”๋˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋ฉฐ ๊ฐ€์‹œ์ ์ด๊ณ  ์—„๊ฒฉํ•˜๊ฒŒ ์ค€์ˆ˜๋˜๋Š” _ํ”„๋กœ์„ธ์Šค_๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ์ด ๊ธฐ๋Šฅ์ด ์ „ํ˜€ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์งœ์ฆ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ  ์ž„๊ณ„๊ฐ’์„ ๋„ˆ๋ฌด ๋“œ๋ฌผ๊ฒŒ ๋ณ€๊ฒฝํ•˜์—ฌ _process_ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ๋ฒˆ๊ฑฐ๋กญ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ ...

์ €๋Š” ์ง€๊ธˆ SQLite(์ œ๊ณต์ž์— ์˜ํ•ด ์‹œํ–‰๋จ) ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” Aiven Grafana์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณด๋‹ค ๋™์‹œ์ ์ด๊ณ  ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋ฆฌ๊ฑฐ+์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ž‘์€ Grafana Web GUI๋ฅผ ํ†ตํ•œ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ๋กœ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณด๋‹ค ์›ํ™œํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ„์† ์ง€์ผœ๋ด ์ฃผ์„ธ์š”, ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

์™„๋ฃŒํ•˜๋ ค๋ฉด ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

T-SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ GRAFANA๋ฅผ ์†์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•).

SELECT timestamp AS time,
        CASE 
            WHEN DATEPART(HOUR, SYSDATETIME()) NOT IN (0,1,2,3,4,5,6) 
            THEN COUNT(document_number)
            ELSE 0 
        END AS Receipts
FROM GRAFANA.dbo.ReceiptsErrorsHistory
WHERE timestamp >= DATEADD(DAY, -7, GETDATE())
AND document_type = 'receipt'
GROUP BY timestamp

์ด ๊ตฌํ˜„์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ˜„์žฌ ๊ฒฝ๊ณ ์— seyren ๋ฐ cabot์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Grafana ๊ฒฝ๊ณ ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ œํ•œ์ด ์—†์œผ๋ฉด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Elastic search์˜ ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
๋‚ ์งœ ์ˆ˜ํ•™ ์‚ฌ์šฉ : https://www.elastic.co/guide/en/elasticsearch/client/net-api/7.x/date-math-expressions.htm.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ”์œ„(AM 00:00 ~ PM:12:00)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋ฉด @timestamp :[now/d TO now/d+12h]๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@sukjoonhong ์ž‘๋™์ด ์•ˆ๋˜๋„ค์š”. ์Šคํฌ๋ฆฐ์ƒท์ด ์žˆ์Šต๋‹ˆ๊นŒ?

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐค์ƒˆ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋„๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ).

grafana ์ƒ์ž์˜ crontab์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

1 * * * * root /root/do-alert-thing.sh

๊ทธ๋ฆฌ๊ณ  /root/do-alert-thing.sh์—์„œ:

#!/bin/bash

#Enable at 6am local
TZ='Somewhere/Sometime' date +%H | grep '06' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":false}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

#Disable at 9pm local
TZ='Somewhere/Sometime' date +%H | grep '21' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":true}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

Somewhere/Sometime ์„ ์‹œ๊ฐ„๋Œ€๋กœ ๋ฐ”๊พธ๊ณ (ํŒ: ๋ชฉ๋ก์— ๋Œ€ํ•ด timedatectl list-timezones ์‹คํ–‰) [email protected] ๋Œ€์‹  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ด€๋ฆฌ ๋์  ์€ ์„ค๋ช…์„œ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ธ์ฆ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@Atem18
2019-10-14-094215_3840x1080_scrot

์ œ ๊ฒฝ์šฐ์—๋Š” ์ด ์ฟผ๋ฆฌ๊ฐ€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@sukjoonhong ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ํ•œ๋ฒˆ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐค์ƒˆ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋„๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ).

grafana ์ƒ์ž์˜ crontab์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

1 * * * * root /root/do-alert-thing.sh

๊ทธ๋ฆฌ๊ณ  /root/do-alert-thing.sh์—์„œ:

#!/bin/bash

#Enable at 6am local
TZ='Somewhere/Sometime' date +%H | grep '06' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":false}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

#Disable at 9pm local
TZ='Somewhere/Sometime' date +%H | grep '21' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":true}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

Somewhere/Sometime ์„ ์‹œ๊ฐ„๋Œ€๋กœ ๋ฐ”๊พธ๊ณ (ํŒ: ๋ชฉ๋ก์— ๋Œ€ํ•ด timedatectl list-timezones ์‹คํ–‰) [email protected] ๋Œ€์‹  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ด€๋ฆฌ ๋์  ์€ ์„ค๋ช…์„œ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ธ์ฆ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์ž‘๋™ํ•˜์ง€๋งŒ grafana ui์—์„œ๋Š” ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์ผ์‹œ ์ค‘์ง€๋œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ....๊นŒ์ง€ ๋งค์‹œ๊ฐ„ ๋ฐ˜๋ณต๋˜๋Š” crontab์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š” ps ๋ช…๋ น๊ณผ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ prometheus on/off ๋ฉ”ํŠธ๋ฆญ์„ ์ƒ์„ฑํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ์ ‘๊ทผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Œ€์‹œ๋ณด๋“œ์— ๋ฐฑ์—… ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” "๋ฐฑ์—… ํ™œ์„ฑ"์ด ์žˆ๊ณ  ๋ชจ๋“  ์ฟผ๋ฆฌ ๋ฐ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋ณธ ํŒจ๋„์— ๋ฐฑ์—… ๋ฉ”ํŠธ๋ฆญ์ด 1์ธ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด ํ™•์ธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋˜ํ•œ ๊ธฐ๋ก ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋ฐฑ์—…์ด ์˜ˆ์ƒ๋ณด๋‹ค ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์‹คํ–‰๋˜๋Š” ๋ณ„๋„์˜ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐค์ƒˆ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋„๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ).
grafana ์ƒ์ž์˜ crontab์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
1 * * * * root /root/do-alert-thing.sh
๊ทธ๋ฆฌ๊ณ  /root/do-alert-thing.sh์—์„œ:

#!/bin/bash

#Enable at 6am local
TZ='Somewhere/Sometime' date +%H | grep '06' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":false}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

#Disable at 9pm local
TZ='Somewhere/Sometime' date +%H | grep '21' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":true}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

Somewhere/Sometime ์„ ์‹œ๊ฐ„๋Œ€๋กœ ๋ฐ”๊พธ๊ณ (ํŒ: ๋ชฉ๋ก์— ๋Œ€ํ•ด timedatectl list-timezones ์‹คํ–‰) [email protected] ๋Œ€์‹  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ด€๋ฆฌ ๋์  ์€ ์„ค๋ช…์„œ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ธ์ฆ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์ž‘๋™ํ•˜์ง€๋งŒ grafana ui์—์„œ๋Š” ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์ผ์‹œ ์ค‘์ง€๋œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ....๊นŒ์ง€ ๋งค์‹œ๊ฐ„ ๋ฐ˜๋ณต๋˜๋Š” crontab์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐค์ƒˆ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋„๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ).
grafana ์ƒ์ž์˜ crontab์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
1 * * * * root /root/do-alert-thing.sh
๊ทธ๋ฆฌ๊ณ  /root/do-alert-thing.sh์—์„œ:

#!/bin/bash

#Enable at 6am local
TZ='Somewhere/Sometime' date +%H | grep '06' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":false}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

#Disable at 9pm local
TZ='Somewhere/Sometime' date +%H | grep '21' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":true}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

Somewhere/Sometime ์„ ์‹œ๊ฐ„๋Œ€๋กœ ๋ฐ”๊พธ๊ณ (ํŒ: ๋ชฉ๋ก์— ๋Œ€ํ•ด timedatectl list-timezones ์‹คํ–‰) [email protected] ๋Œ€์‹  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ด€๋ฆฌ ๋์  ์€ ์„ค๋ช…์„œ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ธ์ฆ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์ž‘๋™ํ•˜์ง€๋งŒ grafana ui์—์„œ๋Š” ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์ผ์‹œ ์ค‘์ง€๋œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ....๊นŒ์ง€ ๋งค์‹œ๊ฐ„ ๋ฐ˜๋ณต๋˜๋Š” crontab์„ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ๊ทธ ํ–‰๋™์„ ๋ณด๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ grafana UI์—์„œ ๋งํ•ฉ๋‹ˆ๋‹ค. 1์‹œ๊ฐ„ ๋™์•ˆ ์ผ์‹œ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ผ์‹œ ์ •์ง€ ํŠธ๋ฆญ์ด 1์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๊ฑฐ์ง“์ด๋ผ๋ฉด ์ •์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ ํ–‰๋™์„ ๋ณด๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ grafana UI์—์„œ ๋งํ•ฉ๋‹ˆ๋‹ค. 1์‹œ๊ฐ„ ๋™์•ˆ ์ผ์‹œ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ผ์‹œ ์ •์ง€ ํŠธ๋ฆญ์ด 1์‹œ๊ฐ„ ๋™์•ˆ๋งŒ ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๊ฑฐ์ง“์ด๋ผ๋ฉด ์ •์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ง€ ๊ฒฝ๊ณ  ์ƒํƒœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒฝ๊ณ ๊ฐ€ ์ •์ƒ์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

image

ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ ์ผ์‹œ ์ค‘์ง€๋œ ๊ฒฝ์šฐ "1์‹œ๊ฐ„ ๋™์•ˆ ์ผ์‹œ ์ค‘์ง€๋จ"์ด๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๊นŒ?

๋ฐ”๋ณด์•ผ, ๋‚ด๊ฐ€ ์ž˜๋ชป ํ•ด์„ํ–ˆ์„ ๊ฒƒ ๊ฐ™์•„ ๐Ÿก

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

4๋…„ ํ›„ 6.6.x > ๋ฒ„์ „์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋‹ค์–‘ํ•œ ์‹œ๊ฐ„(์ €ํฌ์˜ ๊ฒฝ์šฐ ์—…๋ฌด ์‹œ๊ฐ„)์„ ์•Œ๋ฆผ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์„ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ผ๋ถ€ ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ(์ €๋Š” ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ํŠน์ • ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ MySQL์šฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค) ์ด๊ฒƒ์„ "์ ์ ˆํ•œ ๊ธฐ๋Šฅ"์œผ๋กœ ๊ฐ–๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ํ”Œ๋Ÿฌ์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. '๊ทผ๋ฌด ์‹œ๊ฐ„ ์ดํ›„' ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฒฝ๊ณ ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ฑฐ๋‚˜ ์–ต์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜คํ›„ 8์‹œ ์ดํ›„์™€ ๋‹ค์Œ ๋‚  ์˜ค์ „ 8์‹œ ์ด์ „์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ๊ณ ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์˜ ๋ชจ์Šต์€ ๋ฐค์— ๋Š‘๋Œ€๊ฐ€ ์šฐ๋Š” ์•„์ด์™€ ๊ฐ™๋‹ค. ๋‚˜๋Š” ๊ทธ๋ƒฅ ์„œ๋ž์— ํœด๋Œ€ํฐ์„ ๋„ฃ์—ˆ๋‹ค. ๊ฒฝ๊ณ ๋Š” ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Grafana์˜ Acknowledgement ๊ธฐ๋Šฅ์ด ์ ˆ์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Acknowledge Alert ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด Critical Production Service ํ™˜๊ฒฝ์—์„œ Grafana Alerting ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Grafana์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์‹œ๊ฐ„ ๋™์•ˆ์˜ ๊ฒฝ๊ณ ๋งŒ ์šฐ๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฌด ์‹œ๊ฐ„์€ +-2์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์•ผ๊ฐ„์—๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง๋˜๋Š” ๊ฐ’์ด (๊ณ„ํš๋œ) ์ƒ์Šนํ•˜์—ฌ ํ˜„์žฌ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค :-(

๊ธฐ๋Šฅ ์š”์ฒญ ์‹œ +1

ํŠน์ • ์‹œ๊ฐ„ ์ง€์—ญ์— ๋Œ€ํ•œ ์•Œ๋žŒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•Œ๋žŒ ๊ทœ์น™์€ ํŠน์ • ์‹œ๊ฐ„ ์˜์—ญ์—์„œ๋งŒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๊ฐ„๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋‹ค๋ฅธ ์•Œ๋ฆผ ์ฑ„๋„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜์ ์ธ ์›”์š”์ผ -> Slack์„ ํ†ตํ•ด ์•Œ๋ฆผ
  • 1์›” 1์ผ ์›”์š”์ผ -> SMS๋กœ ์•Œ๋ฆผ

๊ธฐ๊ฐ„์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜๊ณ  ์•Œ๋ฆผ ์ฑ„๋„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋Œ“๊ธ€์„ ํ›‘์–ด๋ณด์•˜์œผ๋ฏ€๋กœ ๋ˆ„๊ตฐ๊ฐ€ ๋‹ค์Œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ–ˆ๋‹ค๋ฉด ์‚ฌ๊ณผํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ์ œํ•œ์„ ์ง€์›ํ•˜๋Š” ์ด์œ ๋Š” ํฌ์†Œ ๋ฐ์ดํ„ฐ ๊ณ„์—ด ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งค์ผ ์˜ค์ „ 8์‹œ ๋ธŒ๋ฆฌํ•‘์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์ž์ •๊ณผ ์˜ค์ „ 2์‹œ ์‚ฌ์ด์— ๋ฐฐ์น˜ ์ž‘์—…์ด ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์„ค์ •์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. "์ž‘์—… ์™„๋ฃŒ"์˜ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋Š” ์™„๋ฃŒ ์‹œ ๋ฐฉ์ถœ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ์—†์ด ์ด์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

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

์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ทผ๋ฌด ์‹œ๊ฐ„ ๋™์•ˆ ๊ฒฝ๊ณ ๋ฅผ ์–ต์ œํ•˜๊ฑฐ๋‚˜ ํ•˜๋ฃจ ์ค‘ ํŠน์ • ์‹œ๊ฐ„ ์ฃผ๋ณ€์˜ ์†Œ์Œ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. 24/7 ์ƒ์‹œ ์‘๋Œ€์—๋„ ์‹œ๊ฐ„ ์ œํ•œ ์—†์ด๋Š” ์œ„์˜ ๊ฒฝ๊ณ ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— +1.
์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ํ•˜๋ฃจ/์‹œ๊ฐ„/์ฃผ 1ํšŒ ์ง€๋‚œ N์ผ ๊ฐ„์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‰ด์Šค๋ ˆํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ์ •ํ•ด์ง„ ์‹œ๊ฐ„(8:00, 13:00 ๋“ฑ)์— ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฒƒ์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ HTTP Api๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ณ ๋ฅผ ๊ด€๋ฆฌํ•  ๊ณ„ํš์ด์ง€๋งŒ grafana์˜ ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ์œ ์ง€ ๊ด€๋ฆฌ ์‹œ๊ฐ„์ด ์žˆ๋Š” PROD ๋„คํŠธ์›Œํฌ - ์ด์ œ ์ด ์œ ์ง€ ๊ด€๋ฆฌ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ผ๋ถ€ ์•Œ๋ฆผ์„ ์ค‘์ง€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ํŠน์ • ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ์‚ฌ์ด์˜ ๋งค์ฃผ ์ผ์š”์ผ ๋ฐค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ์ •๋ง ์ข‹์•„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 24์‹œ๊ฐ„ ๋ฒ”์œ„์˜ ํŠน์ • ๊ธฐ๊ฐ„์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ์ค‘์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

+100000

๐Ÿ‘ +1
Grafana๋ฅผ ์ง„์ •ํ•œ ์•Œ๋ฆผ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์„œ๋น„์Šค๋Š” ์ •์ƒ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ์ง€์ •๋œ ์ผ์ •์— ๋”ฐ๋ผ ๋ฉ”ํŠธ๋ฆญ์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ผ์ • ๋™์•ˆ ๊ฒฝ๋ณด๋ฅผ ์ œ์–ดํ•  ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

+1

์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์žˆ์œผ๋ฉด ์ข‹์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ Logstash์—์„œ hourOfDay, dayOfWeek์™€ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ํŒŒ์ƒ์‹œ์ผœ ๋ฉ”ํŠธ๋ฆญ ์„ธํŠธ์— ์ถ”๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฒฝ๊ณ  ๊ทœ์น™์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ES์— ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CPU ์‚ฌ์šฉ๋Ÿ‰์ธ ํ‰๊ท  ๋ฉ”ํŠธ๋ฆญ A๊ฐ€ 1m ๋™์•ˆ 90%๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์•Œ๋ฆผ
๊ทธ๋ฆฌ๊ณ 
๋™์ผํ•œ ๋ฌธ์„œ์˜ ์ตœ๋Œ€ hourOfDay์ธ metric B๊ฐ€ RANGE ์‚ฌ์ด์ธ ๊ฒฝ์šฐ.

์ž‘๋™ํ•˜์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ ‡๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์–ด์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ Grafana ์ดํ›„๋กœ ๋‹ค๋ฅธ ์˜์—ญ์—์„œ 2016๋…„ ์ดํ›„ ์—„์ฒญ๋‚˜๊ฒŒ ๋ฐœ์ „ํ–ˆ์ง€๋งŒ 2016๋…„ ์ดํ›„๋กœ๋Š” ์žŠํ˜€์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ์ผœ๊ณ  ๋„๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐค์ƒˆ ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ๋„๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๊ฐœ๋ณ„ ๊ฒฝ๊ณ ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ).

grafana ์ƒ์ž์˜ crontab์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

1 * * * * root /root/do-alert-thing.sh

๊ทธ๋ฆฌ๊ณ  /root/do-alert-thing.sh์—์„œ:

#!/bin/bash

#Enable at 6am local
TZ='Somewhere/Sometime' date +%H | grep '06' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":false}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

#Disable at 9pm local
TZ='Somewhere/Sometime' date +%H | grep '21' && (
  curl http://localhost:3000/api/admin/pause-all-alerts -d '{"paused":true}' -u [email protected]:letmein -H 'Content-Type: application/json'
)

Somewhere/Sometime ์„ ์‹œ๊ฐ„๋Œ€๋กœ ๋ฐ”๊พธ๊ณ (ํŒ: ๋ชฉ๋ก์— ๋Œ€ํ•ด timedatectl list-timezones ์‹คํ–‰) [email protected] ๋Œ€์‹  ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ด€๋ฆฌ ๋์  ์€ ์„ค๋ช…์„œ์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ์ธ์ฆ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•ˆ๋…•
๊ฐœ๋ณ„ ์•Œ๋ฆผ URL์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•
๊ฐœ๋ณ„ ์•Œ๋ฆผ URL์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

๋งค์šฐ ์ •๊ตํ•œ ์Šค์ผ€์ค„๋ง์ด ๋ฐ”๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์—์„œ๋Š” ํ•˜๋ฃจ ์ค‘ ์‹œ๊ฐ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ๋‹จ๊ณ„์—์„œ ๋” ๋ณต์žกํ•œ ์ผ์ •์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ

ํŠน์ • ์‹œ๊ฐ„์— ๊ฒฝ๊ณ ๋ฅผ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค.

grafana๋Š” ๋ชจ๋“ˆ๋กœ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ID ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจ๋„์—์„œ ์ถ”๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ 86400(ํ•˜๋ฃจ์˜ ์ดˆ ์ˆ˜)์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฝ๊ณ ์˜ ์‹œ๊ฐ„ ์ธก์ •ํ•ญ๋ชฉ์— ๋ฒ”์œ„ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

์ด ๋ชฉ์ ์„ ์œ„ํ•ด ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๊นŒ?

๋ฏธ์นœ ์†Œ๋ฆฌ ๊ฐ™์ง€๋งŒ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‚

time() % 86400

๊ทธ๋ž˜๋„ ๋ช…๋ฐฑํ•œ ํ•ดํ‚น์ด ์•„๋‹Œ ๋” ํŽธ๋ฆฌํ•œ ์†”๋ฃจ์…˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค. ๐Ÿคฆ

๋ฏธ์นœ ์†Œ๋ฆฌ ๊ฐ™์ง€๋งŒ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‚

time() % 86400

๊ทธ๋ž˜๋„ ๋ช…๋ฐฑํ•œ ํ•ดํ‚น์ด ์•„๋‹Œ ๋” ํŽธ๋ฆฌํ•œ ์†”๋ฃจ์…˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค. ๐Ÿคฆ

@ochrstn v6.6.1 ์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์ด ์ฟผ๋ฆฌ์—์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌด์‹œ๋˜์—ˆ์„ ๋•Œ ์–ด๋–ค ๋ฒ„์ „์˜ grafana๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฏธ์นœ ์†Œ๋ฆฌ ๊ฐ™์ง€๋งŒ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‚

time() % 86400

๊ทธ๋ž˜๋„ ๋ช…๋ฐฑํ•œ ํ•ดํ‚น์ด ์•„๋‹Œ ๋” ํŽธ๋ฆฌํ•œ ์†”๋ฃจ์…˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค. ๐Ÿคฆ

@ochrstn v6.6.1 ์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์ด ์ฟผ๋ฆฌ์—์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฌด์‹œ๋˜์—ˆ์„ ๋•Œ ์–ด๋–ค ๋ฒ„์ „์˜ grafana๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

v6.6.2 ๐Ÿ™ˆ

grafana๋Š” ๋ชจ๋“ˆ๋กœ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๋‹ค์Œ ID ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจ๋„์—์„œ ์ถ”๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ๋‹‰์Šค ์‹œ๊ฐ„์„ 86400(ํ•˜๋ฃจ์˜ ์ดˆ ์ˆ˜)์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฝ๊ณ ์˜ ์‹œ๊ฐ„ ์ธก์ •ํ•ญ๋ชฉ์— ๋ฒ”์œ„ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?
์ด ๋ชฉ์ ์„ ์œ„ํ•ด ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๊นŒ?

๋ฏธ์นœ ์†Œ๋ฆฌ ๊ฐ™์ง€๋งŒ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

time() % 86400

๊ทธ๋ž˜๋„ ๋ช…๋ฐฑํ•œ ํ•ดํ‚น์ด ์•„๋‹Œ ๋” ํŽธ๋ฆฌํ•œ ์†”๋ฃจ์…˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @ochrstn :) ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰