ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알림 규칙
    Metric 2021. 7. 10. 11:12
    반응형

    이 문서는 프로메테우스 공식 문서 "Alerting Rules"를 번역한 문서입니다. 원 문서를 보고 싶으시다면  여기를 클릭해주세요.

    Alerting rule은 PromQL을 기반으로 알람 조건을 정의하고, 외부 서비스에 FIRING된 알람들을 전달합니다. 알람 표현식이 지정된 시점부터 하나 이상의 벡터 요소를 생성하게 될 때마다 알람 라벨 세트가 ACTIVE 상태가 된 것으로 계산합니다.

    alert rule 정의하기

    Alerting rule은 recording rule과 같은 방식으로 Prometheus에서 설정 됩니다.

     

    다음은 알람을 생성하는 rule file의 예입니다.

    groups:
    - name: example
      rules:
      - alert: HighRequestLatency
        expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
        for: 10m
        labels:
          severity: page
        annotations:
          summary: High request latency

     

    for 절은 선택사항이며, 설정된 경우 Prometheus에서 표현식의 결과로 알람 라벨 세트가 생성된 시점으로부터 이 기간이 지난 후에, FIRING으로 계산됩니다. 위 경우에는 Prometheus가 FIRING되기 전까지 10분동안 ACTIVE 상태인지 지속적으로 검사합니다. 요소들이 ACTIVE되었지만 FIRING되지 않은 상태를 PENDING이라고 합니다.

     

    labes절은 알람에 추가적으로 라벨을 설정할 수 있습니다. 이미 존재하는 라벨은 오버라이트하게 됩니다. label 값은 템플릿화될 수 있습니다.

     

    annotation 절은 설명 또는 runbook 링크와 같은 긴 추가 정보를 저장하는데 사용됩니다. 역시 annotation 값은 템플릿화 될 수 있습니다.

     

    템플릿

    label과 annotation 값은 console templates를 사용해서 템플릿화 할 수 있습니다. $labels 변수는 알람 인스턴스에 label 키-값을 가지고 있습니다. 설정된 외부 label들은 $externalLabels 변수로 접근할 수 있습니다. $value 변수는 알람 인스턴스의 평가된 값을 가지고 있습니다.

    # To insert a firing element's label values:
    {{ $labels.<labelname> }}
    # To insert the numeric expression value of the firing element:
    {{ $value }}

     

    예:

    groups:
    - name: example
      rules:
    
      # 5분 이상 인스턴스에 접근하지 못하면 알람 발생
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
    
      # 10분간 API 요청 지연 시간의 중간 값이 1보다 높으면 알람 발생
      - alert: APIHighRequestLatency
        expr: api_http_request_latencies_second{quantile="0.5"} > 1
        for: 10m
        annotations:
          summary: "High request latency on {{ $labels.instance }}"
          description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

    운영 중에 알람 검사하기

    수동적으로 알람이 활성화되어있는지 검사하려면, Prometheus 인스턴스에서 "Alerts"탭을 확인하세요. 이 메뉴는 현재 정의된 각 알람의 활성화되어 있는 정확한 라벨 세트를 보여줍니다.

     

    PENDING, FIRING된 알람을 위해서, Prometheus는 ALERTS{alertname="<알람이름>", alertstate="<pending or firing>", [<추가적으로 설정된 알람 라벨>: <값>]} 같은 형식의 synthetic 시계열을 저장합니다. ACTIVE(PENDING or FIRING) 상태에 있는 경우 샘플 값은 1로 설정되며 INACTIVE된 경우 시계열은 stale한 것으로 표시됩니다.

    알람 전달하기

    Prometheus의 alert rule은 현재 문제가 무엇인지 파악하는데 유용하지만, 완벽한 notification 솔루션은 아닙니다. 간단한 알람 정의 위에 요약, 알람 속도 제한, 사일런스, 알람의 종속성을 추가하기 위해서는 다른 계층이 필요합니다. Prometheus 생태계에서 Alertmanager가 바로 그 역할을 합니다. 따라서 Prometheus는 알람 상태에 대한 정보를 Alertmanager 인스턴스로 주기적으로 보내고 Alertmanager가 그 알람을 정확하게 전달할 수 있도록 구성해야 합니다.

     

    Prometheus는 서비스 디스커버리를 통해 사용 가능한 Alertmanager 인스턴스를 자동으로 검색할 수 있도록 구성할 수 있습니다.

Designed by Tistory.