문서
원본 보기17 Prometheus 검사
개요
Zabbix는 Prometheus 라인 형식으로 노출된 메트릭을 쿼리할 수 있습니다.
Prometheus 데이터 수집을 시작하려면 두 단계가 필요합니다:
- 적절한 데이터 엔드포인트를 가리키는 HTTP 마스터 아이템, 예:
https://<prometheus host>/metrics - 마스터 아이템에서 수집된 메트릭에서 필요한 데이터를 쿼리하기 위해 Prometheus 전처리 옵션을 사용하는 종속 아이템
Prometheus 데이터 전처리 옵션은 두 가지가 있습니다:
- Prometheus pattern - Prometheus 데이터를 쿼리하기 위해 일반 아이템에서 사용
- Prometheus to JSON - 일반 아이템과 로우레벨 디스커버리에 사용. 이 경우 쿼리된 Prometheus 데이터가 JSON 형식으로 반환됩니다.
일괄 처리
종속 아이템에 대해 일괄 처리가 지원됩니다. 캐싱과 인덱싱을 활성화하려면
Prometheus pattern 전처리가 첫 번째 전처리 단계여야 합니다.
Prometheus pattern이 첫 번째 전처리 단계일 때, 파싱된 Prometheus 데이터는
Prometheus pattern 전처리 단계의 첫 번째 <label>==<value> 조건에 의해
캐시되고 인덱싱됩니다. 이 캐시는 배치에서 다른 종속 아이템들을 처리할 때 재사용됩니다.
최적의 성능을 위해 첫 번째 라벨은 가장 다양한 값을 가진 것이어야 합니다.
첫 번째 단계 이전에 수행해야 할 다른 전처리가 있는 경우, 마스터 아이템이나 종속 아이템들의 마스터 아이템으로 사용될 새로운 종속 아이템으로 이동해야 합니다.
구성
HTTP 마스터 아이템이 구성되어 있다면, Prometheus 전처리 단계를 사용하는 종속 아이템을 생성해야 합니다:
- 구성 폼에서 일반적인 종속 아이템 매개변수를 입력합니다
- 전처리 탭으로 이동합니다
- Prometheus 전처리 옵션을 선택합니다 (Prometheus pattern 또는 Prometheus to JSON)

다음 매개변수들은 Prometheus pattern 전처리 옵션에 특화된 것입니다:
| 매개변수 | 설명 | 예시 |
|---|---|---|
| Pattern | 필요한 데이터 패턴을 정의하기 위해 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 |
| Result processing | 값, 라벨을 반환할지 또는 적절한 함수를 적용할지 지정합니다 (패턴이 여러 줄과 일치하고 결과를 집계해야 하는 경우): value - 메트릭 값 반환 (여러 줄이 일치하면 오류) label - Label 필드에 지정된 라벨의 값 반환 (여러 메트릭이 일치하면 오류) sum - 값들의 합계 반환 min - 최솟값 반환 max - 최댓값 반환 avg - 평균값 반환 count - 값들의 개수 반환 이 필드는 Prometheus pattern 옵션에서만 사용할 수 있습니다. |
아래 매개변수 사용 예시도 참조하세요. |
| Output | 라벨 이름을 정의합니다 (선택사항). 이 경우 라벨 이름에 해당하는 값이 반환됩니다. 이 필드는 Result processing 필드에서 'Label'이 선택된 경우에만 Prometheus pattern 옵션에서 사용할 수 있습니다. |
매개변수 사용 예시
- 가장 일반적인 사용 사례는 value를 반환하는 것입니다. 다음에서
/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
다음 매개변수를 사용하세요:
- Pattern -
node_disk_usage_bytes{path="/var/db"} - Result processing - 'value' 선택
- 모든
node_disk_usage_bytes매개변수의 평균 값에 관심이 있을 수도 있습니다:
- Pattern -
node_disk_usage_bytes - Result processing - 'avg' 선택
- 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
다음 매개변수를 사용하세요:
- Pattern -
elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1 - Result processing - 'label' 선택
- Label - 'color' 지정
필터(숫자 값 '1' 기반)가 해당 행과 일치하고, 라벨은 상태 설명을 반환합니다 (현재 'green'이지만 'red' 또는 'yellow'일 수도 있음).
Prometheus to JSON
Prometheus의 데이터를 로우레벨 디스커버리에 사용할 수 있습니다. 이 경우 JSON 형식의 데이터가 필요하며, Prometheus to JSON 전처리 옵션이 정확히 그것을 반환합니다.
자세한 내용은 Prometheus 데이터를 사용한 디스커버리를 참조하세요.
쿼리 언어 비교
다음 표는 PromQL과 Zabbix Prometheus 전처리 쿼리 언어 간의 차이점과 유사점을 나열합니다.
| PromQL 순간 벡터 셀렉터 | Zabbix Prometheus 전처리 | |
|---|---|---|
| 차이점 | ||
| 쿼리 대상 | Prometheus 서버 | Prometheus 노출 형식의 일반 텍스트 |
| 반환값 | 순간 벡터 | 메트릭 또는 라벨 값 (Prometheus pattern) JSON의 단일 값에 대한 메트릭 배열 (Prometheus to 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> |