Prometheus CRD
介绍¶
本文档介绍如何让 DataKit 支持 Prometheus-Operator CRD 并采集对应指标。
描述¶
Prometheus 有一套完善的 Kubernetes 应用指标采集方案,流程简述如下:
- 在 Kubernetes 集群中创建 Prometheus-Operator
- 根据需求,创建对应的 CRD 实例,该实例必须携带采集目标指标的必要配置,例如
matchLabelsportpath等配置 - Prometheus-Operator 会监听 CRD 实例,并根据其配置项开启指标采集
在此处,DataKit 扮演了第 3 步的角色。DataKit 会监听和发现 Prometheus-Operator CRD,根据配置开启指标采集,并最终上传到观测云。创建、更新或删除 PodMonitor/ServiceMonitor 时,对应采集任务会动态增加、重建或停止,不需要重启 DataKit。
目前 DataKit 支持 Prometheus-Operator 的 monitoring.coreos.com/v1 版本 PodMonitor 和 ServiceMonitor,支持的主要配置如下:
- PodMonitor
- selector
- podTargetLabels
- podMetricsEndpoints:
- scheme
port
path
params
tlsConfig.insecureSkipVerify
- namespaceSelector:
any
matchNames
- ServiceMonitor
- selector
- targetLabels
- endpoints:
- scheme
port
path
params
tlsConfig.insecureSkipVerify
- namespaceSelector:
any
matchNames
注意:
- Monitor 中的
interval不控制实际采集间隔,采集间隔统一由 KubernetesPrometheus 采集器的scrape_interval控制。 tlsConfig仅支持insecureSkipVerify,不支持从 Kubernetes Secret/ConfigMap 获取证书。- 暂不支持
basicAuth、bearerTokenSecret、authorization等 Monitor 认证配置。 - ServiceMonitor 的
podTargetLabels暂不支持。
params 支持以 measurement 字段来指定数据的指标集,例如:
启用和授权¶
在 KubernetesPrometheus 采集器配置中按需开启 PodMonitor 和 ServiceMonitor 自动发现:
[inputs.kubernetesprometheus]
enable_discovery_of_prometheus_pod_monitors = true
enable_discovery_of_prometheus_service_monitors = true
DataKit 的 ServiceAccount 建议配置以下权限:
- apiGroups: ["monitoring.coreos.com"]
resources: ["podmonitors", "servicemonitors"]
verbs: ["get", "list", "watch"]
DataKit 使用 list 获取现有 Monitor,并使用 watch 接收创建、更新和删除事件。若升级 DataKit 时仍使用只包含 get、list 的旧版 RBAC,采集不会失败:DataKit 会打印一条 WARN 日志,并自动降级为每 20 秒执行一次 list。降级模式下配置变更最多延迟约 20 秒生效,建议更新 RBAC 以获得实时变更通知。
示例¶
以 Nacos 集群为例。
安装 Nacos:
$ git clone https://github.com/nacos-group/nacos-k8s.git
$ cd nacos-k8s
$ chmod +x quick-startup.sh
$ ./quick-startup.sh
nacos/nacos-quick-start.yaml 容器端口配置:
containers:
- name: k8snacos
imagePullPolicy: Always
image: nacos/nacos-server:latest
ports:
- containerPort: 8848
name: client
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
- metrics 接口:
$IP:8848/nacos/actuator/prometheus - metrics port:8848
现在在 Kubernetes 集群中存在一个 Nacos metrics 服务可以采集指标。
创建 Prometheus-Operator CRD¶
- 安装 Prometheus-Operator
$ wget https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.62.0/bundle.yaml
$ kubectl apply -f bundle.yaml
$ kubectl get crd
NAME CREATED AT
alertmanagerconfigs.monitoring.coreos.com 2022-08-11T03:15:57Z
alertmanagers.monitoring.coreos.com 2022-08-11T03:15:57Z
podmonitors.monitoring.coreos.com 2022-08-11T03:15:57Z
probes.monitoring.coreos.com 2022-08-11T03:15:57Z
prometheuses.monitoring.coreos.com 2022-08-11T03:15:57Z
servicemonitors.monitoring.coreos.com 2022-08-11T03:15:57Z
thanosrulers.monitoring.coreos.com 2022-08-11T03:15:57Z
- 创建 PodMonitor
$ cat pod-monitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: nacos
labels:
app: nacos
spec:
podMetricsEndpoints:
- port: client
path: /nacos/actuator/prometheus
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
app: nacos
$ kubectl apply -f pod-monitor.yaml
几个重要的配置项要和 Nacos 一致:
- namespace: default
- app:
nacos - port: client
- path:
/nacos/actuator/prometheus
PodMonitor 的完整字段定义参见 Prometheus Operator API 文档;DataKit 实际支持范围以前文列表为准。
指标集和 tags¶
验证¶
启动 DataKit,使用 datakit monitor -V 或在观测云页面上查看,能找到以 nacos_ 开头的指标集说明采集成功。