Grafana 알람 설정 정리
Grafana 용어 정리
개요
Grafana 알람 및 설정을 이해하는데 필요한 용어들을 정리하였습니다.
1. Alert Rule (알림 규칙)
- Grafana에서 알림을 생성하기 위한 가장 기본적인 단위입니다.
- 어떤 데이터를 모니터링하고(쿼리), 어떤 조건일 때(조건식), 문제가 얼마나 지속되면(For 기간), 누구에게 어떻게 알릴지(연락 지점, 레이블 등)를 정의하는 전체 설정입니다.
2. Query (쿼리)
- 알림 조건을 평가할 데이터를 가져오는 요청문입니다.
- 데이터 소스(예: Prometheus, InfluxDB, Loki 등)에 정의된 형식으로 작성하여 시계열 데이터나 로그 데이터 등을 조회합니다.
3. Expression (표현식)
- 쿼리 결과를 추가적으로 가공하거나 여러 쿼리 결과를 조합하는 데 사용됩니다. 수학 연산, 리듀서 함수 (평균, 합계 등), 조건 로직 등을 적용할 수 있습니다. 알림 조건 자체를 이 표현식으로 정의하는 경우가 많습니다.
4. Condition (조건)
- 쿼리나 표현식의 결과값을 바탕으로 알림 발생 여부를 판단하는 논리입니다.
- 예: 'Expression B의 마지막 값이 100보다 크다' 와 같이 설정합니다. 이 조건이 참(True)이 되면 알림 프로세스가 시작됩니다.
5. Evaluation Group & Interval (평가 그룹 및 간격)
- Evaluation Interval (평가 간격): 알림 규칙의 조건을 얼마나 자주 평가할지 결정하는 시간 간격입니다. 예를 들어 '1m'으로 설정하면 1분마다 조건을 확인합니다.
- Evaluation Group (평가 그룹): 여러 알림 규칙을 논리적인 그룹으로 묶어 동일한 평가 간격으로 실행합니다. 효율적인 리소스 관리를 위해 사용됩니다.
6. For (보류 기간 / Pending 기간)
- 알림 조건이 참(True)이 된 후, 실제로 '발생(Firing)' 상태로 전환되기 전에 대기해야 하는 최소 지속 시간입니다.
- 일시적인 데이터 스파이크나 노이즈로 인해 불필요한 알림이 발생하는 것을 방지합니다. 예를 들어 '5m'으로 설정하면, 조건이 5분 이상 계속 참일 경우에만 알림이 발생합니다.
7. Labels (레이블)
- 알림 규칙이나 발생한 알림에 첨부되는 키-값(Key-Value) 쌍입니다.
- 알림을 식별하고 분류하는 데 사용되며, 특히 알림 정책(Notification Policy)에서 라우팅, 그룹화, 음소거(Muting) 규칙을 적용하는 기준이 됩니다.
- 예:
severity=critical
,env=production
,team=backend
등.
8. Annotations (어노테이션)
- 알림에 부가적인 정보(메타데이터)를 추가하는 데 사용되는 키-값 쌍입니다.
- 주로 알림 메시지에 포함되어 수신자가 상황을 더 잘 이해하도록 돕습니다.
- 예:
summary=CPU 사용량 높음
,description=서버 ${instance}의 CPU 사용량이 90%를 초과했습니다.
,runbook_url=http://...
등. 변수(${})를 사용하여 동적인 값을 포함할 수 있습니다.
9. Contact Point (연락 지점)
- 알림 메시지를 보낼 대상 및 방법을 정의합니다.
- 이메일, Slack, PagerDuty, Webhook 등 다양한 타입을 설정할 수 있습니다.
10. Notification Policy (알림 정책)
- 발생한 알림을 어떤 '연락 지점(Contact Point)'으로 보낼지 결정하는 규칙 트리(Tree) 구조입니다.
- 알림의 레이블(Labels)을 기반으로 특정 정책과 매칭시켜 라우팅합니다.
- 기본 정책(Default Policy)이 있으며, 특정 레이블 조건에 맞는 세부 정책을 추가할 수 있습니다.
- 그룹화(Grouping), 음소거 타이밍(Mute Timings) 설정도 이 정책 내에서 관리됩니다.
11. Grouping (그룹화)
- 알림 정책 내에서 설정하며, 특정 레이블(예:
cluster
,alertname
)이 동일한 여러 알림을 하나의 알림 메시지로 묶어서 보내는 기능입니다. - 알림 폭증(Alert Storm) 상황에서 알림 피로도를 줄이는 데 도움이 됩니다.
12. Mute Timings / Silences (음소거 타이밍 / 사일런스)
- Mute Timings (음소거 타이밍): 특정 시간대(예: 주말, 공휴일, 정기 점검 시간)에 알림 발송을 자동으로 중단하도록 미리 설정하는 기능입니다. 알림 정책과 연결됩니다.
- Silences (사일런스): 특정 레이블과 일치하는 알림에 대해 사용자가 수동으로 정해진 시간 동안 알림 발송을 임시 중단시키는 기능입니다. 예상된 작업이나 이슈 대응 중에 사용됩니다.
13. Alert State (알림 상태)
- 알림 규칙의 현재 상태를 나타냅니다.
Normal
/OK
: 조건이 거짓(False)인 정상 상태.Pending
: 조건이 참(True)이지만 'For' 기간을 아직 만족하지 못한 보류 상태.Firing
: 조건이 참(True)이고 'For' 기간을 만족하여 알림이 발생 중인 상태. 알림이 Contact Point로 발송됩니다.Error
: 쿼리나 조건 평가 중 오류가 발생한 상태.NoData
: 쿼리 결과 데이터가 없는 상태.
알람 예시
[
{
"headers": {
"x-forwarded-for": "<hidden>",
"x-forwarded-proto": "https",
"x-forwarded-port": "443",
"host": "<hidden>",
"x-amzn-trace-id": "<hidden>",
"content-length": "<hidden>",
"user-agent": "Grafana",
"content-type": "application/json",
"accept-encoding": "gzip"
},
"params": {},
"query": {},
"body": {
"receiver": "<hidden>",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"InstanceId": "<hidden>",
"account": "<hidden>",
"alertname": "<hidden>"
},
"annotations": {
"summary": "<hidden>"
},
"startsAt": "<hidden>",
"endsAt": "<hidden>",
"generatorURL": "<hidden>",
"fingerprint": "<hidden>",
"silenceURL": "<hidden>",
"dashboardURL": "",
"panelURL": "",
"values": {
"C": 1,
"Condition": 100
},
"valueString": "<hidden>"
}
],
"groupLabels": {
"alertname": "<hidden>"
},
"commonLabels": {
"InstanceId": "<hidden>",
"account": "<hidden>",
"alertname": "<hidden>"
},
"commonAnnotations": {
"summary": "<hidden>"
},
"externalURL": "<hidden>",
"version": "1",
"groupKey": "<hidden>",
"truncatedAlerts": 0,
"orgId": "<hidden>",
"title": "<hidden>",
"state": "alerting",
"message": "<hidden>"
},
"webhookUrl": "<hidden>",
"executionMode": "production"
}
]
[
{
"headers": {
"x-forwarded-for": "<hidden>",
"x-forwarded-proto": "<hidden>",
"x-forwarded-port": "<hidden>",
"host": "<hidden>",
"x-amzn-trace-id": "<hidden>",
"content-length": "<hidden>",
"user-agent": "<hidden>",
"content-type": "<hidden>",
"accept-encoding": "<hidden>"
},
"params": {},
"query": {},
"body": {
"receiver": "<hidden>",
"status": "<hidden>",
"alerts": [
{
"status": "<hidden>",
"labels": {
"InstanceId": "<hidden>",
"account": "<hidden>",
"alertname": "<hidden>"
},
"annotations": {
"summary": "<hidden>"
},
"startsAt": "<hidden>",
"endsAt": "<hidden>",
"generatorURL": "<hidden>",
"fingerprint": "<hidden>",
"silenceURL": "<hidden>",
"dashboardURL": "<hidden>",
"panelURL": "<hidden>",
"values": {
"C": "<hidden>",
"Condition": "<hidden>"
},
"valueString": "<hidden>"
}
],
"groupLabels": {
"alertname": "<hidden>"
},
"commonLabels": {
"InstanceId": "<hidden>",
"account": "<hidden>",
"alertname": "<hidden>"
},
"commonAnnotations": {
"summary": "<hidden>"
},
"externalURL": "<hidden>",
"version": "<hidden>",
"groupKey": "<hidden>",
"truncatedAlerts": "<hidden>",
"orgId": "<hidden>",
"title": "<hidden>",
"state": "<hidden>",
"message": "<hidden>"
},
"webhookUrl": "<hidden>",
"executionMode": "<hidden>"
}
]