当您在容器服务集群接入托管 Prometheus 后,允许通过 Probe 来满足集群和应用的黑盒监控需求。本文为您介绍如何通过 Probe 来配置黑盒监控。
背景信息
在标准的 Kubernetes 集群中,我们可以通过配置 ServiceMonitor 或 PodMonitor 进行服务发现,对集群内的资源或服务进行监控,例如:监控主机的资源用量、容器的运行状态、数据库中间件的运行数据等等。这些都是支持业务和服务的基础设施,通过监控其暴露的相关指标,能够了解其内部的实际运行状态,预判可能出现的问题,从而对潜在的不确定因素进行优化。这种通过直接观测应用内部指标的监控方法,也被称之为 白盒监控。
除了白盒监控以外,实际中还经常使用 黑盒监控(Blackbox) 对服务进行监控。所谓黑盒监控,即以用户的视角测试和监控服务的外部可见性,常见的黑盒监控包括 HTTP 探针、TCP 探针、DNS 探针、ICMP 探针、gRPC 探针等,可以用于检测站点或者服务的可访问性,以及访问效率等。例如:
- HTTP 探测:HTTP 服务有效性监控、SSL 证书有效期等。
-
说明
Blackbox Exporter 是 Prometheus 社区提供的官方黑盒监控解决方案,其允许用户通过 HTTP、HTTPS、DNS、TCP、ICMP 以及 gRPC 等方式对网络和应用进行探测和监控。详情请参见 官方文档 黑盒监控与白盒监控的主要区别和应用场景为:
- 黑盒监控: 用户视角,以故障为导向,侧重监控应用的外部服务是否正常。当故障发生时,黑盒监控能快速发现故障。
- 白盒监控: 应用视角,侧重监控应用的内部运行情况,并以此预测潜在的问题。
-
说明
一个典型的、完善的监控链路,需要白盒监控和黑盒监控共同完成。即从白盒监控的角度发现潜在问题,从黑盒监控的角度快速发现已经发生的问题。
前提条件
- 已创建托管 Prometheus 工作区,详情请参见 创建工作区。
- 集群已接入托管 Prometheus,详情请参见 容器服务接入。
- 如果您需要监控集群外部的服务,需要开启 blackbox-exporter 组件所在集群的 公网访问 功能,详情请参见 容器服务 FAQ。
配置方式
- 在左侧导航栏中选择 接入中心 > 组件,单击 健康巡检(Blackbox),配置接入任务。
-
- 配置采集器的部署环境。选择 VKE 环境,并选择关联集群。
-
-
选择 效果预览 页签,支持查看监控大盘示例。单击 获取 Grafana 模版,即可下载 JSON 格式的 Grafana 监控大盘模版。
选择 采集指标 页签,即可查看采集目标的指标列表。
步骤一:创建 Probe CRD 资源
如果您的集群中不存在 Probe CRD 资源,您需要在本地环境中连接集群,执行以下命令,在集群中创建 Probe CRD 资源。
kubectl apply -f https://vmp-release-cn-beijing.tos-cn-beijing.volces.com/manifests/crds/promopeartor-crd-probes.yaml
说明
- 如果您的集群所在地域不为 华北2(北京),则您需要将上述命令中的 cn-beijing 字段修改为对应地域的 RegionID。例如:华东2(上海)地域的集群,部署命令为 kubectl apply -f https://vmp-release-cn-shanghai.tos-cn-shanghai.volces.com/manifests/crds/promopeartor-crd-probes.yaml。地域的 RegionID 详情请参见 地域和可用区。
步骤二:使用 ConfigMap 管理 blackbox-exporter 配置
- 在集群管理页面的左侧导航栏中,选择 配置 > 配置项,单击 使用 Yaml 创建,创建配置项。
namespace: volcano-metrics
## ------------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 监测模块配置------------
Content-Type: application/json ## 定义 HTTP 报文头
body: '{}' ## 定义 HTTP 报文 body 内容
## ------------TCP 检测模块配置------------
## ------------ICMP 检测模块配置------------
## ------------DNS 检测模块配置------------
query_name: "www.example.com"
说明
上述配置项仅为示例,只定义了http_2xx、http_post_2xx、tcp_connect、icmp和dns几个探测模块。如果您有其他协议的探测需求,需要添加对应的探测模块配置。详情请参见 官方文档。 步骤三:部署 blackbox-exporter
- 在左侧菜单栏中选择 工作负载 > 无状态负载。单击 使用 Yaml 创建,部署 blackbox-exporter。
namespace: volcano-metrics
- image: prom/blackbox-exporter:latest
- --config.file=/etc/blackbox_exporter/blackbox.yml
mountPath: /etc/blackbox_exporter
- 在左侧菜单栏中选择 服务与路由 > 服务。单击 使用 Yaml 创建 ,创建服务。
namespace: volcano-metrics
步骤四:配置服务发现
- 在左侧菜单栏中选择 工作负载 > 对象浏览器。单击 使用 Yaml 创建 ,配置服务发现。
apiVersion: monitoring.coreos.com/v1
name: http-probe-example
namespace: volcano-metrics
url: service-blackbox.volcano-metrics.svc.cluster.local:9115
结果验证
配置完成后,您可以查看任务状态和任务详情。确定接入任务是否正常。
- 选择 VKE 环境 页签。在任务列表中,可以查看接入任务的状态。
接入任务创建完成后,支持以下运维操作:
- 单击 任务名称,进入任务详情页面,支持查看接入任务详情。
- 单击 操作 列的 编辑,支持编辑指定的接入任务。
- 单击 操作 列的 暂停任务,支持暂停指定的接入任务。
- 单击 操作 列的 删除,支持删除指定的接入任务。
在左侧导航栏中选择 Explore,可以使用up查看接入任务中采集 Job 的状态。本例中为up{job="blackbox_demo"}。当该指标的值为 1 时,表示采集器已创建完成并工作正常。
您可以使用托管 Prometheus 的 Explore 功能来快速查询和展示指标数据。详情请参见 指标查询。
您可以在容器服务集群或 ECS 主机中自建 Grafana,并通过 Grafana 查看指标和创建大盘。
您可以在托管 Prometheus 的告警中心配置实例的相关告警。详情请参见 创建告警规则。 常见问题
如何对 blackbox-exporter 进行调试和 Debug?
当您发现 blackbox-exporter 采集的数据有问题,或者组件状态不正常时,可以采取以下方式,直接查看 blackbox-exporter 采集到的数据,或进行 Debug 处理。具体的步骤如下:
- 在本地环境中通过 kubectl 连接集群,执行以下命令,配置 blackbox-exporter 组件实例的端口映射。其中blackbox-84d7xxxx为组件实例名称。
kubectl port-forward pod/blackbox-84d7xxxx 9115:9115 -n volcano-metrics
- 执行以下命令,查看 blackbox-exporter 组件的数据和 Debug 信息。其中:
- debug=true表示开启 Debug。您可以看到 blackbox-exporter 组件的配置信息、采集指标、组件日志等信息。
curl -s "localhost:9115/probe?target=https://www.volcengine.com&module=http_2xx&debug=true"