该监控项类型支持通过HTTP/HTTPS协议进行数据轮询。 同时也可使用Zabbix sender或Zabbix sender协议实现陷阱捕获。
HTTP 监控项检查由Zabbix server执行。但当通过Zabbix proxy监控主机时, HTTP 监控项检查将由proxy执行。
HTTP 监控项检查无需在被监控的一个主机上运行任何agent。
HTTP agent同时支持HTTP和HTTPS协议。Zabbix可选择性地跟随重定向(参见下文Follow redirects选项)。 最大重定向次数硬编码为10次(使用cURL选项CURLOPT_MAXREDIRS)。
Zabbix server/proxy必须在初始配置时 启用cURL(libcurl)支持。
配置HTTP 监控项的步骤:
所有必填字段都标有红色星号。
HTTP 监控项需要特定信息的字段包括:
参数 | 描述 |
---|---|
Type | 在此选择HTTP agent。 |
Key | 输入唯一的监控项键。 |
URL | 连接并获取数据的URL。例如: https://www.example.com http://www.example.com/download 域名可以用Unicode字符指定。执行HTTP检查时会自动转换为ASCII的punycode格式。 解析按钮可用于将可选的query字段(如?name=Admin&password=mypassword)从URL中分离出来,将属性和值移动到query字段进行自动URL编码。 限制为2048个字符。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_URL cURL选项。 |
Query fields | URL的变量(见上文)。 指定为属性和值对。 值会自动进行URL编码。宏的值会被解析后自动进行URL编码。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_URL cURL选项。 |
Request type | 选择请求方法类型: GET, POST, PUT 或 HEAD |
Timeout | Zabbix处理URL的时间不会超过设置的时间(1-60秒)。实际上,此参数定义了连接到URL的最大时间和执行HTTP请求的最大时间。因此,Zabbix在一个检查上花费的时间不会超过2 x 超时秒数。 支持时间后缀,例如30s, 1m。 支持的宏: 用户宏, 低级发现宏。 这设置了CURLOPT_TIMEOUT cURL选项。 |
Request body type | 选择请求体类型: 原始数据 - 自定义HTTP请求体,宏会被替换但不进行编码 JSON数据 - JSON格式的HTTP请求体。宏可以用作string, 数字, true和false; 用作字符串的宏必须用双引号括起来。宏的值会被解析后自动转义。如果未在头中指定"Content-Type",则默认为"Content-Type: application/json" XML数据 - XML格式的HTTP请求体。宏可以用作文本节点、属性或CDATA部分。宏的值会被解析后自动在文本节点和属性中转义。如果未在头中指定"Content-Type",则默认为"Content-Type: application/xml" 注意 选择XML数据需要libxml2。 |
Request body | 输入请求体。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 |
Headers | 执行请求时发送的自定义HTTP头。 指定为属性和值对。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_HTTPHEADER cURL选项。 |
Required status codes | 预期的HTTP状态码列表。如果Zabbix收到的代码不在列表中,监控项将变为不支持。如果为空,则不进行检查。 例如: 200,201,210-299 列表中支持的宏: 用户宏, 低级发现宏。 这使用了CURLINFO_RESPONSE_CODE cURL选项。 |
Follow redirects | 勾选复选框以跟随HTTP重定向。 这设置了CURLOPT_FOLLOWLOCATION cURL选项。 |
Retrieve mode | 选择必须检索的响应部分: 正文 - 仅正文 头 - 仅头 正文和头 - 正文和头 |
Convert to JSON | 头保存为"header"键下的属性和值对。 如果遇到'Content-Type: application/json',则正文保存为object,否则存储为string,例如: ![]() |
HTTP proxy | 可以指定使用的HTTP proxy,格式为[protocol://][username[:password]@]proxy.example.com[:port] 。可选的前缀 protocol:// 可用于指定替代的proxy协议(例如https, socks4, socks5; 参见documentation; 协议前缀支持在cURL 7.21.7中添加)。如果未指定协议,proxy将被视为HTTP proxy。如果指定了错误的协议,连接将失败,监控项将变为不支持。默认使用1080端口。 如果指定,proxy将覆盖proxy相关的环境变量,如http_proxy, HTTPS_PROXY。如果未指定,proxy不会覆盖proxy相关的环境变量。输入的值按原样传递,不进行健全性检查。 注意 仅支持HTTP proxy的简单认证。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_PROXY cURL选项。 |
HTTP authentication | 认证类型: 无 - 不使用认证。 基本 - 使用基本认证。 NTLM - 使用NTLM(Windows NT LAN Manager)认证。 Kerberos - 使用Kerberos认证。另见: Configuring Kerberos with Zabbix. 摘要 - 使用摘要认证。 选择认证方法将提供两个额外的字段用于输入用户名和密码,支持用户宏和低级发现宏。 这设置了CURLOPT_HTTPAUTH cURL选项。 |
SSL verify peer | 勾选复选框以验证Web服务器的SSL证书。服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。可以使用Zabbix server或proxy配置参数SSLCALocation覆盖CA文件的位置。 这设置了CURLOPT_SSL_VERIFYPEER cURL选项。 |
SSL verify host | 勾选复选框以验证Web服务器证书的Common Name字段或Subject Alternate Name字段是否匹配。 这设置了CURLOPT_SSL_VERIFYHOST cURL选项。 |
SSL certificate file | 用于客户端认证的SSL证书file的名称。证书file必须是PEM1格式。如果证书file也包含私钥,请将SSL密钥file字段留空。如果密钥已加密,请在SSL密钥密码字段中指定密码。包含此file的目录由Zabbix server或proxy配置参数SSLCertLocation指定。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_SSLCERT cURL选项。 |
SSL key file | 用于客户端认证的SSL私钥file的名称。私钥file必须是PEM1格式。包含此file的目录由Zabbix server或proxy配置参数SSLKeyLocation指定。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, 用户宏, 低级发现宏。 这设置了CURLOPT_SSLKEY cURL选项。 |
SSL key password | SSL私钥file的密码。 支持的宏: 用户宏, 低级发现宏。 这设置了CURLOPT_KEYPASSWD cURL选项。 |
Enable trapping | 勾选此复选框后,监控项还将作为trapper item运行,并接受Zabbix发送器或使用Zabbix发送器协议发送到此监控项的数据。 |
Allowed hosts | 仅在启用捕获复选框勾选时可见。 逗号分隔的IP地址列表,可选CIDR表示法或DNS名称。 如果指定,则仅接受来自此处列出的主机的传入连接。 如果启用了IPv6支持,则'127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1'被视为相同,'::/0'将允许任何IPv4或IPv6地址。 '0.0.0.0/0'可用于允许任何IPv4地址。 注意"IPv4兼容的IPv6地址"(0000::/96前缀)受支持但已被RFC4291弃用。 示例: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST} 此字段中允许空格和user macros。 主机宏: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}在此字段中允许。 |
如果HTTP proxy字段留空,另一种使用HTTP proxy的方法是设置proxy相关的环境变量。
对于HTTP - 为Zabbix服务器用户设置http_proxy
环境变量。例如:
http_proxy=http://proxy_ip:proxy_port
.
对于HTTPS - 设置HTTPS_PROXY
环境变量。例如:
HTTPS_PROXY=http://proxy_ip:proxy_port
。更多详细信息可通过运行shell命令获取: # man curl.
[1] Zabbix仅支持PEM格式的证书和私钥文件。如果您有PKCS #12格式file(通常扩展名为*.p12或*.pfx)的证书和私钥数据,可以使用以下命令generate PEM file:
发送简单的GET请求以从服务中检索数据 Elasticsearch:
localhost:9200/?pretty
{ "name" : "YQ2VAY-", "cluster_name" : "elasticsearch", "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg", "version" : { "number" : "6.1.3", "build_hash" : "af51318", "build_date" : "2018-01-26T18:22:55.523Z", "build_snapshot" : false, "lucene_version" : "7.1.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "您知道的,专为搜索而生" }
$.version.number
发送简单POST请求以从服务中检索数据 Elasticsearch:
创建一个POST 监控项请求,URL为: http://localhost:9200/str/values/_search?scroll=10s
配置以下POST请求体以获取处理器负载(1
min average per core)
{ "query": { "bool": { "must": [{ "match": { "itemid": 28275 } }], "filter": [{ "range": { "clock": { "gt": 1517565836, "lte": 1517566137 } } }] } } }
{ "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR" "耗时": 18, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1.0, "hits": [{ "_index": "dbl" "_type": "values", "_id": "dqX9VWEBV6sEKSMyk6sw" "_score": 1.0, "_source": { "itemid": 28275, "value": "0.138750", "clock": 1517566136, "ns": 25388713, "ttl": 604800 } }] } }
$.hits.hits[0]._source.value
检查Zabbix API是否存活,使用 apiinfo.version.
注意使用POST方法携带JSON数据,设置请求头 并仅要求返回头部信息:
通过连接Openweathermap公共服务获取天气信息。
注意query字段中宏的使用。参考Openweathermap API了解如何填充它们。
HTTPagent返回的示例JSON:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
下一步是配置从JSON提取数据的依赖监控项。
其他天气指标如'温度'以相同方式添加。
连接到nginx状态页面并批量获取其指标
按照[official
guide](https://nginx.ru/en/docs/http/ngx_http_stub_status_module.html).
配置nginx
示例 nginx 存根状态输出:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
下一个任务是配置用于提取数据的依赖监控项
基于正则表达式的样本依赖监控项值预处理
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)
:
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)
: