You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Otel Collector采集Kubernetes非内置CRD类资源?

使用OpenTelemetry Collector采集自定义K8s资源的实现方案

针对采集Operators、Helm Charts、CRD层级结构及CD配置这类非内置K8s资源的需求,可通过以下方案实现:

一、核心组件:Kubernetes API Server接收器

Otel Collector的kubeapiserver接收器是核心,它能直接从K8s API Server拉取任意资源(包括自定义CRD),配置时指定目标资源组、版本和名称即可。

基础配置示例

receivers:
  kubeapiserver:
    auth_type: "serviceAccount" # 基于集群内ServiceAccount认证
    api_config:
      insecure_skip_tls_verify: false
    resources:
      - namespaces: ["*"] # 采集所有命名空间资源,可指定特定命名空间
        resource_types:
          # 采集Operators关联CRD(以Cert-Manager为例)
          - group: "cert-manager.io"
            version: "v1"
            resources: ["certificates", "issuers"]
          # 采集Helm Release CRD(需提前安装Helm CRD组件)
          - group: "helm.sh"
            version: "v1"
            resources: ["releases"]
          # 采集CD工具CRD(以Argo CD为例)
          - group: "argoproj.io"
            version: "v1alpha1"
            resources: ["applications", "appprojects"]
          # 采集自定义CRD本身的层级结构定义
          - group: "apiextensions.k8s.io"
            version: "v1"
            resources: ["customresourcedefinitions"]

二、Helm Charts配置采集补充

若集群未部署Helm CRD,可通过采集Helm存储Release信息的Secret来获取配置:

  • Helm 3默认将Release元数据存储在对应命名空间的Secret中,标签为owner=helm,status=deployed
  • 扩展kubeapiserver接收器配置采集这类Secret:
receivers:
  kubeapiserver:
    resources:
      - namespaces: ["*"]
        resource_types:
          - group: ""
            version: "v1"
            resources: ["secrets"]
            label_selector: "owner=helm" # 过滤Helm相关Secret

后续可通过attributes处理器对Secret的data.release字段做base64解码,提取结构化的Helm配置。

三、数据处理与导出

1. 数据增强与过滤

使用attributes处理器添加标签、提取关键字段,方便后续分析:

processors:
  attributes:
    actions:
      - key: "resource_category"
        action: insert
        value: "{{if eq resource.group \"apiextensions.k8s.io\"}}crd_definition{{else}}custom_resource{{end}}"
      - key: "resource_namespace"
        action: insert
        value: "{{resource.metadata.namespace}}"

2. 数据导出

选择适配的导出器将数据发送到目标系统,示例配置:

exporters:
  # 导出到OTLP后端(如Jaeger、Prometheus OTEL Gateway)
  otlp:
    endpoint: "your-otlp-backend:4317"
    tls:
      insecure: false
  # 导出到本地文件做调试
  file:
    path: "./k8s-custom-resources.json"
    format: json

3. 完整流水线

将接收器、处理器、导出器组装成完整的采集流水线:

service:
  pipelines:
    metrics:
      receivers: [kubeapiserver]
      processors: [attributes]
      exporters: [otlp, file]

四、自定义扩展方案

如果默认接收器无法满足复杂解析需求(比如深度分析Helm模板依赖、CD配置关联关系),可采用两种方式扩展:

  • 自定义接收器:基于Otel Collector Go SDK开发,调用K8s API拉取资源后实现自定义解析逻辑
  • exec接收器:执行自定义脚本(Python/Shell)完成资源采集与解析,将输出转为Otel兼容格式后传入Collector

内容的提问来源于stack exchange,提问作者Guangya Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:44:52