观测云-k8s可观测之多团队数据空间隔离

背景

通常情况下单个K8S 集群不是单一的团队在使用,可观测数据采集后,将数据上报到云端就有数据隔离的需求。

传统模式

在一个k8s集群中,每个node节点下部署datakit探针,探针配置的是观测云同一个工作空间的token,最终4个node 节点的所有数据都会汇聚到观测云的一个空间中

dataway-sinker 分流模式

在dataway分流模式下,部署在node节点上的datakit配置的是token不再是观测云工作空间的token,而是dataway-sinker网关下发的token。dataway-sinker需要配置分流规则,datakit上报数据如果命中分流规则,就会打到对应的工作空间。 如此,即实现了同一个K8S集群的数据分流到不同工作空间的需求。

配置

dataway

本文主要说明dataway在K8S环境部署情况。 环境变量设置dataway-token 和 sinker规则

yaml 复制代码
- name: DW_SECRET_TOKEN 
  value: "tkn_zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" 
- name: DW_SINKER_FILE_PATH 
  value: "/usr/local/cloudcare/dataflux/dataway/sinker.json"

singker规则 configMap 配置,省略不变配置。

yaml 复制代码
        volumeMounts:
          - mountPath: /usr/local/cloudcare/dataflux/dataway/sinker.json
            name: sinker
            subPath: sinker.json
`
`
`
      volumes:
      - configMap:
          name: sinker
        name: sinker
`
`
`
apiVersion: v1
kind: ConfigMap
metadata:
  name: sinker
  namespace: utils
data:
  sinker.json: |
    {
        "strict":true,
        "rules": [
            {
                "rules": [
                    "{ project = 'xxxxx'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            },
            {
                "rules": [
                    "{ project = 'xxxxx'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
            }
         ]
    }

configMap中的token为实际工作空间的token值。

sinker规则支持正则,具体规则参考: docs.guance.com/datakit/dat...

可以使用etcd 代替configmap,环境变量配置参考:docs.guance.com/deployment/...

etcd使用命令写入sinker规则: docs.guance.com/deployment/...

datakit

开启分流模式,需要注意修改三个部分

  1. 上报的token地址改为dataway配置的DW_SECRET_TOKEN
  2. 开启分流配置
  3. 设置分流的标识。

Datakit 设置的全局标签和全局选举标签将会默认作为分流的标识

分流标识支持设置数据标签, 如指标的tag,日志tag,链路数据tag数据等,也支持按照数据类型进行分流,如配置GLOBAL_CUSTOMER_KEYS 为 category ,则可以按照tracing、logging 等整个类型数据进行分流。

分流标志仅支持字符串类型数据。

datakit 环境变量配置

yaml 复制代码
- name: ENV_DATAWAY
  value: http://dataway.com?token=this_dataway_dw_secret_token
- name: ENV_DATAWAY_ENABLE_SINKER
  value: "true" 
- name: ENV_SINKER_GLOBAL_CUSTOMER_KEYS
  value: namespace,project

主机datakit.conf 配置修改

ini 复制代码
# /usr/local/datakit/conf.d/datakit.conf
[dataway]

  # 指定一组 customer key
  global_customer_keys = [
    # 示例:添加 category 和 class 俩个 key
    # 此处不宜配置太多 key,一般 2 ~ 3 个即可
    "category",
    "class",
  ]

  # 开启 sinker 功能
  enable_sinker = true

最佳实践

按照命名空间进行分流

通常情况下,不同命名空间下会有不同的业务存在

datakit中配置

yaml 复制代码
- name: ENV_GLOBAL_HOST_TAGS
  value: host=__datakit_hostname,host_ip=__datakit_ip,namespace=non_namespace_data
- name: ENV_GLOBAL_ELECTION_TAGS
  value: namespace=non_namespace_data 
- name: ENV_SINKER_GLOBAL_CUSTOMER_KEYS
  value: namespace

sinker规则配置

yaml 复制代码
 {
        "strict":true,
        "rules": [
            {
                "rules": [
                    "{ namespace = 'xxxxx'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            },
            {
                "rules": [
                    "{ namespace = 'non_namespace_data'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
            }
         ]
    }

配置讲解

datakit采集的所有K8S数据会附加namespace标签,默认会覆盖全局标签中的"namespace=non_namespace_data",如k8s指标、命名空间下的应用日志、命名空间下的链路数据会按照对应的sinker规则上报到不同的工作空间。

主机数据默认是不会包含namespace标签的,如node节点的cpu指标。这时候全局标签中的"namespace=non_namespace_data"就起了对应的作用,会给原本不带namespace的数据附带上"namespace=non_namespace_data",可以把未进行分流的数据,统一打到一个工作空间里,这些数据通常是node节点的对象数据、指标数据等。

按照自定义tag进行分流

特殊情况下,相同命名空间下,也会有不同业务属性的数据,这时候就需要按照自定义标签来进行分流,比如使用自定义project_id标签进行分流。

datakit中配置

yaml 复制代码
- name: ENV_GLOBAL_HOST_TAGS
  value: host=__datakit_hostname,host_ip=__datakit_ip,project_id=000000
- name: ENV_GLOBAL_ELECTION_TAGS
  value: project_id=000000 
- name: ENV_SINKER_GLOBAL_CUSTOMER_KEYS
  value: namespace

sinker规则配置

yaml 复制代码
 {
        "strict":true,
        "rules": [
            {
                "rules": [
                    "{ project_id = 'xxxxx'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            },
            {
                "rules": [
                    "{ project_id = '000000'}"
                ],
                "url": "http://kodo.forethought-kodo:9527?token=tkn_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
            }
         ]
    }

数据上报原理和namespace一致,不再赘述

标签配置方式

k8s指标

DK需要开启label转tag功能,环境变量配置如下

yaml 复制代码
- name: ENV_INPUT_CONTAINER_EXTRACT_K8S_LABEL_AS_TAGS_V2_FOR_METRIC
  value: '["project_id"]'
- name: ENV_INPUT_CONTAINER_EXTRACT_K8S_LABEL_AS_TAGS_V2
  value: '["project_id"]'

注意: 需要在deployment、pod、service 等数据上附加对应的label,添加后才可以进行label转tag。

容器日志

以stdout 为例,为被采集的日志添加project_id 标签

yaml 复制代码
      annotations:
        ## 添加配置,且指定容器为 log-output
        datakit/log-output.logs: |
          [{
              "disable": false,
              "source":  "log-output-source",
              "service": "log-output-service",
              "multiline_match": "^\d{4}",
              "tags" : {
                "project_id": "xxxx"
              }
          }]

链路数据

通过operator注入环境变量,获取pod labels,加到APM Tags 环境变量中。

bash 复制代码
"PROJECT_ID":    "{fieldRef:metadata.labels['project_id']}",
"POD_NAME":                "{fieldRef:metadata.name}",
"POD_NAMESPACE":           "{fieldRef:metadata.namespace}",
"DD_TAGS":  "pod_name:$(POD_NAME),namespace:$(POD_NAMESPACE),host:$(NODE_NAME),project_id:$(PROJECT_ID)"

至此, 我们需要的数据已经全部打上了对应的数据标签,数据会按照project_id的sinker规则打到对应的空间中去

相关推荐
YJlio1 天前
OpenClaw v2026.4.8 更新解析:扩展加载修复、通道配置优化、Slack 代理支持与升级避坑
gateway·自动化运维·版本更新·ai agent·openclaw·slack·插件兼容
YJlio1 天前
OpenClaw v2026.4.20 版本更新了哪些内容?深度解析
人工智能·开源项目·自动化运维·版本更新·ai agent·openclaw·kimi k2.6
YJlio1 天前
OpenClaw v2026.4.21 版本更新了哪些内容?图像生成、安全权限、插件修复与日志回退深度解析
人工智能·开源项目·自动化运维·版本更新·ai agent·openclaw·gpt-image-2
YJlio1 天前
OpenClaw v2026.4.23 更新了哪些内容?图像生成、鉴权路由、媒体持久化与排障修复深度解析
人工智能·开源项目·自动化运维·版本更新·ai agent·openclaw·gpt-image-2
YJlio2 天前
OpenClaw v2026.4.9 更新解析:Memory Dreaming、Control UI、安全修复、插件依赖与升级避坑
gateway·memory·自动化运维·版本更新·ai agent·openclaw·dreaming
YJlio2 天前
OpenClaw v2026.4.11 更新解析:Dreaming 导入、结构化 WebChat、视频生成增强、Ollama 缓存与升级避坑
自动化运维·视频生成·版本更新·ai agent·openclaw·dreaming·memory-wiki
YJlio2 天前
OpenClaw v2026.4.5 更新解析:视频/音乐生成、ComfyUI 工作流、多语言控制台、Memory Dreaming 与升级避坑
memory·自动化运维·comfyui·视频生成·版本更新·ai agent·openclaw
YJlio3 天前
OpenClaw v2026.3.23-2 更新解析:Qwen 接入、Knot 主题、插件稳定性、升级验证与避坑清单
自动化运维·qwen·版本更新·ai agent·插件系统·openclaw·clawhub
YJlio3 天前
OpenClaw v2026.3.28 更新解析:Qwen 认证迁移、xAI Responses API、MiniMax 图像生成、插件审批与升级避坑
自动化运维·qwen·版本更新·ai agent·插件系统·xai·openclaw
YJlio3 天前
OpenClaw v2026.3.24 更新解析:Gateway 兼容、Teams SDK、Slack 交互、容器命令与升级避坑
windows·自动化运维·版本更新·ai agent·teams·openclaw·gateway slack