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
参考文档:
正文完