当您在容器服务集群接入托管 Prometheus 后,允许通过 Probe 来满足集群和应用的黑盒监控需求。本文为您介绍如何通过 Probe 来配置黑盒监控。
在标准的 Kubernetes 集群中,我们可以通过配置 ServiceMonitor 或 PodMonitor 进行服务发现,对集群内的资源或服务进行监控,例如:监控主机的资源用量、容器的运行状态、数据库中间件的运行数据等等。这些都是支持业务和服务的基础设施,通过监控其暴露的相关指标,能够了解其内部的实际运行状态,预判可能出现的问题,从而对潜在的不确定因素进行优化。这种通过直接观测应用内部指标的监控方法,也被称之为 白盒监控。
除了白盒监控以外,实际中还经常使用 黑盒监控(Blackbox) 对服务进行监控。所谓黑盒监控,即以用户的视角测试和监控服务的外部可见性,常见的黑盒监控包括 HTTP 探针、TCP 探针、DNS 探针、ICMP 探针、gRPC 探针等,可以用于检测站点或者服务的可访问性,以及访问效率等。例如:
说明
Blackbox Exporter 是 Prometheus 社区提供的官方黑盒监控解决方案,其允许用户通过 HTTP、HTTPS、DNS、TCP、ICMP 以及 gRPC 等方式对网络和应用进行探测和监控。详情请参见 官方文档
黑盒监控与白盒监控的主要区别和应用场景为:
说明
一个典型的、完善的监控链路,需要白盒监控和黑盒监控共同完成。即从白盒监控的角度发现潜在问题,从黑盒监控的角度快速发现已经发生的问题。
如果您的集群中不存在 Probe CRD 资源,您需要在本地环境中连接集群,执行以下命令,在集群中创建 Probe CRD 资源。
kubectl apply -f https://vmp-release-cn-beijing.tos-cn-beijing.volces.com/manifests/crds/promopeartor-crd-probes.yaml
说明
cn-beijing
字段修改为对应地域的 RegionID。例如:华东2(上海)地域的集群,部署命令为 kubectl apply -f https://vmp-release-cn-shanghai.tos-cn-shanghai.volces.com/manifests/crds/promopeartor-crd-probes.yaml
。地域的 RegionID 详情请参见 地域和可用区。apiVersion: v1 kind: ConfigMap metadata: name: blackbox-config namespace: volcano-metrics data: blackbox.yml: |- modules: ## ------------HTTP 检测模块配置------------ http_2xx: prober: http timeout: 5s ## 探测超时时间 http: valid_http_versions: ["HTTP/1.1", "HTTP/2.0"] valid_status_codes: [] ## HTTP 返回状态码,默认为 2xx method: GET ## HTTP GET 方法 preferred_ip_protocol: "ip4" ## HTTP 探针默认为 IPv6,需要使用该配置项强制通过 IPv4 进行探测 ## ------------HTTP POST 监测模块配置------------ http_post_2xx: prober: http timeout: 5s ## 探测超时时间 http: method: POST headers: Content-Type: application/json ## 定义 HTTP 报文头 body: '{}' ## 定义 HTTP 报文 body 内容 ## ------------TCP 检测模块配置------------ tcp_connect: prober: tcp timeout: 5s ## 探测超时时间 ## ------------ICMP 检测模块配置------------ icmp: prober: icmp timeout: 5s ## 探测超时时间 ## ------------DNS 检测模块配置------------ dns: prober: dns dns: query_name: "www.example.com" query_type: "A" valid_rcodes: - NOERROR
说明
上述配置项仅为示例,只定义了http_2xx
、http_post_2xx
、tcp_connect
、icmp
和dns
几个探测模块。如果您有其他协议的探测需求,需要添加对应的探测模块配置。详情请参见 官方文档。
apiVersion: apps/v1 kind: Deployment metadata: name: blackbox namespace: volcano-metrics spec: selector: matchLabels: app: blackbox template: metadata: labels: app: blackbox spec: containers: - image: prom/blackbox-exporter:latest # 拉取 Docker Hub 中的 exporter 镜像 name: blackbox args: - --config.file=/etc/blackbox_exporter/blackbox.yml # 指定 ConfigMap 配置文件 - --log.level=error # 错误级别控制 ports: - containerPort: 9115 # 配置容器端口号 volumeMounts: - name: config mountPath: /etc/blackbox_exporter volumes: - name: config configMap: name: blackbox-config # 挂载 ConfigMap 配置文件
说明
blackbox-exporter 的详细参数,请参见 blackbox-exporter。
apiVersion: v1 kind: Service metadata: name: service-blackbox # 服务的名称 namespace: volcano-metrics # 服务的命名空间 spec: selector: app: blackbox # 通过标签选择器将服务与后端容器组(Pod)绑定 ports: - name: rule # 服务端口映射规则名称 protocol: TCP # 服务协议,支持 TCP 或 UDP port: 9115 # 服务端口号 targetPort: 9115 # 容器端口号 type: ClusterIP # 服务的类型
apiVersion: monitoring.coreos.com/v1 kind: Probe metadata: name: http-probe-example # 配置服务发现的名称 namespace: volcano-metrics # 配置服务发现所在的命名空间 labels: volcengine.vmp: "true" # 配置 Probe 的标签,允许被 Prometheus-agent 发现 spec: jobName: http-example # 配置任务名称 prober: url: service-blackbox.volcano-metrics.svc.cluster.local:9115 # 通过域名指定 blackbox-exporter 的服务地址 module: http_2xx # 配置探测任务使用的预定义模块 targets: # 配置采集目标,这里使用了静态配置。在实际使用中,也支持其他配置,例如 Kubernetes 服务发现功能 staticConfig: static: - www.volcengine.com # 配置采集对象,本例中以配置静态对象为例
kubectl port-forward service/grafana 3000:3000 -n volcano-metrics
admin
密码admin
登录。说明
您也可以使用托管 Prometheus 的 Explore 功能,直接查询probe
开头的指标。详情请参见 指标查询。
当您发现 blackbox-exporter 采集的数据有问题,或者组件状态不正常时,可以采取以下方式,直接查看 blackbox-exporter 采集到的数据,或进行 Debug 处理。具体的步骤如下:
blackbox-84d7xxxx
为组件实例名称。kubectl port-forward pod/blackbox-84d7xxxx 9115:9115 -n volcano-metrics
target
字段为您探测的目标。module
字段为您使用的检测模块。debug=true
表示开启 Debug。您可以看到 blackbox-exporter 组件的配置信息、采集指标、组件日志等信息。curl -s "localhost:9115/probe?target=https://www.volcengine.com&module=http_2xx&debug=true"