首页 / 平台管理 / 运维中心 / 监控 / 黑盒监控 / 创建黑盒监控项

创建黑盒监控项

创建黑盒监控项,可选择 ICMP、TCP、HTTP 探测方式,定期对指定的目标地址的网络进行探测。

前提条件

集群已部署监控组件,且监控组件运行正常。

操作步骤

  1. 在左侧导航栏中,单击 运维中心 > 监控 > 黑盒监控

    提示:黑盒监控为集群级别功能,单击上方导航栏中集群切换入口,可切换集群。

  2. 单击 创建黑盒监控项

  3. 参考以下说明,配置相关参数。

    参数 说明
    探测方式 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/
  4. 单击 创建
    创建成功后,可在列表页实时查看最近一次的探测结果,并可基于黑盒监控项 创建告警策略 ,当探测到故障时,自动触发告警通知相关人员修复故障。

    注意:黑盒监控项创建成功后,系统需要 5 分钟左右的时间同步配置,在同步配置期间,不会进行探测,无法查看探测结果。

自定义 BlackboxExporter 监控模块

通过为 BlackboxExporter 的配置文件添加自定义监控模块,可实现模块定义的探测方式, 丰富黑盒监控的功能。

例如:为配置文件添加 http_post_2xx 模块后,当黑盒监控的探测方式为 HTTP 时,可探测 POST 请求方法的状态。

提示:黑盒监控的配置文件位于集群的 Prometheus 组件所在的命名空间下,名称默认为 cpaas-monitor-prometheus-blackbox-exporter,支持修改,请以实际名称为准。
该配置文件是命名空间相关的 ConfigMap 资源,可通过平台管理的 集群管理 > 资源管理 功能快速查看、更新。如下图所示。

操作步骤

  1. 更新黑盒监控的配置文件,为 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 示例参见 参考信息

  2. 选择以下任一方式使配置生效。

    • 删除 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