Prometheus Operator 中运行 Exporters 的完整指南

Prometheus Operator 中运行 Exporters 的完整指南

prometheus-operator 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 中的核心概念之一,它的主要目标是:

  1. 通过一个 ServiceMonitor 覆盖大量 Service 的监控需求
  2. 提供灵活的标签选择机制来筛选需要监控的服务
  3. 简化监控配置的管理

创建服务暴露 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-systemmonitoring 两个命名空间
  • 每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)

标签重写是在指标被采集前对目标标签集进行动态改写的强大功能。

常见使用场景:

  1. 删除标签
- action: labeldrop
  regex: pod
  1. 添加/替换标签
- action: replace
  replacement: prometheus
  targetLabel: team
  1. 基于标签过滤目标
- 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)

指标重写是在指标被存储前对样本进行处理的最后一步。

常见使用场景:

  1. 删除特定指标
metricRelabelings:
- sourceLabels:
  - __name__
  regex: container_tasks_state
  action: drop
  1. 删除特定时间序列
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。

最佳实践建议

  1. 标签设计:为你的服务和 Pod 设计一致的标签策略,便于 ServiceMonitor 选择
  2. 命名规范:为 ServiceMonitor 使用有意义的名称,反映其监控范围
  3. 监控间隔:根据指标重要性设置合理的采集间隔
  4. 跨命名空间监控:合理利用 serviceMonitorNamespaceSelector 实现跨命名空间监控
  5. 指标过滤:使用 metricRelabelings 减少不必要的指标存储

通过本文的介绍,你应该已经掌握了在 Prometheus Operator 环境中运行 exporters 并进行监控配置的核心方法。合理运用这些功能,可以构建出高效、灵活的云原生监控体系。

prometheus-operator prometheus-operator 项目地址: https://gitcode.com/gh_mirrors/pro/prometheus-operator

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邴坤鸿Jewel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值