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 알림 |
|---|---|
원시 No Data 지원 |
No Data 상태가 Resolved 상태와 동일함 |
| 다중 임계값 지원 | 다중 임계값에 대해 두 개의 경보를 작성해야 함 |
| 지속 기간 없음 | 지속 기간은 추가 Pending 경보 상태를 작성합니다. |
| 조회는 기본적으로 모든 시계열을 리턴합니다. | 조회는 경보 조회를 충족하는 시계열만 리턴합니다. |
데이터 없음 및 다중 임계값 처리
No Data 시나리오를 식별하고 여러 임계값을 구성하는 것의 이점을 확인하려면 Prometheus 알림에서 임계값 알림으로 전환하면 됩니다.
지표 경보 처리 No Data 및 다중 임계값을 작성하려면 다음을 수행하십시오.
- 새 메트릭 알림을 만듭니다.
- 경보 작성 모드를 양식 에서 PromQL 로 전환하십시오.
- PromQL 사용하여 임계값 알림을 계속 구성합니다.
- 선택적으로 경고 임계값을 추가하고
No Data에 알리십시오.
Prometheus 경보 규칙 가져오기
Prometheus 규칙을 가져올 수 있습니다. Prometheus 규칙 업로드 옵션을 클릭하고 Prometheus 규칙 업로드 YAML 편집기에서 YAML 형식으로 규칙을 입력하십시오. Prometheus 알림 규칙을 가져오면 Prometheus 알림으로 변환됩니다.
각 경보 규칙에는 다음 필수 필드가 포함되어야 합니다.
alertexprfor
예제: 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