Sidebar

zh:manual:config:items:itemtypes:http

Table of Contents

17 HTTP代理

概述

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

HTTP代理同时支持HTTP和HTTPS。Zabbix可以选择跟随重定向(参考下文Follow redirects的选项)

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

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

配置

配置HTTP监控项:

  • 进入: ConfigurationHosts
  • 在主机的那行点击 Items
  • 点击 Create item
  • 在表格中输入监控项的参数

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

需要的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
在这个字段,空格和 用户宏是被允许的。
如果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文件:
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

示例

示例 1

发送简单的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"
}

  • 现在使用JSONPath预处理步骤提取版本号:$.version.number
示例 2

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

{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "itemid": 28275
                }
            }],
            "filter": [{
                "range": {
                    "clock": {
                        "gt": 1517565836,
                        "lte": 1517566137
                    }
                }
            }]
        }
    }
}

  • Received:
  • 接收:

{
    "_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
            }
        }]
    }
}

  • 现在使用JSONPath预处理步骤获取项值:$.hits.hits[0]._source.value