LabHub
배우기 러닝패스 코스

Grafana — 대시보드는 질문이다 · 문턱과 색 · 실습

여섯 달 동안 한 번도 빨개진 적 없는 대시보드

LabHub 에서 이어서 보기

목표

기본 문턱이 우리 지표에서 무슨 뜻인지 계산해 본 뒤, 문턱을 SLO 에서 끌어오고, 절대값 문턱과 백분율 문턱을 갈라 쓰고, 색 말고 글자로도 말하게 만들고, 패널의 문턱과 이미 있는 알림의 임계값을 한 값에서 끌어오게 고칩니다.

왜 중요한가

대시보드의 색은 판단을 대신한다. 그래서 색의 근거가 없으면 판단의 근거도 없다. Grafana 의 기본 문턱은 80 에서 빨강인데, 0 과 1 사이로 나오는 비율 패널에 그 값이 남아 있으면 그 패널은 무슨 일이 있어도 초록이다. 설명할 수 있는 문턱은 사용자에게 한 약속에서 계산된 것뿐이다 - 30일 가용성 목표가 오류 예산을 정하고, 오류 예산이 문턱을 정한다. 여기에 두 가지가 더 붙는다. 색만으로 말하는 화면은 색각 이상이 있는 사람과 흑백 캡처 앞에서 아무 말도 하지 못하므로 값과 글자가 함께 있어야 하고, 패널의 문턱과 알림의 임계값이 다른 파일에 손으로 적혀 있으면 언젠가 반드시 어긋나 '화면은 빨간데 아무도 호출되지 않는' 시간이 생긴다.

단계

1. lab-start-grafana 로 Grafana 를 띄우고, /root/gfd-thresholds/dash.json 에 uid 가 gfd-thresh 인 대시보드를 만들어 올리세요. 패널은 하나이고 id1, 타입은 stat, 제목은 5xx 비율 (기본 문턱 그대로 - 비교용), 쿼리는 sum(rate(http_requests_total{job="shop-api",status=~"5.."}[1h])) / sum(rate(http_requests_total{job="shop-api"}[1h])), 단위 식별자는 0..1 비율 쪽입니다. 문턱은 Grafana 의 기본값 그대로 둡니다 - 기준선 초록, 80 에서 빨강, 방식은 절대값입니다. 그리고 /root/gfd-thresholds/01-default.txt 에 다섯 줄을 적으세요 - now=<지금 이 쿼리가 내는 값>, red_at=<빨강 문턱 값>, max_possible=<이 쿼리가 낼 수 있는 가장 큰 값>, reachable=<빨강에 닿을 수 있으면 yes, 없으면 no>, reason=<왜 그런지 40자 이상>.
2. /opt/lab/gfd/gfd-thresholds/slo.yml 에 30일 가용성 목표가 적혀 있습니다. 오류 예산은 1 에서 그 목표를 뺀 값입니다. 같은 대시보드에 id2stat 패널을 더하세요. 제목은 5xx 비율 (SLO 문턱), 쿼리는 1번 패널과 같고, 단위도 같습니다. 문턱은 절대값 방식으로 세 단계입니다 - 기준선은 green, 오류 예산 값에서 #EAB839, 그 두 배에서 red. 그리고 /root/gfd-thresholds/02-slo.txt 에 다섯 줄을 적으세요 - budget=<오류 예산>, warn=<노랑 문턱>, crit=<빨강 문턱>, now=<지금 값>, color_now=<지금 값의 색>. 색은 패널에 적은 색 문자열 그대로 적습니다.
3. 같은 대시보드에 id3gauge 패널을 더하세요. 제목은 남은 디스크, 쿼리는 node_filesystem_avail_bytes{job="node",mountpoint="/data"}, 단위는 1024 로 줄이는 바이트입니다. 축의 최솟값은 0, 최댓값은 /opt/lab/gfd/gfd-thresholds/slo.ymldata_volume_bytes 값입니다. 문턱은 백분율 방식(thresholds.modepercentage)이고 세 단계입니다 - 기준선 red, 20 에서 #EAB839, 40 에서 green. 그리고 /root/gfd-thresholds/03-percentage.txt 에 네 줄을 적으세요 - avail=<지금 남은 바이트>, max=<최댓값>, pct=<남은 비율을 퍼센트로, 소수 두 자리>, color=<지금 색>.
4. 2번 패널에 값 매핑 세 개를 더하세요. 모두 range 규칙이고, 차례로 0 부터 노랑 문턱까지는 정상, 노랑 문턱부터 빨강 문턱까지는 예산 소진 중, 빨강 문턱부터 1 까지는 사고 입니다. 그리고 이 패널의 options.textModevalue_and_name 으로 두어 숫자와 이름이 함께 보이게 하세요. /root/gfd-thresholds/04-text.txt 에 두 줄을 적으세요 - now=<지금 값>, label=<지금 값에 걸리는 글자>.
5. /root/gfd-thresholds/color.py 를 만드세요. python3 color.py <값> [패널 id] 로 부르면 Grafana 에서 그 패널의 문턱을 읽어, 그 값이 어떤 색이 되는지 색 문자열 한 줄로 출력합니다(패널 id 기본값은 2). 규칙은 Grafana 와 같습니다 - 단계를 값 순으로 정렬한 뒤 값이 그 단계 이상인 마지막 단계의 색을 고르고, 값이 비어 있는 맨 앞 단계는 마이너스 무한대로 봅니다. 그리고 그 도구로 /root/gfd-thresholds/05-boundary.tsv 를 만드세요. 머리글 없이 여섯 줄, 각 줄은 탭으로 나눈 두 칸 <값> <색> 이고 값은 차례로 0·0.0049·0.005·0.0051·0.01·0.02 입니다.
6. /opt/lab/gfd/gfd-thresholds/alerts.yml 은 이미 운영에 올라가 있는 알림 규칙입니다. 이 규칙의 임계값과 2번 패널의 빨강 문턱이 지금 서로 다릅니다. 두 숫자를 한 곳에서 끌어오게 고치세요. /root/gfd-thresholds/thresholds.envWARN=<노랑 문턱>CRIT=<빨강 문턱> 두 줄을 적고(값은 2단계에서 SLO 로 계산한 것), 그 파일의 CRIT 값으로 규칙의 임계값을 바꿔 /root/gfd-thresholds/alerts.yml 에 저장합니다. 규칙의 나머지는 그대로 둡니다. 그리고 /root/gfd-thresholds/06-match.tsv 에 머리글 없이 세 줄, 각 줄은 탭으로 나눈 두 칸으로 before·after·panel 을 차례로 적으세요 - 원본 규칙의 임계값, 고친 규칙의 임계값, 패널의 빨강 문턱입니다.
7. 같은 대시보드에 id4timeseries 패널을 더하세요. 제목은 p99 응답 시간, 쿼리는 histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket{job="shop-api"}[6h]))), 단위는 초입니다. 문턱은 절대값 방식 두 단계로, 기준선은 green 이고 /opt/lab/gfd/gfd-thresholds/slo.ymllatency_p99_target_seconds 값에서 red 입니다. 그리고 /root/gfd-thresholds/07-latency.txt 에 네 줄을 적으세요 - p99_now=<지금 값>, threshold_s=<초로 적은 문턱>, threshold_ms=<같은 문턱을 밀리초로 환산한 값>, color=<지금 색>.
8. /opt/lab/gfd/gfd-thresholds/broken.json 은 운영에서 걷어 온 대시보드입니다(uid gfd-thresh-fix). 패널 넷 모두 문턱에 결함이 있습니다. 1번은 기본 문턱이 그대로 남아 닿을 수 없고(빨강을 SLO 의 crit 값으로 내립니다), 2번은 백분율 방식인데 최솟값·최댓값이 없으며(0 과 data_volume_bytes 를 넣습니다), 3번은 클수록 좋은 지표인데 단계 순서가 뒤집혀 있고(기준선이 빨강, 위가 초록이어야 합니다), 4번은 초 단위 패널에 밀리초 숫자가 문턱으로 들어가 있습니다(latency_p99_target_seconds 로 고칩니다). 고친 대시보드를 uid gfd-thresh-fix 로 올리고, /root/gfd-thresholds/08-report.tsv 에 머리글 없이 네 줄, 각 줄은 탭으로 나눈 세 칸 <패널 id> <결함 코드> <무엇이 틀렸었나, 20자 이상이고 숫자를 하나 이상 포함> 을 적으세요. 결함 코드는 unreachable·no-minmax·direction·scale 중 하나이고 줄은 패널 id 순서입니다.

참고

단계 8개

  1. 기본 문턱 80 이 우리 지표에서 무슨 뜻인지 물어본다
  2. 문턱을 목표에서 끌어온다
  3. 절대값 문턱과 백분율 문턱은 다른 질문에 답한다
  4. 색만으로 말하지 않는다
  5. 문턱의 순서와 경계를 실제 값으로 확인한다
  6. 화면은 빨간데 아무도 호출되지 않는 자리를 없앤다
  7. 응용 ① - 지연 문턱은 패널의 단위를 따라간다
  8. 응용 ② - 운영 대시보드의 문턱 결함을 전부 고쳐 제출한다