此监控项类型允许使用HTTP/HTTPS协议进行数据轮询。 也可以使用Zabbix sender工具或Zabbix发送器protocol(用于向Zabbix server或proxy发送数据),或使用{CODE_19368bdd}
API方法(用于向Zabbix server发送数据)进行陷阱捕获。
HTTP监控项检查由Zabbix server执行。然而,当主机由Zabbix proxy监控时,HTTP监控项检查由proxy执行。
HTTP监控项检查不需要在被监控主机上运行任何agent。
HTTPagent同时支持HTTP和HTTPS。Zabbix将可选地跟随重定向(参见下面的跟随重定向选项)。重定向的最大数量被硬编码为10(使用cURL选项CURLOPT_MAXREDIRS)。
Zabbix server/proxy最初必须配置有cURL(libcurl)支持。
HTTP检查异步执行 - 在开始其他检查之前,不需要接收对一个请求的响应。DNS解析也是异步的。
异步检查的最大并发性为1000(由MaxConcurrentChecksPerPoller定义)。
异步HTTPagent轮询器的数量由StartHTTPAgentPollers参数定义。
自Zabbix 7.0起,HTTPagent检查中添加了cURL的持久连接功能。
要配置一个HTTP 监控项:
所有必填输入字段都标有红色星号。
需要为HTTP 监控项 提供特定信息的字段为:
参数 | 描述 |
---|---|
Type | 在这里选择 HTTP agent。 |
Key | 输入一个唯一的 监控项 键。 |
URL | 要连接并检索数据的URL。例如: https://www.example.com http://www.example.com/download 可以使用Unicode字符指定域名。在执行HTTP检查时,域名会自动转换为punycode编码的ASCII字符。 可以使用 解析 按钮从URL中分离出可选的 query 字段(如 ?name=Admin&password=mypassword),将属性和值移动到 query 字段 以进行自动URL编码。 限制为2048个字符。 支持的宏:{HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 这设置了 CURLOPT_URL cURL选项。 |
Query fields | URL的变量(参见上方)。 指定为属性和值对。 值会自动进行URL编码。宏中的值会先解析,然后自动进行URL编码。 支持的宏:{HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 这设置了 CURLOPT_URL cURL选项。 |
Request type | 选择请求方法类型:GET, POST, PUT 或 HEAD |
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}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 |
Headers | 执行请求时将发送的自定义HTTP头部。 指定为属性和值对。 支持的宏:{HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {监控项.ID}, {监控项.KEY}, {监控项.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}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 这设置了 CURLOPT_PROXY cURL选项。 |
HTTP authentication | 选择身份验证选项: 无 - 不使用身份验证; 基本 - 使用基本身份验证; NTLM - 使用NTLM (Windows NT LAN Manager) 身份验证; Kerberos - 使用Kerberos身份验证(参见:Configuring Kerberos with Zabbix); 摘要 - 使用摘要身份验证。 这设置了 CURLOPT_HTTPAUTH cURL选项。 |
User name | 输入用户名(最多255个字符)。 如果 HTTP身份验证 设置为基本,NTLM,Kerberos或摘要,则此字段可用。支持用户宏和低级发现宏。 |
Password | 输入用户密码(最多255个字符)。 如果 HTTP身份验证 设置为基本,NTLM,Kerberos或摘要,则此字段可用。支持用户宏和低级发现宏。 |
SSL verify peer | 选中复选框以验证Web服务器的SSL证书。服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。您可以使用 Zabbix server 或 proxy 配置参数SSLCALocation覆盖CA文件的位置。 这设置了 CURLOPT_SSL_VERIFYPEER cURL选项。 |
SSL verify host | 选中复选框以验证Web服务器证书的通用名称字段或主题备用名称字段是否匹配。 这设置了 CURLOPT_SSL_VERIFYHOST cURL选项。 |
SSL certificate file | 用于客户端身份验证的SSL证书文件名称。证书文件必须为PEM1格式。如果证书文件中还包含私钥,请留空SSL密钥文件字段。如果密钥已加密,请在SSL密钥密码字段中指定密码。包含此文件的目录由 Zabbix server 或 proxy 配置参数SSLCertLocation指定。 支持的宏:{HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 这设置了 CURLOPT_SSLCERT cURL选项。 |
SSL key file | 用于客户端身份验证的SSL私钥文件名称。私钥文件必须为PEM1格式。包含此文件的目录由 Zabbix server 或 proxy 配置参数SSLKeyLocation指定。 支持的宏:{HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {监控项.ID}, {监控项.KEY}, {监控项.KEY.ORIG}, 用户宏,低级发现宏。 这设置了 CURLOPT_SSLKEY cURL选项。 |
SSL key password | SSL私钥文件密码。 支持的宏:用户宏,低级发现宏。 这设置了 CURLOPT_KEYPASSWD cURL选项。 |
Timeout | Zabbix在处理URL上花费的时间不会超过设定的时间(1-600秒)。实际上,此参数定义了与URL建立连接的最大时间和执行HTTP请求的最大时间。因此,Zabbix在一次检查上花费的时间不会超过2 x 超时时间 秒。 这设置了 CURLOPT_TIMEOUT cURL选项。 有关 超时时间 参数的更多信息,请参见 general item attributes。 |
Enable trapping | 如果选中此复选框,监控项 也将作为陷阱 监控项,并接受发送到 Zabbix server 或 proxy 的数据,使用 Zabbix sender 实用程序或Zabbix发送器 protocol,或接受发送到 Zabbix server 的数据,使用 {CODE_19368bdd} API方法。有关发送数据的更多信息,请参见:Trapper items。 |
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格式文件中(通常扩展名为 *.p12 或 *.pfx),您可以使用以下 命令从其中生成PEM文件:
发送简单的 GET 请求以从服务如 Elasticsearch 中获取数据: - 创建一个 GET 类型的监控项,其 URL 设置为 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
检查Zabbix API是否可用,可以用apiinfo.version 这个接口
注意使用POST方法传输JSON数据,设定请求头并仅要求检索头信息:
通过连接到 Openweathermap 检索天气信息公共服务。
注意在query的字段中使用宏。参考 Openweathermap API文档 来了解如何填写它们。
一个简单JSON对象会被返回给HTTPS 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
}
}
下一个任务是配置依赖监控项从这个JSON对象中导出必要的数据。
其他天气指标,如“温度”,同理,以相同的方式添加。
连接到 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]+)
: