17가지 Prometheus 검사

원본 보기

17 Prometheus 확인

개요

Zabbix는 Prometheus 라인 형식으로 노출된 메트릭을 쿼리할 수 있습니다.

Prometheus 데이터 수집을 시작하려면 두 단계가 필요합니다:

  • 적절한 데이터 엔드포인트를 가리키는 HTTP 마스터 아이템, 예: https://<prometheus host>/metrics
  • 마스터 아이템에서 수집한 메트릭에서 필요한 데이터를 쿼리하기 위해 Prometheus 전처리 옵션을 사용하는 종속 아이템

두 가지 Prometheus 데이터 전처리 옵션이 있습니다:

  • Prometheus 패턴 - 일반 아이템에서 Prometheus 데이터를 쿼리하는 데 사용
  • Prometheus에서 JSON으로 - 일반 아이템과 낮은 수준 탐지에 사용됩니다. 이 경우 쿼리된 Prometheus 데이터가 JSON 형식으로 반환됩니다.
대량 처리

종속 아이템에 대해 대량 처리가 지원됩니다. 캐싱과 인덱싱을 활성화하려면 Prometheus 패턴 전처리가 첫 번째 전처리 단계여야 합니다. Prometheus 패턴이 첫 번째 전처리 단계일 때 파싱된 Prometheus 데이터가 캐시되고 Prometheus 패턴 전처리 단계의 첫 번째 <label>==<value> 조건에 의해 인덱싱됩니다. 이 캐시는 이 배치의 다른 종속 아이템을 처리할 때 재사용됩니다. 최적의 성능을 위해 첫 번째 레이블은 가장 다양한 값을 가진 것이어야 합니다.

첫 번째 단계 전에 수행해야 할 다른 전처리가 있다면, 마스터 아이템으로 이동하거나 종속 아이템의 마스터 아이템으로 사용될 새로운 종속 아이템으로 이동해야 합니다.

구성

HTTP 마스터 아이템이 구성되어 있다면, Prometheus 전처리 단계를 사용하는 종속 아이템을 생성해야 합니다:

  • 구성 양식에서 일반 종속 아이템 매개변수를 입력하세요
  • 전처리 탭으로 이동하세요
  • Prometheus 전처리 옵션을 선택하세요 (Prometheus 패턴 또는 Prometheus에서 JSON으로)

다음 매개변수는 Prometheus 패턴 전처리 옵션에 고유합니다:

매개변수 설명 예제
패턴 필요한 데이터 패턴을 정의하기 위해 Prometheus 쿼리 언어와 유사한 쿼리 언어를 사용할 수 있습니다 (비교 표 참조), 예:
<metric name> - 메트릭 이름으로 선택
{__name__="<metric name>"} - 메트릭 이름으로 선택
{__name__=\~"<regex>"} - 정규 표현식과 일치하는 메트릭 이름으로 선택
{<label name>="<label value>",...} - 레이블 이름으로 선택
{<label name>=\~"<regex>",...} - 정규 표현식과 일치하는 레이블 이름으로 선택
{__name__=\~".*"}==<value> - 메트릭 값으로 선택
또는 위의 조합:
<metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value>

레이블 값은 UTF-8 문자의 모든 시퀀스가 될 수 있지만, 백슬래시, 큰따옴표, 줄바꿈 문자는 각각 \\, \", \n으로 이스케이프되어야 합니다. 다른 문자는 이스케이프하지 않아야 합니다.
wmi_os_physical_memory_free_bytes
cpu_usage_system{cpu="cpu-total"}
cpu_usage_system{cpu=\~".*"}
cpu_usage_system{cpu="cpu-total",host=\~".*"}
wmi_service_state{name="dhcp"}==1
wmi_os_timezone{timezone=\~".*"}==1
결과 처리 값, 레이블을 반환할지 또는 적절한 함수를 적용할지 지정합니다 (패턴이 여러 줄과 일치하고 결과를 집계해야 하는 경우):
value - 메트릭 값 반환 (여러 줄이 일치하면 오류)
label - Label 필드에 지정된 레이블의 값 반환 (여러 메트릭이 일치하면 오류)
sum - 값의 합계 반환
min - 최솟값 반환
max - 최댓값 반환
avg - 평균값 반환
count - 값의 개수 반환
이 필드는 Prometheus 패턴 옵션에서만 사용할 수 있습니다.
아래 매개변수 사용 예제도 참조하세요.
출력 레이블 이름을 정의합니다 (선택사항). 이 경우 레이블 이름에 해당하는 값이 반환됩니다.
이 필드는 결과 처리 필드에서 'Label'이 선택된 경우에만 Prometheus 패턴 옵션에서 사용할 수 있습니다.

매개변수 사용 예제

  1. 가장 일반적인 사용 사례는 을 반환하는 것입니다. 다음에서 /var/db의 값을 반환하려면:

node_disk_usage_bytes{path="/var/cache"} 2.1766144e+09
node_disk_usage_bytes{path="/var/db"} 20480
node_disk_usage_bytes{path="/var/dpkg"} 8192
node_disk_usage_bytes{path="/var/empty"} 4096

다음 매개변수를 사용하세요:

  • 패턴 - node_disk_usage_bytes{path="/var/db"}
  • 결과 처리 - 'value' 선택
  1. 모든 node_disk_usage_bytes 매개변수의 평균 값에도 관심이 있을 수 있습니다:
  • 패턴 - node_disk_usage_bytes
  • 결과 처리 - 'avg' 선택
  1. Prometheus는 숫자 데이터만 지원하지만, 관련 텍스트 설명도 함께 반환할 수 있는 해결 방법을 사용하는 것이 인기입니다. 이는 필터와 레이블 지정으로 달성할 수 있습니다. 다음에서 'color' 레이블의 값을 반환하려면

elasticsearch_cluster_health_status{cluster="elasticsearch",color="green"} 1
elasticsearch_cluster_health_status{cluster="elasticsearch",color="red"} 0
elasticsearch_cluster_health_status{cluster="elasticsearch",color="yellow"} 0

다음 매개변수를 사용하세요:

  • 패턴 - elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1
  • 결과 처리 - 'label' 선택
  • Label - 'color' 지정

필터(숫자 값 '1' 기반)가 적절한 행과 일치하고, 레이블이 상태 설명을 반환합니다(현재 'green'; 잠재적으로 'red' 또는 'yellow'도 가능).

Prometheus에서 JSON으로

Prometheus의 데이터는 낮은 수준 탐지에 사용할 수 있습니다. 이 경우 JSON 형식의 데이터가 필요하며 Prometheus에서 JSON으로 전처리 옵션이 정확히 그것을 반환합니다.

자세한 내용은 Prometheus 데이터를 사용한 탐지를 참조하세요.

쿼리 언어 비교

다음 표는 PromQL과 Zabbix Prometheus 전처리 쿼리 언어 간의 차이점과 유사점을 나열합니다.

PromQL 즉시 벡터 선택기 Zabbix Prometheus 전처리
차이점
쿼리 대상 Prometheus 서버 Prometheus exposition 형식의 일반 텍스트
반환 즉시 벡터 메트릭 또는 레이블 값 (Prometheus 패턴)
JSON의 단일 값에 대한 메트릭 배열 (Prometheus에서 JSON으로)
레이블 일치 연산자 =, !=, =\~, !\~ =, !=, =\~, !\~
레이블 또는 메트릭 이름 일치에 사용되는 정규 표현식 RE2 PCRE
비교 연산자 목록 참조 값 필터링에는 == (동등)만 지원됩니다
유사점
문자열과 동일한 메트릭 이름으로 선택 <metric name> 또는 {__name__="<metric name>"} <metric name> 또는 {__name__="<metric name>"}
정규 표현식과 일치하는 메트릭 이름으로 선택 {__name__=\~"<regex>"} {__name__=\~"<regex>"}
문자열과 동일한 <label name> 값으로 선택 {<label name>="<label value>",...} {<label name>="<label value>",...}
정규 표현식과 일치하는 <label name> 값으로 선택 {<label name>=\~"<regex>",...} {<label name>=\~"<regex>",...}
문자열과 동일한 값으로 선택 {__name__=\~".*"} == <value> {__name__=\~".*"} == <value>