Prometheus-Opeartor使用

发布于 2023-09-07  239 次阅读


Prometheus Operator 功能如下:

  • 创建/销毁:在 Kubernetes namespace 中更加容易地启动一个 Prometheues 实例,一个特定应用程序或者团队可以更容易使用 Operator。
  • 便捷配置:通过 Kubernetes CRD资源配置 Prometheus 的基本信息,比如版本、(分布式)存储、副本集、高可用等。
  • 通过标签标记目标服务: 基于常见的 Kubernetes label 查询自动生成监控目标配置;不需要学习 Prometheus 特定的配置语言。

它使用如下的 Kubernetes CRD 资源对 Prometheus进行配置:

  • Prometheus
  • Alertmanager
  • ThanosRuler
  • ServiceMonitor
  • PodMonitor
  • Probe
  • PrometheusRule
  • AlertmanagerConfig

ServiceMonitor

ServiceMonitor 自定义资源(CRD)能够声明如何监控一组动态服务的定义。它使用标签选择定义一组需要被监控的服务。这样就允许组织引入如何暴露 metrics 的规定,只要符合这些规定新服务就会被发现列入监控,而不需要重新配置系统。
一个 Service 可以公开一个或多个服务端口,通常情况下,这些端口由指向一个 Pod 的多个 Endpoints 支持。这也反映在各自的 Endpoints 对象中。
ServiceMonitorSpec 的 endpoints 部分用于配置需要收集 metrics 的 Endpoints 的端口和其他参数。在一些用例中会直接监控不在服务 endpoints 中的 pods 的端口。

例子

service.yaml
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus-service-monitor: "true"
  labels:   # servicemonitor 读取用
    app: heplify-server
    prometheus-service-monitor: "true"
  name: heplify-service
  namespace: devops
spec:
  ports:
  - name: heplify-monitor
    port: 9096
    protocol: TCP
    targetPort: 9096
  selector:
    app: heplify-server
  type: ClusterIP

servicemonitor.yml
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app.kubernetes.io/instance: heplify-server
  name: heplify-service
  namespace: devops
spec:
  endpoints:
  - port: heplify-monitor
  namespaceSelector:
    matchNames:
    - devops
  selector:
    matchLabels:
      app: heplify-server
      prometheus-service-monitor: "true"
  targetLabels:
  - cluster

为什么配置的ServiceMonitor或PodMonitor未生效?

排查步骤:

  • 确认Target是否已经被发现,找到目标Prometheus实例,然后在左侧导航栏单击服务发现,然后单击Targets页签,检查相应的Target是否已经被发现。
  • 查看集群CRD中是否存在相应的ServiceMonitor资源。 确认Label Selector是否能选择到期望的Pod或者Service 以上面那个例子为例。执行以下命令,观察返回结果,若无返回结果,则需要调整Label Selector或Namespace Selector,即可筛选出期望的Pod或者Service。
  • kubectl get service -l k8s-app=dev-yoyogodemo-kind-kind -n klns-administration

参考文档: