Grafana 알람 설정 정리

Grafana 용어 정리

Grafana 알람 설정 정리
Photo by Luke Chesser / Unsplash

개요

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>"
  }
]

Reference