使用 CRD 自定义集合(服务和 Pod 监视器)
启用托管 Prometheus 会自动为 Pod 监视器和服务监视器部署自定义资源定义 (CRD)。 这些自定义资源定义与 Prometheus 的 OSS Pod 监视器和 OSS 服务监视器的自定义资源定义 (CRD) 相同,只是组名称有变化。 如果你的群集上存在现有的 Prometheus CRD 和自定义资源,则这些 CRD 不会与加载项创建的 CRD 冲突。 同时,托管 Prometheus 加载项不会拾取针对 OSS Prometheus 创建的 CRD。 这种分离是有意而为的,目的是隔离抓取作业。
注意
目前不支持已启用 Azure ARC 的 Kubernetes 中的自定义资源定义 (CRD)。
创建 Pod 或服务监视器
使用 Pod 和服务监视器模板并遵循 API 规范来创建自定义资源(Pod 监视器和服务监视器)。 请注意,要使托管 Prometheus 能够拾取现有的 OSS CR(自定义资源),只需对 API 组进行更改 - azmonitoring.coreos.com/v1。
注意 - 请务必使用模板中指定的 labelLimit、labelNameLengthLimit 和 labelValueLengthLimit,以避免在处理过程中将它们删除。
Pod 和服务监视器如以下示例所示:
Pod 监视器示例
# Note the API version is azmonitoring.coreos.com/v1 instead of monitoring.coreos.com/v1
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
# Can be deployed in any namespace
metadata:
name: reference-app
namespace: app-namespace
spec:
labelLimit: 63
labelNameLengthLimit: 511
labelValueLengthLimit: 1023
# The selector specifies which pods to filter for
selector:
# Filter by pod labels
matchLabels:
environment: test
matchExpressions:
- key: app
operator: In
values: [app-frontend, app-backend]
# [Optional] Filter by pod namespace
namespaceSelector:
matchNames: [app-frontend, app-backend]
# [Optional] Labels on the pod with these keys will be added as labels to each metric scraped
podTargetLabels: [app, region, environment]
# Multiple pod endpoints can be specified. Port requires a named port.
podMetricsEndpoints:
- port: metrics
服务监视器示例
# Note the API version is azmonitoring.coreos.com/v1 instead of monitoring.coreos.com/v1
apiVersion: azmonitoring.coreos.com/v1
kind: ServiceMonitor
# Can be deployed in any namespace
metadata:
name: reference-app
namespace: app-namespace
spec:
labelLimit: 63
labelNameLengthLimit: 511
labelValueLengthLimit: 1023
# The selector filters endpoints by service labels.
selector:
matchLabels:
app: reference-app
# Multiple endpoints can be specified. Port requires a named port.
endpoints:
- port: metrics
部署 Pod 或服务监视器
然后,可以使用 kubectl apply 部署 Pod 或服务监视器。
应用后,自定义资源中的任何错误都会显示出来,并且 Pod 或服务监视器应该无法应用。
成功创建 Pod 监视器后,会返回如下所示的结果 -
podmonitor.azmonitoring.coreos.com/my-pod-monitor created
示例
创建一个简单的应用程序
部署一个示例应用程序,用于公开 Pod/服务监视器所要配置的 Prometheus 指标。
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/internal/referenceapp/prometheus-reference-app.yaml
创建 Pod 监视器和/或服务监视器以抓取指标
部署一个 Pod 监视器,该监视器配置为从上一步骤所述的示例应用程序中抓取指标。
Pod 监视器
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/otelcollector/deploy/example-custom-resources/pod-monitor/pod-monitor-reference-app.yaml
服务监视器
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml
故障排除
成功应用 Pod 或服务监视器后,加载项应自动开始从目标收集指标。 若要确认这一点,请按照此处的说明对自定义资源进行一般性的故障排除,并确保目标显示在 127.0.0.1/targets 中。