์ธํ”„๋ผ

[Grafana] Slack ์•Œ๋ฆผ ์ƒ์„ฑํ•˜๊ธฐ + ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ…€

THE NICOLE 2025. 3. 19. 15:16

0. ์Šฌ๋ž™ ์›นํ›„ํฌ URL ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ

์Šฌ๋ž™ ์ฑ„๋„์„ ์ƒ์„ฑํ•˜๊ณ , ์›นํ›„ํฌ URL ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

1. Contack Points์˜ Notification Templates ์ƒ์„ฑํ•˜๊ธฐ (๋ฉ”์‹œ์ง€ ์ปค์Šคํ…€)

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

 

ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๊ณ , ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. golang ๋ฌธ๋ฒ•์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ ์ดˆ๋ฐ˜์—” ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค.. 

 

์ œ๋ชฉ ํ…œํ”Œ๋ฆฟ

{{ define "custom.alert_title" -}}
  {{ if gt (len .Alerts.Firing) 0 }}
  ๐Ÿšจ ๊ธด๊ธ‰ ์•Œ๋žŒ ๋ฐœ์ƒ! ๐Ÿšจ
  {{ else if gt (len .Alerts.Resolved) 0 }}
  โœ… ํ•ด๊ฒฐ
  {{ end }}
{{ end }}

 

 

๋‚ด์šฉ ํ…œํ”Œ๋ฆฟ

{{ define "custom.firing_and_resolved_alerts" -}}
  {{ if gt (len .Alerts.Resolved) 0 }}

  โœ… {{ len .Alerts.Resolved }}๊ฐœ์˜ ์•Œ๋žŒ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  {{ range .Alerts.Resolved -}}
    {{ template "alert.summary_and_description" . -}}
  {{ end }}
  {{ end }}

  {{ if gt (len .Alerts.Firing) 0 }}
  ๐Ÿ”ฅ {{ len .Alerts.Firing }}๊ฐœ์˜ ์•Œ๋žŒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!
  {{ range .Alerts.Firing -}}
    {{ template "alert.summary_and_description" . -}}
  {{ end }}
  {{ end }}
{{ end }}

{{ define "alert.summary_and_description" }}
  ๐Ÿ“Œ ์ƒํƒœ: {{ .Status }}
  ๐Ÿšจ ์•Œ๋žŒ ์ด๋ฆ„: {{ .Labels.alertname }}
  โšก ์•Œ๋žŒ ์š”์•ฝ : {{.Annotations.summary}}
  ๐Ÿ–ฅ๏ธ ์ธ์Šคํ„ด์Šค: {{ .Labels.instance }}
  ๐Ÿ“ƒ ์ƒ์„ธ ์ •๋ณด:
   {{ .ValueString }}
  ๐Ÿ”— ํ™•์ธํ•˜๊ธฐ: {{ .GeneratorURL }}

{{ end }}

 

 

2. Contact Points ์ƒ์„ฑ

์•Œ๋žŒ์„ ์–ด๋””๋กœ ๋ณด๋‚ผ์ง€ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„. ์—ฌ๊ธฐ์„œ ์•Œ๋žŒ์˜ ํ…œํ”Œ๋ฆฟ๋„ ์ง€์ •ํ•˜๋ฉฐ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ๋‹ค.

Name, Webhook URL ์ž…๋ ฅ

 

๋งŒ๋“ค์–ด๋‘” Notification Templates ์ ์šฉ 

 

 

 

3. Alert rules ์ƒ์„ฑ

์ œ์ผ ์ค‘์š”ํ•œ ์•Œ๋žŒ ๊ทœ์น™ ์ƒ์„ฑ. ๋ฆฌ์†Œ์Šค ๋ณ„๋กœ ๋”ฐ๋กœ ๋”ฐ๋กœ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.

์›ํ•˜๋Š” ๋งคํŠธ๋ฆญ์„ ๋ฝ‘์•„์„œ ์–ด๋–ค ๊ทœ์น™์— ๊ฑธ๋ฆฌ๋ฉด ์•Œ๋žŒ์„ ๋ณด๋‚ผ ์ง€ ์กฐ๊ฑด์„ ์ƒ์„ฑ.

 

 

 

์ด 3๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋žŒ ์„ค์ •์„ ํ•  ์˜ˆ์ •์ด๋‹ค. 

 

1) ๋””์Šคํฌ ์•Œ๋žŒ

(
  node_filesystem_size_bytes{mountpoint="/etc/hosts"}
  - node_filesystem_avail_bytes{mountpoint="/etc/hosts"}
) 
/ 
node_filesystem_size_bytes{mountpoint="/etc/hosts"} 
* 100

2) ๋ฉ”๋ชจ๋ฆฌ ์•Œ๋žŒ

((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes) * 100

 

 

3) CPU ์•Œ๋žŒ

sum by (instance) (rate(node_cpu_seconds_total{mode="user"}[30s])) * 100

 

์•„๋ž˜ Select metric ์— ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.  ์ผ๋‹จ ํฌ์ŠคํŒ…์€ ๋””์Šคํฌ ์•Œ๋žŒ์œผ๋กœ๋งŒ ์ง„ํ–‰ํ•œ๋‹ค. 

 

 

์šฐ์ธก ์ƒ๋‹จ์˜ Run queries ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜ Table์— ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋“ค๊ณผ ๋””์Šคํฌ ์‚ฌ์šฉ์œจ์ด ๋œจ๊ฒŒ ๋œ๋‹ค. 

 

 

์•Œ๋žŒ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์ž„๊ณ„๊ฐ’(Threshold) ๋„ ํ•„์ˆ˜๋กœ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ˜„์žฌ ์„œ๋ฒ„๊ฐ€ 5๋Œ€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋””์Šคํฌ ์‚ฌ์šฉ์œจ์ด ๋ชจ๋‘ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด 20%๊ฐ€ ๋„˜์œผ๋ฉด ์•Œ๋žŒ์„ ๋ฐ›๋„๋ก ํ–ˆ๋‹ค. 

 

 

Folder์™€ Evaluationi group์€ ์ ๋‹นํžˆ ๋งŒ๋“ค์–ด์„œ ์ง€์ •ํ•ด์ฃผ๊ณ ,

Pending Period๋Š” "์ž„๊ณ„๊ฐ’์„ ์ถฉ์กฑํ–ˆ์„ ๋•Œ ์ฆ‰์‹œ ์•Œ๋žŒ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์œ ์ง€๋  ๊ฒฝ์šฐ์—๋งŒ ์•Œ๋žŒ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅโ€์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 5๋ถ„์ด๋ผ๊ณ  ํ•˜๋ฉด 5๋ถ„ ๋™์•ˆ ์ด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ์•Œ๋žŒ์„ ๋ณด๋‚ด๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค. ๋‚˜๋Š” 1๋ถ„์œผ๋กœ ์ง€์ •ํ–ˆ๋‹ค.

 

2๋ฒˆ์—์„œ ๋งŒ๋“ค์–ด๋‘” ์ปจํƒ ํฌ์ธํŠธ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. 

 

์Šฌ๋ž™์—์„œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ๋•Œ ๋ณด๊ธฐ ์ข‹๋„๋ก ์•Œ๋ฆผ์˜ ์„ฑ๊ฒฉ์„ Summary ๋ฐ Description ์— ์ ์–ด์ค€๋‹ค. ๋‚˜๋Š” Summary๋งŒ ์ ์—ˆ๋‹ค. 

 

์ด ์ •๋„๋งŒ ํ•˜๊ณ  ์ €์žฅ.

 

 

 

 

4. Notification policies ์ƒ์„ฑ

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

 

ํŽธ์ง‘์„ ๋ˆ„๋ฅธ๋‹ค. (์›๋ž˜๋ถ€ํ„ฐ ํŽธ์ง‘์ด์—ˆ๋Š”์ง€, ์ƒ์„ฑ์„ ํ•ด์คฌ์—ˆ๋Š”์ง€๋Š” ๊ธฐ์–ต์ด ์ž˜ ์•ˆ๋‚˜์ง€๋งŒ ๊ธฐ์กด ์ •์ฑ…์ด ์—†๋‹ค๋ฉด ์ƒ์„ฑ์„ ํ•ด์ฃผ๊ธธ ๋ฐ”๋ž€๋‹ค.)

 

 

Timing options๋ฅผ ํด๋ฆญํ•˜๋ฉด Group interval, Repeat interval ์ด ์žˆ๋‹ค. ์•„๋ž˜ ํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด ๋†“์•˜๋‹ค. 

๋‚˜๋Š” ์ผ๋‹จ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ฐ„๊ฒฉ์„ ์งง๊ฒŒ ์žก์•„๋‘์—ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Repeat interval ๊ธฐ๋ณธ๊ฐ’์€ 4์‹œ๊ฐ„์ด๋‹ค. 

์˜ต์…˜ ์„ค๋ช…
Group wait ์ƒˆ ์•Œ๋žŒ ๊ทธ๋ฃน์ด ์ฒ˜์Œ ๊ฐ์ง€๋œ ํ›„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„
Group interval ๊ฐ™์€ ๊ทธ๋ฃน์˜ ์•Œ๋žŒ์ด ์—…๋ฐ์ดํŠธ๋  ๊ฒฝ์šฐ ์•Œ๋žŒ์„ ๋ณด๋‚ด๋Š” ๊ฐ„๊ฒฉ
Repeat interval ๊ฐ™์€ ์•Œ๋žŒ์ด ์ง€์†๋  ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•ด์„œ ์•Œ๋žŒ์„ ๋ณด๋‚ด๋Š” ๊ฐ„๊ฒฉ

 

 

๊ฐ๊ฒฉ์˜ ์Šฌ๋ž™ ์•Œ๋žŒ !!! ์˜ˆ์˜๊ฒŒ ์ž˜ ์˜จ๋‹ค. ํ”„๋กœ์ ํŠธ ํŒ€์›๋“ค์—๊ฒŒ๋„ ๊ณต์œ ํ•˜์—ฌ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์ˆ˜์‹œ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. 

 

 

์„œ๋ฒ„๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ, ๋ชจ๋‹ˆํ„ฐ๋ง์ด ์ฐธ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ ˆ์‹คํžˆ ๊นจ๋‹ซ๋Š”๋‹ค. ๋งค์ผ๋งค์ผ ๊ทธ๋ผํŒŒ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜๊ณ  SMTP ์ด๋ฉ”์ผ ์„ค์ •๋„ํ•ด์„œ ๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์„ ๋ณด๊ณ  ๋ฐ›์ง€๋งŒ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ผํŒŒ๋‚˜ ์Šฌ๋ž™ ์—ฐ๋™๋„ ํ•ด๋ณด์•˜๋‹ค. 

 

์•ž์œผ๋กœ๋Š” ๋””์Šคํฌ FULL, ๋ฉ”๋ชจ๋ฆฌ FULL ๊ฐ™์€ ์—๋Ÿฌ ์ƒํ™ฉ์„ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•˜๊ณ  ์ฒ ์ €ํžˆ ์„œ๋ฒ„ ๊ด€๋ฆฌ๋ฅผ ํ•  ์˜ˆ์ •์ด๋‹ค.