Skip to main content

Command Palette

Search for a command to run...

Kubernetes + Blackbox 实现对 Web 和 DNS 的简单监控

Published
•2 min read•View as Markdown

其实都在这里了: https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

Prometheus 带有很多有针对性的 Exporter,能够对 MySQL、Apache 或者 ElasticSearch 等服务 器进行监控,另外还有 Blackbox Exporter 用于对 http dns tcp 等零散目标进行简单监控。

DNS 的监控

首先需要运行一个 Blackbox 的 Deployment,并利用 Configmap 来为 Blackbox 提供配置文件:

apiVersion: v1
data:
  config.yml: |
    modules:
      http_2xx:  # http 检测模块
        prober: http
        http:
      http_post_2xx: # http post 模块
        prober: http
        http:
          method: POST
      tcp_connect: # tcp 检测模块
        prober: tcp
      dns:  # dns 检测模块
        prober: dns
        dns:
          transport_protocol: "tcp"
          preferred_ip_protocol: "ip4"
          query_name: "kubernetes.default.svc.cloud.ctrm"  # 利用这个域名来检查 dns 服务器
          query_type: "A"  # 如果是 kube-dns ,一定要加入这个
kind: ConfigMap
metadata:
  name: blackbox
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: blackbox
spec:
  template:
    metadata:
      labels:
        name: blackbox
    spec:
      containers:
      - image: prom/blackbox-exporter:v0.8.1
        name: blackbox
        ports:
        - containerPort: 9115
        volumeMounts:
        - name: config
          mountPath: /etc/blackbox_exporter
        args:
        - --config.file=/etc/blackbox_exporter/config.yml # Configmap 中的配置文件
        - --log.level=error  # 错误级别控制
      volumes:
      - name: config
        configMap:
          name: blackbox
---
apiVersion: v1
kind: Service
metadata:
  name: blackbox
spec:
  selector:
    name: blackbox
  ports:
  - port: 80
    targetPort: 9115

使用 kubectl apply 命令运行起来。

接下来需要在 Prometheus 的配置文件中加入对 BlackBox 的抓取设置:

- job_name: "kubernetes-service-dns"
  metrics_path: /probe # 不是 metrics,是 probe
  params:
    module: [dns] # DNS 模块
  static_configs:
  - targets:
    - kube-dns:53 # 不要省略端口号
  relabel_configs:
  - source_labels: [__address__]
    target_label: __param_target
  - source_labels: [__param_target]
    target_label: instance
  - target_label: __address__
    replacement: blackbox # 服务地址,和上面的 Service 定义保持一致

重启 Prometheus,或者利用 curl Post 更新配置。打开 Prometheus 的 Target 页面,就会看到 上面定义的 kubernetes-service-dns 任务了,回到 Graph 页面,可以使用 probe_success{job="kubernetes-service-dns"} 来查看检测历史结果。

HTTP 监控

上面的配置文件中提到有一个 http_2xx 的模块,这里我们可以使用他对 http 服务进行检测。

这里主要是对不受我们控制的外部服务的快速检测。 内部的方法就丰富多了。

因为前面已经给 Blackbox 配置了 http_2xx 模块,所以这里只需要在 Prometheus 中加入抓取任务:

- job_name: "business-service-liveness"
  metrics_path: /probe
  params:
    module: [http_2xx]
  static_configs:
  - targets:
    - http://192.168.51.129:30001 # 要检查的网址
    - http://192.168.51.129:30004
    - http://192.168.51.129:30003
  relabel_configs:
  - source_labels: [__address__]
    target_label: __param_target
  - source_labels: [__param_target]
    target_label: instance
  - target_label: __address__
    replacement: blackbox-exporter:9115

同样的,重新载入之后,可以使用 probe_success 和 probe_duration_seconds 等来检查历史结果。

自带 metrics 端点的服务

有的服务,例如 prometheus 或者 blackbox,以及 kube-dns、etcd 等, 都是自有 /metrics 提供指标输出的,这种服务对 Blackbox + Prometheus 组合是非常方便的。

只要给服务的注解部分加入几个标签:

prometheus.io/host: calico-etcd # 服务名称
prometheus.io/port: "6666" # metrics 端口
prometheus.io/scrape: "true" # 抓取开关

上面是 calico 的 etcd 服务加入的注解,服务中有了上述注解之后,Prometheus 的示例配置中,已经 有了针对这一配置的监控方法,直接刷新 Target 页面,就会看到新的监控目标,可以进行使用了。而无需 为每个服务分别定制 Target。

https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml

More from this blog

AI Agent 的“莫兰迪时刻”

一个新范式真正走向大众,往往不是从所有人都正确理解它开始,而是从它开始被反复引用、简化、误读,甚至滥用开始。 今天的 AI Agent,可能正走到这样一个时刻。 这篇文章的念头,来自我最近收听《大内密谈》vol.1434《审美升级or消费主义?从莫兰迪在中国聊起》时的一些联想。节目从莫兰迪色在中国的走红,谈到作品价格、知识产权、商业流量与消费主义。[9] 我听着听着想到另一个熟悉的技术史问题:为

Oct 5, 20263 min read

FDE 是传统运维产品厂商的出路吗?

很多传统运维产品厂商,已经不缺产品了。 从 ITSM、CMDB、监控、自动化,到 IAM、数据中心管理和各类大屏,一个成熟厂商往往都能拿出一张很完整的产品地图。销售材料上看,客户运维部门的日常工作几乎都被覆盖了。 但项目一落地,味道就变了。 产品越多,集成越重;模块越全,边界越模糊;客户越大,定制越深。到了后期,项目成功本身也会变成麻烦:现场改出来的东西回不到主干,配置越来越像黑箱,谁都不敢轻易升

Jun 29, 20263 min read

绵里藏针才是 AIOps 的本质?

Agent 让运维编排变得柔性、可变、甚至自演进;但真正敢进入生产环境的 AIOps,仍然离不开坚实、受控、可审计、可回退的自动化底座。 从 Gartner 提出 AIOps 概念到现在,也大概有十年了。这么多年来,这个领域好像发生了很多变化,又好像没什么“本质”的变化。技术上,我们经历了传统机器学习、深度学习和神经网络、以及大模型和智能体这样“翻天覆地”的变化;业务上,我们面对的是更多品种、更大

May 31, 20263 min read

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read
【

【伪】架构师

346 posts