Kubernetes + Blackbox 实现对 Web 和 DNS 的简单监控
其实都在这里了: 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。