使用 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 中。

显示 Pod/服务监视器目标的屏幕截图

后续步骤