为 Monitoring Stack 配置指标

OpenTelemetry Collector 可以与平台 Monitoring Stack 集成,通过 Prometheus 暴露其自身的运行指标。作为集群管理员,你可以设置此集成以实现以下目标:

  • 自动生成 Prometheus ServiceMonitor 资源,用于抓取 Collector 的内部 pipeline 指标以及任何已配置的 Prometheus exporter 端点。
  • 使用 Collector 内部的 Prometheus receiver,从集群内置的监控基础设施中拉取指标。

向 Monitoring Stack 发送指标

OpenTelemetryCollector 自定义资源(CR)支持自动创建 Prometheus ServiceMonitorPodMonitor 资源。这些资源会指示 Monitoring Stack 从 Collector 的内部 telemetry 端点以及 pipeline 中定义的任何 Prometheus exporter 端点收集指标。

启用自动创建 ServiceMonitor

当你在 Collector CR 中启用 enableMetrics 选项时,Alauda 版本的 OpenTelemetry v2 Operator 会自动提供所需的 ServiceMonitorPodMonitor 资源,用于指标收集。

以下示例展示了一个已配置 Prometheus exporter 并启用自动指标收集的 Collector CR:

apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
  labels:
    prometheus: kube-prometheus
spec:
  mode: deployment
  replicas: 1
  observability:
    metrics:
      enableMetrics: true
  config:
    exporters:
      prometheus:
        endpoint: 0.0.0.0:8889
        resource_to_telemetry_conversion:
          enabled: true # by default resource attributes are dropped
    service:
      telemetry:
        metrics:
          readers:
          - pull:
              exporter:
                prometheus:
                  host: 0.0.0.0
                  port: 8888
      pipelines:
        metrics:
          exporters: [prometheus]
  1. 在 ACP prometheus 中需要 prometheus=kube-prometheus
  2. 允许 Operator 自动创建 ServiceMonitorPodMonitor 资源,以目标为 Collector 的指标端点,包括内部 telemetry 和 Prometheus exporter 端口。
NOTE

启用 enableMetrics 后会创建两个独立的 ServiceMonitor 资源:

  • 一个 ServiceMonitor 目标是 <instance_name>-collector-monitoring 服务,用于收集 Collector 自身的内部运行指标。
  • 另一个 ServiceMonitor 目标是 <instance_name>-collector 服务,用于收集在 pipeline 中配置的任何 Prometheus exporter 发布的指标。
WARNING

Collector 的内部指标不再携带 service_nameservice_instance_idservice_version 标签;这些身份信息改为通过 target_info 指标发布。按这些标签进行分组或筛选的查询必须与 target_info 进行 join。请参见 识别生成指标的 Collector

使用自定义 PodMonitor

对于需要更细粒度控制指标收集的场景——例如过滤掉 Prometheus 抓取过程中引入的重复标签——你可以手动创建 PodMonitor 资源,而不是依赖自动的 ServiceMonitor 提供。

以下示例展示了一个目标为 Collector pod 的 PodMonitor,并应用 relabeling 规则来删除冗余标签:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    prometheus: kube-prometheus
  name: otel-collector
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: <cr_name>-collector
  podMetricsEndpoints:
  - port: metrics
  - port: promexporter
    relabelings:
    - action: labeldrop
      regex: pod
    - action: labeldrop
      regex: container
    - action: labeldrop
      regex: endpoint
    metricRelabelings:
    - action: labeldrop
      regex: instance
    - action: labeldrop
      regex: job
  1. 在 ACP prometheus 中需要 prometheus=kube-prometheus
  2. 必须与 OpenTelemetry Collector CR 的名称匹配,遵循 <cr_name>-collector 模式。
  3. 暴露 Collector 内部运行指标的端口。该端口始终命名为 metrics
  4. 暴露 Collector pipeline 中配置的 Prometheus exporter 指标的端口。