[comment]: # ({f63af2aa-e8c6d267})
# 18 Prometheus 数据处理

[comment]: # ({/f63af2aa-e8c6d267})

[comment]: # ({4a2c3be5-06c90457})
#### 概述

Zabbix可以查询Prometheus行格式标准的度量数据。

收集 Prometheus 数据需要如下两步:

-   一个[主 HTTP 监控项](/zh/manual/config/items/itemtypes/http)数据端点
    , 例如： `https://<prometheus host>/metrics`
-   一个预处理配置,`预定步骤`为 Prometheus
    选项的依赖监控项，用于从主HTTP监控项收集的度量中查询所需数据。

有两个 Prometheus 预处理的`预定步骤`配置选项:

-   *Prometheus 正则* - 用于普通监控项中查询Prometheus 数据
-   *Prometheus 转 JSON* - 用于普通监控项及低级发现中.
    在这种情况下，将返回 JSON 格式的 Prometheus 数据.

[comment]: # ({/4a2c3be5-06c90457})

[comment]: # ({e216614e-521d3ffc})
#### 配置

如果您配置了HTTP主监控项, 你需要创建一个使用 Prometheus
`预定步骤`配置的[依赖监控项](/zh/manual/config/items/itemtypes/dependent_items)，配置步骤如下:

-   点击监控项配置表单的类型（Type），选择相关项目（Dependent
    item）并配置主监控项
-   切换到预处理（Preprocessing）选项页
-   选择一个 *Prometheus* 预定步骤（Preprocessing steps），选择
    *Prometheus 正则* 或 *Prometheus 转 JSON*

![](../../../../../assets/zh/manual/config/items/itemtypes/prometheus_item1.png){width="600"}

|参数        描|样例|<|
|-----------------|------|-|
|*Pattern*|要定义所需的数据的正则规则，可以使用类似于Prometheus查询语言的语法规则 (参见[对照表](#query_language_comparison)), 例如.:\   *wmi\_os\_physical\_memory\_free\_by<metric name> - 被选定的 metric 名称\                                                                                  *cpu<br>{\_\_name\_\_="<metric name>"} - 被选定的 metric 名称\                                                                 *cpu<br>{\_\_name\_\_=\~"<regex>"} - 匹配被选定 metric 名称的正则表达式\                                                       *cpu\_usage<br>{<label name>="<label value>",...} - 被选定的 label 名称\                                                        *wmi<br>{<label name>=\~"<regex>",...} - 匹配被选定 label 名称的正则表达式\                                              *wmi\_os\_ti{\_\_name\_\_=\~".\*"}==<value> - 被选定的 metric 值<br>或以上两者的结合:<br><metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value><br><br>Label 值可以是UTF-8字符的任意序列，但反斜杠、双引号和换行符必须转义为 `\\`, `\"` 和 `\n` ; 其他字符不必转义 。|es*<br>usage\_system{cpu="cpu-total"}*<br>usage\_system{cpu=\~".\*"}*<br>system{cpu="cpu-total",host=\~".\*"}*<br>service\_state{name="dhcp"}==1*<br>ezone{timezone=\~".\*"}==1*|
|*Output*|定义 Label 名称（可选）。在这种情况下，将返回与 Label名称对应的值。<br>此字段仅适用于 *Prometheus 正则* 选项。|<|

[comment]: # ({/e216614e-521d3ffc})

[comment]: # ({aab78a40-8295282c})
#### Prometheus 转 JSON

可以使用低级（low-level）发现处理Prometheus数据，此时需要配置*预处理步骤*
选项为 *Prometheus 转 JSON* 将Prometheus数据转换为JSON格式数据。

详细参见 [使用 Prometheus
数据发现](/zh/manual/discovery/low_level_discovery/prometheus).

[comment]: # ({/aab78a40-8295282c})

[comment]: # ({11470123-54fc93e5})
#### 查询语法对照表

下表列出了PromQL和Zabbix Prometheus预处理查询语法之间的差异。

|<|[PromQL 语法](https://prometheus.io/docs/prometheus/latest/querying/basics/#instant-vector-selectors)       Z|bbix Prometheus 预处理语法|
|-|---------------------------------------------------------------------------------------------------------------|-------------------------------|
|**差异**|<|<|
|查询目标                                         Pro|etheus 服务器                                                                                           Promet|eus 格式的纯文本|
|返回                                             瞬|向量(Instant vector)                                                                                    Metri|或 label 值 (Prometheus 正则)<br><br>每条度量数据的 JSON 列表(Prometheus 转 JSON)|
|Label 匹配运算符                                 **=*|, **!=**, **=\~**, **!\~**                                                                             **=*|, **=\~**|
|Label 或 Metric 名称匹配的Regular 表达式         RE2|PCRE|<|
|比较运算符                                       参见 [|表](https://prometheus.io/docs/prometheus/latest/querying/operators/#comparison-binary-operators)   只有 **==*|(等于) 支持值过滤|
|**相似**|<|<|
|按 metric 名称等于字符串进行选定                 <metric|ame> or {\_\_name\_\_="<metric name>"}                                                 <metric|ame> or {\_\_name\_\_="<metric name>"}|
|按 metric 名称匹配正则表达式进行选定             {\_\_name\_\_|\~"<regex>"}                                                                            {\_\_name\_\_|\~"<regex>"}|
|按<label name>的值等于字符串进行选定       {<label|ame>="<label value>",...}                                                              {<label|ame>="<label value>",...}|
|按<label name>的值匹配正则表达式进行选定   {<label na|e>=\~"<regex>",...}                                                                  {<label na|e>=\~"<regex>",...}|
|按值等于字符串进行选定                           {\_\_name<br>|\_=\~".\*"} == <value>                                                                     {\_\_name<br>|\_=\~".\*"} == <value>|

[comment]: # ({/11470123-54fc93e5})
