Prometheus Operator 中运行 Exporters 的完整指南
prometheus-operator 项目地址: https://gitcode.com/gh_mirrors/pro/prometheus-operator
前言
在现代云原生监控体系中,Prometheus Operator 是一个非常重要的组件,它简化了 Prometheus 在 Kubernetes 环境中的部署和管理。本文将深入探讨如何在 Prometheus Operator 环境中运行 exporters 并配置监控。
版本兼容性说明
从 v0.39.0 版本开始,Prometheus Operator 要求 Kubernetes 版本必须为 v1.16.x 或更高版本。这是使用前需要特别注意的兼容性问题。
ServiceMonitor 的核心作用
ServiceMonitor 是 Prometheus Operator 中的核心概念之一,它的主要目标是:
- 通过一个 ServiceMonitor 覆盖大量 Service 的监控需求
- 提供灵活的标签选择机制来筛选需要监控的服务
- 简化监控配置的管理
创建服务暴露 Pod 指标
要监控 exporter 或应用程序的独立指标端口,首先需要创建一个 Service 来指向这些 Pod。
kube-state-metrics 服务示例
以下是一个典型的 kube-state-metrics 服务配置:
apiVersion: v1
kind: Service
metadata:
labels:
app: kube-state-metrics
k8s-app: kube-state-metrics
annotations:
alpha.monitoring.coreos.com/non-namespaced: "true"
name: kube-state-metrics
spec:
ports:
- name: http-metrics
port: 8080
targetPort: metrics
protocol: TCP
selector:
k8s-app: kube-state-metrics
这个 Service 会选中所有带有 k8s-app: kube-state-metrics
标签的 Pod。
通用 ServiceMonitor 示例
下面是一个通用的 ServiceMonitor 配置,它可以监控多个命名空间中的服务:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: k8s-apps-http
labels:
k8s-apps: http
spec:
jobLabel: k8s-app
selector:
matchExpressions:
- {key: k8s-app, operator: Exists}
namespaceSelector:
matchNames:
- kube-system
- monitoring
endpoints:
- port: http-metrics
interval: 15s
这个配置会:
- 监控所有带有
k8s-app
标签的服务 - 覆盖
kube-system
和monitoring
两个命名空间 - 每15秒采集一次指标
默认标签解析
Prometheus Operator 会自动为采集的指标添加一些元数据标签,了解这些标签对于后续的查询和告警配置非常重要。
PodMonitor 默认标签
| 目标标签 | 来源标签 | 描述 | |----------|----------------------------------|---------------------------------------------------------------------| | instance | __param_target | 被采集目标的地址 | | job | - | PodMonitor 的命名空间/名称,或如果指定了 jobLabel 则使用该值 | | namespace| __meta_kubernetes_namespace | 被采集 Pod 的命名空间 | | container| __meta_kubernetes_pod_container_name | 被采集 Pod 中容器的名称 | | pod | __meta_kubernetes_pod_name | 被采集 Pod 的名称 | | endpoint | - | 指定的端口或目标端口 |
ServiceMonitor 默认标签
| 目标标签 | 来源标签 | 描述 | |----------|----------------------------------|---------------------------------------------------------------------| | instance | __param_target | 被采集目标的地址 | | job | - | 被采集服务的名称,或如果指定了 jobLabel 则使用该值 | | node/pod | - | 根据端点响应服务请求的情况设置 | | namespace| __meta_kubernetes_namespace | 被采集 Pod 的命名空间 | | service | | 被采集服务的名称 | | pod | __meta_kubernetes_pod_name | 被采集 Pod 的名称 | | container| __meta_kubernetes_pod_container_name | 被采集 Pod 中容器的名称 | | endpoint | - | 指定的端口或目标端口 |
标签重写与指标重写
Prometheus Operator 提供了强大的标签重写功能,可以在采集前动态修改目标标签,或在指标被存储前修改指标标签。
标签重写(Relabeling)
标签重写是在指标被采集前对目标标签集进行动态改写的强大功能。
常见使用场景:
- 删除标签
- action: labeldrop
regex: pod
- 添加/替换标签
- action: replace
replacement: prometheus
targetLabel: team
- 基于标签过滤目标
- sourceLabels:
- __meta_kubernetes_pod_label_team
regex: "prometheus"
action: keep
- sourceLabels:
- __meta_kubernetes_pod_label_datacenter
regex: west_europe
action: drop
完整示例:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web
relabelings:
- sourceLabels:
- __meta_kubernetes_pod_label_team
regex: "prometheus"
action: keep
- sourceLabels:
- __meta_kubernetes_pod_label_datacenter
regex: west_europe
action: drop
指标重写(Metric Relabeling)
指标重写是在指标被存储前对样本进行处理的最后一步。
常见使用场景:
- 删除特定指标
metricRelabelings:
- sourceLabels:
- __name__
regex: container_tasks_state
action: drop
- 删除特定时间序列
metricRelabelings:
- sourceLabels:
- id
regex: '/system.slice/var-lib-docker-containers.*-shm.mount'
action: drop
完整示例:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: example-app
labels:
team: frontend
spec:
selector:
matchLabels:
app: example-app
endpoints:
- port: web
metricRelabelings:
- sourceLabels:
- id
regex: '/system.slice/var-lib-docker-containers.*-shm.mount'
action: drop
常见问题排查
命名空间限制注意事项
在 Prometheus Operator v0.19.0 之前,ServiceMonitor 必须与 Prometheus 资源安装在同一个命名空间中。从 v0.19.0 版本开始,可以通过 Prometheus 资源中的 serviceMonitorNamespaceSelector
字段选择其他命名空间中的 ServiceMonitor。
最佳实践建议
- 标签设计:为你的服务和 Pod 设计一致的标签策略,便于 ServiceMonitor 选择
- 命名规范:为 ServiceMonitor 使用有意义的名称,反映其监控范围
- 监控间隔:根据指标重要性设置合理的采集间隔
- 跨命名空间监控:合理利用
serviceMonitorNamespaceSelector
实现跨命名空间监控 - 指标过滤:使用 metricRelabelings 减少不必要的指标存储
通过本文的介绍,你应该已经掌握了在 Prometheus Operator 环境中运行 exporters 并进行监控配置的核心方法。合理运用这些功能,可以构建出高效、灵活的云原生监控体系。
prometheus-operator 项目地址: https://gitcode.com/gh_mirrors/pro/prometheus-operator
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考