17 HTTP代理

概述

此监控项类型允许使用HTTP/HTTPS协议进行数据轮询。使用Zabbix sender或Zabbix sender协议也可以进行捕获。

HTTP监控项检查由Zabbix服务器执行。但是,当主机由Zabbix proxy监控时,HTTP项检查由proxy执行。

HTTP 监控项检查不需要任何 agent 运行在被监控的主机上。

HTTP agent同时支持HTTP和HTTPS。Zabbix可以选择跟随重定向(参考下文Follow redirects的选项)。最大重定向数硬编码为10(用cURL的参数 CURLOPT_MAXREDIRS)

了解何时使用HTTPS协议,另请参阅已知问题

Zabbix server/proxy必须首先配置cURL(libcurl)支持。

配置

配置HTTP监控项:

  • 进入: ConfigurationHosts

  • 在主机的那行点击 Items

  • 点击 Create item

  • 在表格中输入监控项的参数

17 HTTP代理 - 图1

所有标有红色星号的为必填字段。

需要的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 fieldsURL的变量 (参见上文).
指定为属性和值对。
值是自动的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
TimeoutZabbix不会花超过设定的时间来处理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, 例如:
17 HTTP代理 - 图2
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 passwordSSL私钥文件密码。
支持的宏: 用户宏, 低级自动发现宏
设置 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
在这个字段,空格和 用户宏是被允许的。

如果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文件:

  1. openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
  2. openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key

示例

示例 1

发送简单的GET请求来从诸如Elasticsearch这样的服务中检索数据:

  • 使用URL创建一个GET项: localhost:9200/?pretty

  • 注意其响应

  1. {
  2. "name" : "YQ2VAY-",
  3. "cluster_name" : "elasticsearch",
  4. "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
  5. "version" : {
  6. "number" : "6.1.3",
  7. "build_hash" : "af51318",
  8. "build_date" : "2018-01-26T18:22:55.523Z",
  9. "build_snapshot" : false,
  10. "lucene_version" : "7.1.0",
  11. "minimum_wire_compatibility_version" : "5.6.0",
  12. "minimum_index_compatibility_version" : "5.0.0"
  13. },
  14. "tagline" : "You know, for search"
  15. }
  • 现在使用JSONPath预处理步骤提取版本号:$.version.number
Example 2
示例 2

发送简单的POST请求来检索来自Elasticsearch等服务的数据:

  • 使用URL创建一个POST项: [http://localhost:9200/str/values/_search?scroll=10s](http://localhost:9200/str/values/_search?scroll=10s "http://localhost:9200/str/values/_search?scroll=10s")

  • 配置以下POST主体以获取处理器负载 (每核1分钟的平均值)

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [{
  5. "match": {
  6. "itemid": 28275
  7. }
  8. }],
  9. "filter": [{
  10. "range": {
  11. "clock": {
  12. "gt": 1517565836,
  13. "lte": 1517566137
  14. }
  15. }
  16. }]
  17. }
  18. }
  19. }
  • 接收:
  1. {
  2. "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
  3. "took": 18,
  4. "timed_out": false,
  5. "_shards": {
  6. "total": 5,
  7. "successful": 5,
  8. "skipped": 0,
  9. "failed": 0
  10. },
  11. "hits": {
  12. "total": 1,
  13. "max_score": 1.0,
  14. "hits": [{
  15. "_index": "dbl",
  16. "_type": "values",
  17. "_id": "dqX9VWEBV6sEKSMyk6sw",
  18. "_score": 1.0,
  19. "_source": {
  20. "itemid": 28275,
  21. "value": "0.138750",
  22. "clock": 1517566136,
  23. "ns": 25388713,
  24. "ttl": 604800
  25. }
  26. }]
  27. }
  28. }
  • 现在使用JSONPath预处理步骤获取项值:$.hits.hits[0]._source.value