http_response 插件监控 HTTP 地址的连通性和响应时间以及证书有效期
简介
http_response 类似 Prometheus 生态的 blackbox_exporter,是一个黑盒监控插件,用于监控 HTTP 地址的连通性和响应时间以及证书有效期。插件配置文件在 conf/input.http_response/http_response.toml
。
配置
下面是一个简单配置样例,配置了 4 个要监控的地址:
[mappings]
"http://localhost:5678" = { "app" = "foo" }
"http://localhost:5679" = { "app" = "bar" }
[[instances]]
targets = [
"http://localhost:5678",
"http://localhost:5679",
"https://www.baidu.com",
"https://flashcat.cloud",
]
核心就是配置这个 targets 字段,是个数组,可以配置多个被监控地址。categraf 会根据 scheme 来决定是 http 还是 https 请求,如果是 https 则会自动检查证书有效期。
像上例,我们看到 www.baidu.com 和 flashcat.cloud 这样的地址,是很容易知道这是哪个域名的,但是看到 localhost:5678 这样的地址,就不知道是哪个服务了,所以我们可以在 mappings 字段里配置一下,这样在监控数据里就会有一个 app 标签,方便区分。最后生成的数据如下:
从上图可以看到,前面两个地址都有 app 标签,后面两个地址没有。里边还有个 region="ulric"
的标签可以忽略,这是我在 categraf 全局配置文件 config.toml 中配置的全局标签,所有的监控数据都会附带上这个标签。
关键指标
http_response 插件会采集如下指标,在指标视图中可以看到:
cdn 相关的指标是商业版本中的拨测功能采集的,开源版本中不会采集。其中,用于告警的指标是 http_response_result_code
只要这个指标是 0 就是正常的,如果这个指标非 0,就是异常的,不同的值代表不同的含义:
Success = 0
ConnectionFailed = 1
Timeout = 2
DNSError = 3
AddressError = 4
BodyMismatch = 5
CodeMismatch = 6
http_response_cert_expire_timestamp
是证书过期的时间戳,http_response_cert_expire_timestamp - time()
表示证书还有多久过期,单位是秒。
仪表盘
在模板中心搜索 http_response
就可以找到相关的集成:
点击之后可以看到里边的仪表盘,可以直接查看,也可以把仪表盘导入自己业务组下,然后就可以随意调整了。仪表盘的效果如下:
告警规则
还是在刚才的模板中心找到 http_response 集成,里边有现成的告警规则,导入自己的业务组下,然后修改成自己的告警接收组即可。
插件其他配置
http_response.toml 中除了 mappings 和 targets,还有其他的配置项,每个配置项都有详细的注释。关键的几个配置如下:
- labels: 给所有 targets 附加的标签
- interval_times: 采集频率的倍数。instance 最终的采集频率是 interval_times * global_interval
- http_proxy: 代理配置
- interface: HTTP 请求走哪块网卡
- method: HTTP 请求方法,默认 GET
- response_timeout: HTTP 请求超时时间
- follow_redirects: 是否跟随重定向
- username: HTTP Basic Auth 用户名
- password: HTTP Basic Auth 密码
- headers: HTTP 请求头,是个数组结构,必须是偶数,因为其内容是一个 Key,然后一个 Value,然后再一个 Key 再一个 Value,依次类推
- body: HTTP 请求体,比如 POST 请求的 body
- expect_response_substring: 期望的响应内容,如果响应内容不包含这个字符串,http_response_result_code 就会设置为 5
- expect_response_status_codes: 期望的响应状态码,如果响应状态码不在这个列表里,http_response_result_code 就会设置为 6
- use_tls: 是否使用 TLS,后面那些 TLS 相关配置只有在 use_tls 为 true 时才会生效