创建黑盒监控项
创建黑盒监控项,可选择 ICMP、TCP、HTTP 探测方式,定期对指定的目标地址的网络进行探测。
前提条件
集群已部署监控组件,且监控组件运行正常。
操作步骤
-
在左侧导航栏中,单击 运维中心 > 监控 > 黑盒监控。
提示:黑盒监控为集群级别功能,单击上方导航栏中集群切换入口,可切换集群。
-
单击 创建黑盒监控项。
-
参考以下说明,配置相关参数。
参数 说明 探测方式 ICMP:通过对 目标地址 中输入的域名或 IP 地址进行 ping 探测,检测服务器的存活状态。
TCP:通过监听 目标地址 中输入的<域名:端口>
或<IP:端口>
中端口,探测主机的业务端口的存活状态。
HTTP:通过对 目标地址 中输入的 URL 地址进行探测,检测网站的连通性。
提示:HTTP 探测方式默认仅支持 GET 请求方式,如需使用 POST 请求方式请参考 自定义 BlackboxExporter 监控模块 。探测间隙 探测间隔时间。 目标地址 探测的目标地址,不超过 128 个字符。
不同的 探测方式 下,目标地址的输入格式要求不同:
ICMP:域名或 IP 地址,例如:10.165.94.31
。
TCP:<域名:端口>
或<IP:端口>
,例如:172.19.155.133:8765
。
HTTP:以 http 或 https 开头的网站 URL 地址,例如:http://alauda.cn/
。 -
单击 创建。
创建成功后,可在列表页实时查看最近一次的探测结果,并可基于黑盒监控项 创建告警策略 ,当探测到故障时,自动触发告警通知相关人员修复故障。注意:黑盒监控项创建成功后,系统需要 5 分钟左右的时间同步配置,在同步配置期间,不会进行探测,无法查看探测结果。
自定义 BlackboxExporter 监控模块
通过为 BlackboxExporter 的配置文件添加自定义监控模块,可实现模块定义的探测方式, 丰富黑盒监控的功能。
例如:为配置文件添加 http_post_2xx 模块后,当黑盒监控的探测方式为 HTTP
时,可探测 POST 请求方法的状态。
提示:黑盒监控的配置文件位于集群的 Prometheus 组件所在的命名空间下,名称默认为 cpaas-monitor-prometheus-blackbox-exporter
,支持修改,请以实际名称为准。
该配置文件是命名空间相关的 ConfigMap 资源,可通过平台管理的 集群管理 > 资源管理 功能快速查看、更新。如下图所示。

操作步骤
-
更新黑盒监控的配置文件,为 key
modules
添加自定义监控模块。以添加 http_post_2xx 模块为例进行说明。
blackbox.yaml: | modules: http_post_2xx: # http_post 探测模块 prober: http timeout: 5s http: method: POST # 探测的请求方法 headers: Content-Type: application/json body: '{}' # 探测时携带的 body 内容
完整的黑盒监控的配置文件 YAML 示例参见 参考信息 。
-
选择以下任一方式使配置生效。
-
删除 Blackbox Exporter 组件 cpaas-monitor-prometheus-blackbox-exporter 的 Pod 重启 Blackbox Exporter 组件。
-
执行以下命令调用 reload API 重新加载配置文件:
curl -X POST -v <Pod IP>:9115/-/reload
-
参考信息
完整的黑盒监控的配置文件 YAML 示例如下:
apiVersion: v1
data:
blackbox.yaml: |
modules:
http_2xx_example: # http 探测示例
prober: http
timeout: 5s # 探测的超时时间
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] # 返回信息中的 Version,一般默认即可
valid_status_codes: [] # Defaults to 2xx # 有效的返回码范围,如果请求的返回码在该范围内,视为探测成功
method: GET # 请求方法
headers: # 请求的头部
Host: vhost.example.com
Accept-Language: en-US
Origin: example.com
no_follow_redirects: false # 是否允许重定向
fail_if_ssl: false
fail_if_not_ssl: false
fail_if_body_matches_regexp:
- "Could not connect to database"
fail_if_body_not_matches_regexp:
- "Download the latest version here"
fail_if_header_matches: # Verifies that no cookies are set
- header: Set-Cookie
allow_missing: true
regexp: '.*'
fail_if_header_not_matches:
- header: Access-Control-Allow-Origin
regexp: '(\*|example\.com)'
tls_config: # 针对 https 请求的 tls 的配置
insecure_skip_verify: false
preferred_ip_protocol: "ip4" # defaults to "ip6" # 首选的 IP 协议版本
ip_protocol_fallback: false # no fallback to "ip6"
http_post_2xx: # 带 Body 的 http 探测的示例
prober: http
timeout: 5s
http:
method: POST # 探测的请求方法
headers:
Content-Type: application/json
body: '{"username":"admin","password":"123456"}' # 探测时携带的 body
http_basic_auth_example: # 带用户名密码的探测的示例
prober: http
timeout: 5s
http:
method: POST
headers:
Host: "login.example.com"
basic_auth: # 探测时要加的用户名密码
username: "username"
password: "mysecret"
http_custom_ca_example:
prober: http
http:
method: GET
tls_config: # 指定探测时使用的根证书
ca_file: "/certs/my_cert.crt"
http_gzip:
prober: http
http:
method: GET
compression: gzip # 探测时使用的压缩方法
http_gzip_with_accept_encoding:
prober: http
http:
method: GET
compression: gzip
headers:
Accept-Encoding: gzip
tls_connect: # TCP 探测的示例
prober: tcp
timeout: 5s
tcp:
tls: true # 是否使用 TLS
tcp_connect_example:
prober: tcp
timeout: 5s
imap_starttls: # 探测 IMAP 邮箱服务器的配置示例
prober: tcp
timeout: 5s
tcp:
query_response:
- expect: "OK.*STARTTLS"
- send: ". STARTTLS"
- expect: "OK"
- starttls: true
- send: ". capability"
- expect: "CAPABILITY IMAP4rev1"
smtp_starttls: # 探测 SMTP 邮箱服务器的配置示例
prober: tcp
timeout: 5s
tcp:
query_response:
- expect: "^220 ([^ ]+) ESMTP (.+)$"
- send: "EHLO prober\r"
- expect: "^250-STARTTLS"
- send: "STARTTLS\r"
- expect: "^220"
- starttls: true
- send: "EHLO prober\r"
- expect: "^250-AUTH"
- send: "QUIT\r"
irc_banner_example:
prober: tcp
timeout: 5s
tcp:
query_response:
- send: "NICK prober"
- send: "USER prober prober prober :prober"
- expect: "PING :([^ ]+)"
send: "PONG ${1}"
- expect: "^:[^ ]+ 001"
icmp_example: # ICMP 探测配置的示例
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: "ip4"
source_ip_address: "127.0.0.1"
dns_udp_example: # 使用 UDP 进行 DNS 查询的示例
prober: dns
timeout: 5s
dns:
query_name: "www.prometheus.io" # 要解析的域名
query_type: "A" # 该域名对应的类型
valid_rcodes:
- NOERROR
validate_answer_rrs:
fail_if_matches_regexp:
- ".*127.0.0.1"
fail_if_all_match_regexp:
- ".*127.0.0.1"
fail_if_not_matches_regexp:
- "www.prometheus.io.\t300\tIN\tA\t127.0.0.1"
fail_if_none_matches_regexp:
- "127.0.0.1"
validate_authority_rrs:
fail_if_matches_regexp:
- ".*127.0.0.1"
validate_additional_rrs:
fail_if_matches_regexp:
- ".*127.0.0.1"
dns_soa:
prober: dns
dns:
query_name: "prometheus.io"
query_type: "SOA"
dns_tcp_example: # 使用 TCP 进行 DNS 查询的示例
prober: dns
dns:
transport_protocol: "tcp" # defaults to "udp"
preferred_ip_protocol: "ip4" # defaults to "ip6"
query_name: "www.prometheus.io"
kind: ConfigMap
metadata:
annotations:
skip-sync: "true"
labels:
app.kubernetes.io/instance: cpaas-monitor
app.kubernetes.io/managed-by: Tiller
app.kubernetes.io/name: prometheus-blackbox-exporter
helm.sh/chart: prometheus-blackbox-exporter-1.6.0
name: cpaas-monitor-prometheus-blackbox-exporter
namespace: cpaas-system