토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.

목차


Alerting rule을 사용하면 프로메테우스 표현식 언어를 기반으로 alert 조건을 정의하고, alert가 시행fire되면 외부 서비스에 통지notification할 수 있다. 특정 시점에 alert 표현식이 벡터 요소를 하나 이상 생성하게 되면, 이 요소들이 가지고 있는 레이블 셋에서 alert가 활성 상태에 들어갔다고 판단한다.


Defining alerting rules

프로메테우스에 alerting rule을 설정하는 방법은 recording rule을 설정할 때와 동일하다.

alert를 사용하는 rule 파일 예시는 다음과 같다:

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 절을 지정하면, 프로메테우스는 이 표현식으로 만들어지는 출력 벡터 요소를 처음 발견하고 나서부터, 지정 기간이 지난 뒤에야 해당 alert를 시행fire된 것으로 계산한다. 이 예제에선 매 평가마다 10분 동안 alert가 활성active 상태로 지속되는지 확인해본 후 alert를 시행fire시킨다. 활성 상태이지만 아직 시행fire되지 않은 요소들은 보류pending 상태로 본다.

labels 절로는 alert에 첨부할 별도 레이블 셋을 지정할 수 있다. 기존 레이블과 충돌되는 게 있다면 모두 덮어쓴다. 레이블 값은 템플릿을 사용해 지정할 수 있다.

annotations 절엔 alert 설명이나 런북runbook 링크같이, 좀 더 긴 부가 정보를 저장할 수 있는 정보성 레이블 셋을 지정한다. 애노테이션 값은 템플릿을 사용해 지정할 수 있다.

Templating

레이블과 애노테이션 값은 콘솔 템플릿을 이용해 템플릿화할 수 있다. $labels 변수는 alert 인스턴스의 레이블 키/값 쌍을 가지고 있다. 설정해둔 외부 레이블은 $externalLabels 변수를 통해 접근할 수 있다. $value 변수는 alert 인스턴스의 평가 값을 가지고 있다.

# 시행 중인 요소의 레이블 값을 삽입하려면:
{{ $labels.<labelname> }}
# 시행 중인 요소의 표현식 결과값(숫자)을 삽입하려면:
{{ $value }}

예제:

groups:
- name: example
  rules:

  # 5분 이상 연결되지 않는 인스턴스를 잡아내는 alert.
  - 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."

  # 요청 지연 시간 중앙값(median)이 1초를 넘는 인스턴스를 잡아내는 alert.
  - 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)"

Inspecting alerts during runtime

어떤 alert가 활성 상태인지 (보류pending 또는 시행firing 상태) 직접 확인하고 싶다면, 프로메테우스 인스턴스에서 “Alerts” 탭으로 이동하면 된다. 이 화면에선 정의된 alert 중에서 현재 활성화돼있는 alert의 정확한 레이블 셋을 확인할 수 있다.

프로메테우스는 보류pending나 시행firing 중인 alert가 있다면 ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>} 형식으로 별도 시계열을 저장한다. alert가 활성 상태에 있다면 (보류pending 또는 시행firing) 해당 샘플 값은 1로 설정하며, 더 이상 활성 상태가 아니면 stale로 마킹한다.


Sending alert notifications

프로메테우스의 alerting rule은 지금 당장 무엇이 고장났는지 파악하기는 좋지만, 완전한 통지notification 솔루션이라곤 할 수 없다. 간단한 alert 정의 위에 요약, 통지 속도 제한, silencing, alert 의존성을 추가하려면 다른 계층이 하나 더 필요하다. 프로메테우스 생태계에서는 Alertmanager가 이 역할을 담당한다. 따라서 프로메테우스는 alert 상태에 대한 정보를 주기적으로 Alertmanager 인스턴스로 보내도록 구성할 수 있으며, 그러면 Alertmanager 인스턴스가 이어서 제대로 된 통지notification를 발송한다.
프로메테우스는 서비스 디스커버리 통합 기능을 이용해 가능한 Alertmanager 인스턴스를 자동으로 발견하도록 설정할 수 있다.


Next :
Template examples
프로메테우스 템플릿 예제

전체 목차는 여기에 있습니다.

<< >>

TOP