PromQL 경보

IBM Cloud Monitoring 을 사용하면 PromQL 을 사용하여 인프라의 변경사항을 모니터하고 경보할 수 있습니다.

Prometheus 알림 정의하기

Prometheus 알림을 정의할 때 다음을 지정해야 합니다:

조건

유효한 PromQL 표현식을 입력합니다. 지표 경보와 달리 PromQL 조회는 지정된 조건을 충족하는 시계열만 리턴합니다. 예를 들어, sysdig_host_cpu_used_percent > 80 를 입력하면 CPU 사용량이 80%를 초과하는 호스트만 조회 결과에 포함됩니다. 모든 호스트가 이 임계값 미만이면 조회는 데이터 없음 상태와 동일한 해결됨 상태를 리턴합니다.

사용자는 경보가 실제로 해결되었는지 또는 메트릭이 사라지고 자동으로 실패했는지 여부를 판별하는 데 혼란을 겪을 수 있습니다. 이는 Prometheus 의 데이터 없음 상태를 해결됨 상태와 구별할 수 없기 때문입니다. Prometheus에서 데이터 없음을 처리하기 위한 전략 이 있습니다.

지속 기간

지속 기간은 경보를 트리거하기 전에 경보 조건이 true로 유지되어야 하는 기간입니다. Prometheus 알림에는 세 가지 상태가 있습니다: Resolved, Pending, Firing 입니다. 10m 의 지속 기간이 설정되면 Firing 상태로 전환하기 전에 10분의 연속 기간 동안 경보 조건이 일관되게 충족되어야 함을 의미합니다. 표현식이 충족되었지만 필요한 지속 기간을 충족하지 않은 경보는 Pending 상태입니다.

경보 해결 지연

경보 해결 지연은 Prometheus의 keep_firing_for 와 동일합니다. 이 설정을 사용하면 경보 조건이 더 이상 유효하지 않은 경우에도 사용자 정의 지속 기간 동안 경보 발생을 계속 실행할 수 있습니다. 기본 메트릭에서 no-data 의 간격을 갖는 경향이 있는 경보는 불필요한 노이즈 및 잘못된 해결을 방지하기 위해 경보 해결 지연을 사용하여 구성할 수 있습니다. 경보 해결 지연이 경과하기 전에 경보 조건이 다시 한 번 충족되면 지속 기간을 다시 충족할 필요 없이 경보가 계속 트리거됩니다.

범위 및 지속 기간

경보 지속 기간은 경보를 트리거하기 전에 특정 조건이 지속되어야 하는 기간입니다. 관련 메트릭 데이터가 평가되는 기간을 정의하는 경보의 범위와 혼동해서는 안됩니다.

다음 예제를 참조하십시오.

  rules:
  - alert: highNetworkTraffic1
    expr: avg(rate(network_bytes_total[1h])) > 10000000
    for: 5m
  - alert: highNetworkTraffic2
    expr: avg(rate(network_bytes_total[5m])) > 10000000
    for: 1h

highNetworkTraffic1 경보는 이전 1시간동안의 평균 네트워크 전송을 검사합니다. 5분의 지속 기간 동안 이 평균이 10MB 를 초과하면 경보가 트리거됩니다.

반면, highNetworkTraffic2 은 지난 5분동안 평균 네트워크 전송에 초점을 맞춥니다. 이 평균이 최근 1시간동안 10MB 를 초과하면 경보가 트리거됩니다.

더 긴 지속 기간을 사용하면 노이즈가 있는 경보를 줄이는 데 도움이 될 수 있지만, 이는 또한 일부 경보가 트리거되지 않고 순간적으로 임계값을 충족할 수 있음을 의미합니다. 노이즈가 있는 경보를 억제하는 것과 특정 조건에 대한 알림을 잠재적으로 지연시키는 것 사이에는 절충이 있습니다.

Prometheus 임계값 알림의 차이점

Prometheus 알림은 임계값 알림과 동일한 메트릭을 쿼리합니다. 두 경보 유형 간의 차이는 평가 알고리즘에 있습니다.

Prometheus 임계값 알림의 차이점
임계값 경보 Prometheus 알림
원시 No Data 지원 No Data 상태가 Resolved 상태와 동일함
다중 임계값 지원 다중 임계값에 대해 두 개의 경보를 작성해야 함
지속 기간 없음 지속 기간은 추가 Pending 경보 상태를 작성합니다.
조회는 기본적으로 모든 시계열을 리턴합니다. 조회는 경보 조회를 충족하는 시계열만 리턴합니다.

데이터 없음 및 다중 임계값 처리

No Data 시나리오를 식별하고 여러 임계값을 구성하는 것의 이점을 확인하려면 Prometheus 알림에서 임계값 알림으로 전환하면 됩니다.

지표 경보 처리 No Data 및 다중 임계값을 작성하려면 다음을 수행하십시오.

  1. 새 메트릭 알림을 만듭니다.
  2. 경보 작성 모드를 양식 에서 PromQL 로 전환하십시오.
  3. PromQL 사용하여 임계값 알림을 계속 구성합니다.
  4. 선택적으로 경고 임계값을 추가하고 No Data 에 알리십시오.

Prometheus 경보 규칙 가져오기

Prometheus 규칙을 가져올 수 있습니다. Prometheus 규칙 업로드 옵션을 클릭하고 Prometheus 규칙 업로드 YAML 편집기에서 YAML 형식으로 규칙을 입력하십시오. Prometheus 알림 규칙을 가져오면 Prometheus 알림으로 변환됩니다.

각 경보 규칙에는 다음 필수 필드가 포함되어야 합니다.

  • alert
  • expr
  • for

예제: Prometheus 충돌 루프 경보

이 경보는 prometheus, pushgateway 또는 alertmanager 작업에서 잠재적인 다시 시작 루프를 발견합니다.

groups:
- name: crashlooping
  rules:
  - alert: PrometheusTooManyRestarts
    expr: changes(process_start_time_seconds{job=~"prometheus|pushgateway|alertmanager"}[10m]) > 2
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: Prometheus too many restarts (instance {{ $labels.instance }})
      description: Prometheus has restarted more than twice in the last 15 minutes. It might be crashlooping.\n  VALUE = {{ $value }}\n

예시: HTTP 오류율 알림

이 예제에서 NginxHighHttp5xxErrorRate 는 5% 이상의 HTTP 오류율을 감지합니다.

NginxLatencyHigh 는 모든 호스트 및 노드에 대해 3초이상 동안 p99 대기 시간을 모니터합니다.

상태 5xx (> 5%) 또는 지연 시간이 긴 HTTP 요청에 대해 경고합니다:

groups:
- name: default
  rules:
  - alert: NginxHighHttp5xxErrorRate
    expr: sum(rate(nginx_http_requests_total{status=~"^5.."}[1m])) / sum(rate(nginx_http_requests_total[1m])) * 100 > 5
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: Nginx high HTTP 5xx error rate (instance {{ $labels.instance }})
      description: Too many HTTP requests with status 5xx
  - alert: NginxLatencyHigh
    expr: histogram_quantile(0.99, sum(rate(nginx_http_request_duration_seconds_bucket[2m])) by (host, node)) > 3
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: Nginx latency high (instance {{ $labels.instance }})
      description: Nginx p99 latency is higher than 3 seconds