# BlackBox-Exporter 集成 > 以下部署配置基于 `KubeSphere` 的环境。 ### 1. 部署 Kubesphere 默认没有集成`blackbox-exporter`,暂时需要手动部署,可以先直接 apply [manifests/blackbox-exporter](https://github.com/frezes/ks-prometheus/tree/feat/addBlackboxExporter/manifests/blackbox-exporter)目录下的文件,手动将`blackbox-exporter`组件加入到`prometheus`的监控目标中。 然后 apply 如下`resource`, 将探测目标加入 `blackbox-exporter` 的探测 ```yaml apiVersion: monitoring.coreos.com/v1 kind: Probe metadata: name: blackbox-http namespace: monitoring spec: jobName: http-get interval: 60s module: http_2xx prober: url: blackbox-exporter.kubesphere-monitoring-system.svc:19115 scheme: http path: /probe targets: staticConfig: static: - https://prometheus.io #探测地址 - http://prometheus.io - https://kubesphere.io - https://kubesphere.com.cn ``` 部署完成后,`Prometheus` 将收集来自于`blackbox-exporter`对探测地址的监控指标。 ### 2. 可视化 现阶段可以使用`grafana`提供的仪表盘,可以先看一下效果。 https://grafana.com/grafana/dashboards/?search=blackbox 这里是模板ID为`9965` 的展示: ![blackbox-exporter.png](https://s2.loli.net/2022/11/30/kE2A7IXgUHlPWLD.png) ### 3. 配置 当前使用的配置为默认配置,比较简单通用,配置文件在`kubesphere-monitoring-system`空间的 `blackbox-exporter-configuration` 中。 而blackbox-exporter 支持更复杂的自定义配置,**它的配置灵活但需要根据场景进行自定义**。请参考 [example.yml](https://github.com/prometheus/blackbox_exporter/blob/master/example.yml): > 如 L16-26 支持对response header与body进行正则匹配; L44-53 支持basic auth; L54-59 证书认证等。 ```yaml= modules: http_2xx_example: prober: http timeout: 5s http: valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] 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: insecure_skip_verify: false preferred_ip_protocol: "ip4" # defaults to "ip6" ip_protocol_fallback: false # no fallback to "ip6" http_with_proxy: prober: http http: proxy_url: "http://127.0.0.1:3128" skip_resolve_phase_with_proxy: true http_post_2xx: prober: http timeout: 5s http: method: POST headers: Content-Type: application/json 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: prober: tcp timeout: 5s tcp: tls: true tcp_connect_example: prober: tcp timeout: 5s imap_starttls: prober: tcp timeout: 5s tcp: query_response: - expect: "OK.*STARTTLS" - send: ". STARTTLS" - expect: "OK" - starttls: true - send: ". capability" - expect: "CAPABILITY IMAP4rev1" smtp_starttls: 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: prober: icmp timeout: 5s icmp: preferred_ip_protocol: "ip4" source_ip_address: "127.0.0.1" dns_udp_example: 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: prober: dns dns: transport_protocol: "tcp" # defaults to "udp" preferred_ip_protocol: "ip4" # defaults to "ip6" query_name: "www.prometheus.io" ```