此监控项类型允许使用HTTP/HTTPS协议进行数据轮询。使用Zabbix sender或Zabbix sender协议也可以进行捕获。
HTTP代理同时支持HTTP和HTTPS。Zabbix可以选择跟随重定向(参考下文Follow redirects的选项)
了解何时使用HTTPS协议,另请参阅已知问题
Zabbix server/proxy必须首先配置cURL(libcurl)支持。
配置HTTP监控项:
所有标有红色星号的为必填字段。
需要的HTTP监控项特定信息的字段是:
Type | 在这里选择HTTP agent |
Key | 输入一个唯一的监控项键值 |
URL | 连接和检索数据的URL. 例如: https://www.google.com http://www.zabbix.com/download\\可以用Unicode字符指定域名。 在执行web场景步骤时,它们将自动转换为ASCII。 Parse 可以使用Parse按钮将可选查询字段(比如?name=Admin&password=mypassword)与URL分离,将属性和值移动到查询字段中,以便自动URL编码. 限制在2048个字符。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级发现宏 这是设置CURLOPT_URL cURL选项. |
Query fields | URL的变量 (参见上文). 指定为属性和值对。 值是自动的URL编码。 从宏中解析值,然后自动编码url 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏. 设置cURL选项 CURLOPT_URL. |
Request type | 选择请求方法类型: GET, POST, PUT or HEAD |
Timeout | Zabbix不会花超过设定的时间来处理URL (最大1分钟)。实际上,这个参数定义了连接URL的最大时间和执行HTTP请求的最大时间。 因此,Zabbix不会在一次检查中花费超过2倍的超时时间。 支持时间后缀, 例如 30s, 1m. 支持的宏: 用户宏, 低级发现宏。 设置cURL选项 CURLOPT_TIMEOUT |
Request body type | 选择请求体类型: Raw data - 自定义HTTP请求体,替换宏,但不执行编码。 JSON data - HTTP请求体是JSON格式的, 宏可以用作字符串、数字、真和假;用作字符串的宏必须包含在双引号中。从宏中解析值,然后自动转义。 如果没有指定header,那么服务器将把默认的header值设置为"Content-Type: application/json" XML data - HTTP请求体的XML格式。 宏可以用作文本节点、属性或CDATA部分。 从宏中解析值,然后在文本节点和属性中自动转义。 如果没有指定header,那么服务器将把默认的header值设置为 "Content-Type: application/xml" 注意 选择 XML data, 需要libxml2的支持。 |
Request body | 输入请求体 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏。 |
Headers | 执行请求时将发送的自定义HTTP头。 指定为属性和值对。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏。 设置 CURLOPT_HTTPHEADER cURL option. |
Required status codes | 期望的HTTP状态码的列表。 如果Zabbix得到不在列表中的代码,那么这个项目将不受支持。如果为空,则不执行检查. 例如: 200,201,210-299 列表里支持的宏: 用户宏, 低级自动发现宏。 这个使用了 CURLINFO_RESPONSE_CODE cURL option. |
Follow redirects | 标记复选框以跟随HTTP重定向。 设置 CURLOPT_FOLLOWLOCATION cURL option. |
Retrieve mode | 选择必须检索的响应部分: Body - 仅主体 Headers - 仅头部 Body and headers - 主体和头部 |
Convert to JSON | 头文件作为属性和值对保存在"header" 键下. 如果遇到 'Content-Type: application/json' 主体被保存为对象,否则它被存储为string, 例如: |
HTTP proxy | 可以使用格式http://[username[:password]@]proxy.mycompany.com[:port] 指定要使用的HTTP代理。默认将使用1080端口. 如果指定,代理将覆盖与代理相关的环境变量,如http_proxy、HTTPS_PROXY. 如果没有指定,代理将不会覆盖与代理相关的环境变量。 输入的值将被传递 "as is", 没有进行健全检查。 您还可以输入SOCKS代理地址。 如果您指定了错误的协议,那么连接将失败,监控项将不受支持。 由于没有指定协议,代理将被视为HTTP代理。 注意 HTTP代理只支持简单的身份验证。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏。 设置 CURLOPT_PROXY cURL option. |
HTTP authentication | 验证类型: None - 不使用身份验证. Basic authentication - 使用脚本身份验证. NTLM authentication - 使用NTLM (Windows NT LAN Manager) 验证。 选择身份验证方法将为输入用户名和密码提供两个额外的字段,其中支持用户宏和低级发现宏。 设置 CURLOPT_HTTPAUTH cURL option. |
SSL verify peer | 标记复选框以验证web服务器的SSL证书。 服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。 可以使用Zabbix服务器或代理配置参数SSLCALocation重写CA文件的位置。 设置 CURLOPT_SSL_VERIFYPEER cURL option. |
SSL verify host | 标记复选框以验证web服务器证书的通用名称字段或主题备用名称字段是否匹配. 设置 CURLOPT_SSL_VERIFYHOST cURL option. |
SSL certificate file | 用于客户端身份验证的SSL证书文件的名称。 证书文件必须是PEM1 格式. 如果证书文件也包含私钥,则将SSL密钥文件字段保留为空。 如果密钥已加密,请在SSL密钥密码字段中指定密码。 包含此文件的目录由Zabbix server或zabbix proxy配置参数SSLCertLocation指定。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏。 设置 CURLOPT_SSLCERT cURL option. |
SSL key file | 用于客户端身份验证的SSL私钥文件的名称。 私钥文件必须是PEM1格式。 包含此文件的目录由Zabbix server或zabbix proxy配置参数SSLKeyLocation指定。 支持的宏: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, 用户宏, 低级自动发现宏。 设置 CURLOPT_SSLKEY cURL option. |
SSL key password | SSL私钥文件密码。 支持的宏: 用户宏, 低级自动发现宏 设置 CURLOPT_KEYPASSWD cURL option. |
Enable trapping | 选中此复选框后,该项目也将作为 trapper监控项项发挥作用,并将接受Zabbix sender或使用Zabbix sender协议发送给该监控项的数据. |
Allowed hosts | 只有勾选了 Enable trapping复选框才可见。 由逗号分隔的IP地址列表,可选地使用CIDR符号或主机名。\\如果指定,传入连接将仅从这里列出的主机接受。 如果启用了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 prefix) 能够被支持,但 RFC4291不推荐使用。 示例: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.domain 在这个字段,空格和 用户宏是被允许的。 |
<note tip>如果HTTP代理字段为空,则使用HTTP代理的另一种方法是设置与代理相关的环境变量.
对于HTTP - 为Zabbix server用户设置“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格式文件 (通常扩展名为 *.p12 or *.pfx) 您可以使用以下命令从它生成PEM文件:
发送简单的GET请求来从诸如Elasticsearch这样的服务中检索数据:
*使用URL创建一个GET项: ''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" : "You know, for search"
}
$.version.number
发送简单的POST请求来检索来自Elasticsearch等服务的数据:
http://localhost:9200/str/values/_search?scroll=10s
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 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
Retrieving weather information by connecting to the Openweathermap public service.
Note the usage of macros in query fields. Refer to the Openweathermap API for how to fill them.
Sample JSON returned in response to HTTP agent:
{
"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
}
}
The next task is to configure dependent items that extract data from the JSON.
Other weather metrics such as 'Temperature' are added in the same manner.
Connecting to Nginx status page and getting its metrics in bulk.
Sample Nginx stub status output:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
The next task is to configure dependent items that extract data.
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)
: