Prometheus 점검
개요
Zabbix는 Prometheus line format으로 노출되는 메트릭을 조회할 수 있습니다.
Prometheus 데이터 수집을 시작하려면 두 단계가 필요합니다:
- 적절한 데이터 엔드포인트를 가리키는 HTTP 마스터 아이템,
예:
https://<prometheus host>/metrics - 마스터 아이템이 수집한 메트릭에서 필요한 데이터를 조회하기 위해 Prometheus 전처리 옵션을 사용하는 종속 아이템
Prometheus 데이터 전처리 옵션은 두 가지가 있습니다:
- Prometheus pattern - 일반 아이템에서 Prometheus 데이터를 조회할 때 사용
- Prometheus to JSON - 일반 아이템과 자동 등록(low-level discovery)에 사용. 이 경우 조회된 Prometheus 데이터는 JSON 형식으로 반환됩니다.
일괄 처리
종속 아이템에 대해 일괄 처리가 지원됩니다. 캐싱과 인덱싱을 활성화하려면
Prometheus pattern 전처리가 첫 번째 전처리 단계여야 합니다.
Prometheus pattern이 첫 번째 전처리 단계인 경우, 파싱된 Prometheus
데이터는 Prometheus pattern 전처리 단계에서 첫 번째로 나오는 <label>==<value> 조건으로
캐싱 및 인덱싱됩니다. 이 캐시는 같은 배치 내 다른 종속 아이템을 처리할 때
재사용됩니다. 최적의 성능을 위해서는 첫 번째 label로 값의 종류가
가장 많은 것을 사용하는 것이 좋습니다.
첫 번째 단계 이전에 수행해야 할 다른 전처리가 있다면, 마스터 아이템으로 옮기거나, 해당 종속 아이템들의 마스터 아이템으로 사용될 새 종속 아이템으로 옮겨야 합니다.
설정
HTTP 마스터 아이템이 설정되어 있다면, Prometheus 전처리 단계를 사용하는 종속 아이템을 생성해야 합니다:
- 설정 폼에 일반적인 종속 아이템 파라미터를 입력합니다
- Preprocessing 탭으로 이동합니다
- Prometheus 전처리 옵션(Prometheus pattern 또는 Prometheus to JSON)을 선택합니다

다음 파라미터들은 Prometheus pattern 전처리 옵션에 특화된 것입니다:
| 파라미터 | 설명 | 예시 |
|---|---|---|
| Pattern | 필요한 데이터 패턴을 정의하려면 Prometheus 쿼리 언어와 유사한 쿼리 언어를 사용할 수 있습니다(비교 표 참고), 예: <metric name> - 메트릭 이름으로 선택 {__name__="<metric name>"} - 메트릭 이름으로 선택 {__name__=~"<regex>"} - 정규식과 일치하는 메트릭 이름으로 선택 {<label name>="<label value>",...} - label 이름으로 선택 {<label name>=~"<regex>",...} - 정규식과 일치하는 label 이름으로 선택 {__name__=~".*"}==<value> - 메트릭 값으로 선택 또는 위 항목들의 조합: <metric name>{<label1 name>="<label1 value>",<label2 name>=~"<regex>",...}==<value> label 값은 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 | 값을 반환할지, label을 반환할지, 아니면 적절한 함수를 적용할지 지정합니다(패턴이 여러 줄과 일치하여 결과를 집계해야 하는 경우): value - 메트릭 값 반환(여러 줄이 일치하면 오류) label - Label 필드에 지정된 label의 값 반환(여러 메트릭이 일치하면 오류) sum - 값들의 합계 반환 min - 최솟값 반환 max - 최댓값 반환 avg - 평균값 반환 count - 값의 개수 반환 이 필드는 Prometheus pattern 옵션에서만 사용할 수 있습니다. |
아래 파라미터 사용 예시도 참고하세요. |
| Output | label 이름을 정의합니다(선택 사항). 이 경우 해당 label 이름에 대응하는 값이 반환됩니다. 이 필드는 Prometheus pattern 옵션에서 Result processing 필드에 'Label'이 선택된 경우에만 사용할 수 있습니다. |
파라미터 사용 예시
- 가장 일반적인 사용 사례는 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는 숫자 데이터만 지원하지만, 관련된 텍스트 설명도 함께 반환할 수 있게 해주는 우회 방법을 사용하는 것이 일반적입니다. 이는 필터를 사용하고 label을 지정하여 구현할 수 있습니다. 예를 들어 다음에서 'color' label의 값을 반환하려면
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' 기준)가 해당하는 행을 찾아 일치시키고, label은 health status 설명(현재는 'green'이지만 상황에 따라 'red' 또는 'yellow'일 수도 있음)을 반환합니다.
Prometheus to JSON
Prometheus에서 가져온 데이터는 자동 등록(low-level discovery)에 사용할 수 있습니다. 이 경우 JSON 형식의 데이터가 필요하며, Prometheus to JSON 전처리 옵션이 정확히 그 데이터를 반환합니다.
자세한 내용은 Prometheus 데이터를 이용한 자동 등록을 참고하세요.
쿼리 언어 비교
다음 표는 PromQL과 Zabbix Prometheus 전처리 쿼리 언어 간의 차이점과 유사점을 나열합니다.
| PromQL instant vector selector | < | Zabbix Prometheus 전처리 |
|---|---|---|
| 차이점 | < | < |
| 쿼리 대상 | Prometheus 서버 | Prometheus exposition format의 일반 텍스트 |
| 반환값 | Instant vector | 메트릭 또는 label 값(Prometheus pattern) JSON에서 단일 값에 대한 메트릭 배열(Prometheus to JSON) |
| Label matching 연산자 | =, !=, =~, !~ | =, !=, =~, !~ |
| label 또는 메트릭 이름 매칭에 사용되는 정규식 | RE2 | PCRE |
| 비교 연산자 | 목록 참고 | 값 필터링에는 ==(equal)만 지원됩니다 |
| 유사점 | < | < |
| 문자열과 동일한 메트릭 이름으로 선택 | <metric name> or {__name__="<metric name>"} | <metric name> or {__name__="<metric name>"} |
| 정규식과 일치하는 메트릭 이름으로 선택 | {__name__=~"<regex>"} | {__name__=~"<regex>"} |
| 문자열과 동일한 <label name> 값으로 선택 | ||
| 정규식과 일치하는 <label name> 값으로 선택 | ||
| 문자열과 동일한 값으로 선택 | {__name__=~".*"} == <value> | {__name__=~".*"} == <value> |