介绍
在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。
要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。
在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。
要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。
以下是如何使用PodMonitor和ServiceMonitor的步骤:
Prometheus Operator CRD IDEA智能提示
要在IntelliJ IDEA中导入Prometheus Operator CRD文件或URL并获得智能提示,您可以按照以下步骤操作:
- 在您的项目中创建一个文件夹用于存放Prometheus Operator CRD文件。
- 在该文件夹中创建一个新文件,并将其命名为“prometheus-operator-crd.yaml”。
- 打开您的Web浏览器,并导航到您的Prometheus Operator安装位置中的“/manifests”目录。例如,在Minikube上,您可以使用以下命令打开该目录:
1 | minikube ssh "ls /etc/kubernetes/manifests" |
- 在该目录中,找到与Prometheus Operator版本对应的CRD文件,并将其下载到您的计算机中。例如,在Minikube上,您可以使用以下命令将CRD文件从容器中复制到本地:
1 | kubectl get crd prometheuses.monitoring.coreos.com -o yaml > ~/prometheus-operator-crd.yaml |
- 将下载的CRD文件复制到刚刚创建的“prometheus-operator-crd.yaml”文件中。
- 打开IntelliJ IDEA,并导航到您的项目中的“prometheus-operator-crd.yaml”文件。
- 在该文件中,你应该能够看到智能提示和代码补全。
需要注意的是,如果您无法从Prometheus Operator安装位置中获取CRD文件,则可以在Prometheus Operator GitHub仓库中找到所有的CRD文件,并将其下载到本地。将下载的文件复制到您的项目中,并按照上述步骤进行操作。
创建PodMonitor
- 定义PodMonitor的YAML文件,例如:
1 | apiVersion: monitoring.coreos.com/v1 |
其中,selector
定义了要监控哪些Pod,podMetricsEndpoints
定义了如何连接到Pod的metrics端点。这里,我们使用了一个名为my-app
的标签来选择要监控的Pod,同时指定了metrics端点的名称和路径。
- 使用kubectl命令将PodMonitor文件部署到Kubernetes中:
1 | kubectl apply -f my-pod-monitor.yaml |
此时,Prometheus Operator会根据定义的PodMonitor自动创建相应的监控目标。
创建ServiceMonitor
相对pod monitor来说,service monitor作用范围更大
- 定义ServiceMonitor的YAML文件,例如:
1 | apiVersion: monitoring.coreos.com/v1 |
其中,selector
定义了要监控哪些Service,endpoints
定义了如何连接到Service的metrics端点。这里,我们使用了一个名为my-app
的标签来选择要监控的Service,同时指定了metrics端点的名称和路径。
- 使用kubectl命令将ServiceMonitor文件部署到Kubernetes中:
1 | kubectl apply -f my-service-monitor.yaml |
此时,Prometheus Operator会根据定义的ServiceMonitor自动创建相应的监控目标。
需要注意的是,PodMonitor和ServiceMonitor只是Prometheus Operator的一部分,如果Prometheus Operator没有正确配置,它们将无法正常工作。在使用PodMonitor和ServiceMonitor之前,请确保已正确安装和配置Prometheus Operator。
检查Prometheus Targets指标
它应该会展示如下指标信息

问题排查/文档参考
检查Prometheus - Target是否被发现
若Target未被发现【此时可能ServiceDiscovery中有】:
- 确认Label Selector是否能选择到期望的Pod或者Service
执行以下命令,观察返回结果,若无返回结果,则需要调整Label Selector或Namespace Selector,即可筛选出期望的Pod或者Service。
1 | 如果namespace selector中any设置为true。 |
- 检查端口设置
端口
port
字段,需要指定为pod
定义中spec.containers[i].ports[i].name
,或services
定义中spec.ports[i].name
字段的值。
若Target已经被发现,但显示为红色:
表示Prometheus抓取失败,这种情况通常是由于Target自身问题导致,此时提示的异常原因进行排查。

若Target已经被发现,且State列显示为UP,但期望的指标依然未被采集到:
可以访问对应Target的Endpoint超链接,系统会直接从Target拉取原始数据,然后需要确认原始数据中是否存在期望的指标。
参见:
文档参考:https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md