为监控栈配置指标

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

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

将指标发送到监控栈

OpenTelemetryCollector 自定义资源(CR)支持自动创建 Prometheus ServiceMonitorPodMonitor 资源。这些资源会指示监控栈从 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
                  without_scope_info: true
                  without_type_suffix: true
                  without_units: true
      pipelines:
        metrics:
          exporters: [prometheus]
  1. 在 ACP prometheus 中需要 prometheus=kube-prometheus
  2. 使 Operator 能够自动创建指向 Collector 指标端点的 ServiceMonitorPodMonitor 资源,包括内部 telemetry 和 Prometheus exporter 端口。
NOTE

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

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

使用自定义 PodMonitor

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

以下示例展示了一个 PodMonitor,它以 Collector pods 为目标,并应用 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 指标的端口。