利用CMDB数据实现指标业务维度的动态扩展

作者:可观测性用观测云日期:2025/11/17

背景

很多客户已经建有 Prometheus/Zabbix 等采集方式,通常不会贸然替换 DataKit 进行直采,往往是通过 DataKit 去获取其它工具采集的结果。如 Prometheus remote write,Zabbix export 等。

为了增加不同数据类型的关联性,需要对已有的指标数据添加更多业务 TAG,如应用名,所属项目,部门等。为实现此类需求,需要能够获得原始的相关配置信息,如 CMDB 数据等。然后通过观测云 Pipeline 中的 refere_table() 方法实现关联数据并添加 TAG。

本文档基于客户方实际案例,介绍如何使用 reference table,以及在使用过程中的注意事项。

更多关于 refer_table 用法参考官网文档 Reference Table

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

实现原理

实践步骤

1. 新建 Func 脚本

1# 创建两个方法,一个用于pipeline获取json数据(get_reference_table),一个用于获取json数据并放入redis中。这样可以减少对原业务系统数据库的访问压力。
2@DFF.API('获取reference table')
3def get_reference_table():
4    # 从redis中获取已缓存的数据
5    earth = json.loads(DFF.CACHE.get('refer_tab_earth'))
6    return [earth]
7
8# 此处的earth平台是客户方集群管理系统。
9# 此案例中需根据Prometheus中的字段关联project,app信息。
10# 分页获取原始数据,组装reference table要求的数据结构,并将结果放入redis
11@DFF.API('缓存earth映射表')
12def get_earth_table():
13    db = DFF.CONN('mysql_earth')
14    # get project data
15    project_dict = {o['id']: o for o in db.query('select id,name,cmdb_app_id,cmdb_app from project')}
16    service_count = db.query('select count(1) count from service')[0]['count']
17    offset = 0
18    rows =[]
19    while offset < service_count:
20        rslt = db.query(f'select a.id service_id, a.name service_name, b.project_id from service a left join application b on a.application_id = b.id limit {offset},1000')
21        for o in rslt:
22            p = project_dict[o['project_id']]
23            cmdb_app = json.loads(p['cmdb_app'])['name'] if p['cmdb_app'] else ''
24            row = [f"service-{o['service_id']}", f"project-{p['id']}", o['service_name'], p['name'], p['cmdb_app_id'], cmdb_app]
25            rows.append(row)
26        offset += len(rslt)
27    data = {
28        'table_name': 'earth',
29        'column_name': ['earth_service', 'earth_project', 'service_name', 'project_name', 'appId', 'appName'],
30        'column_type': ['string', 'string', 'string', 'string', 'string', 'string'],
31        'row_data': rows
32    }
33    DFF.CACHE.set('refer_tab_earth', json.dumps(data))
34

2. 创建 Func 同步链接

3. 配置 Pipeline 获取 Reference Table 地址

编辑 DataKit 的主配置文件 datakit.conf,配置 Pipeline 下的 refer_table_url 为上一步创建的同步 API 链接。

4. 创建 Pipeline

通过观测云管理菜单下面的 Pipeline 菜单进入 Pipeline 菜单管理页面(因为是需要对指标数据进行 Pipeline 处理,只能通过该菜单进入才能创建处理指标的 Pipeline),并创建一个新的 Pipeline。

配置 Pipeline 名称以及合适的过滤条件(由于本案例是用单独的 DataKit 采集 prom 指标,故无过滤条件)。

编辑 Pipeline 脚本并保存。

1grok(pod,"service-%{INT:serviceId}")
2controller_name = 'service-' + serviceId
3set_tag('service_id',  serviceId)
4set_tag('controller_name', controller_name)
5# 从reference table中获取earth_service 为controller_name的数据
6query_refer_table('earth','earth_service', controller_name)
7drop_key('serviceId')
8if project_name != nil {
9    set_tag('project_name', project_name)
10    set_tag('container_name', service_name)
11    set_tag('app_id', appId)
12    set_tag('app_name', appName)
13    k = slice_string(pod, len(container), len(pod))
14    k = service_name + k
15    set_tag('pod_name',k)
16  
17}
18

5. 验证结果

注意事项

  1. 如若使用中心 Pipeline,请确保中心 Pipeline 功能已开启(默认关闭);
  2. 如果使用本地 Pipeline,请确保每个涉及到该类数据采集的 DataKit 实例都有正确配置refere table url;
  3. 编辑 Pipeline 时,如果页面提示解析失败,可以忽略,因为页面调试使用的是中心 Pipeline,如果中心 Pipeline 没有配置 refer table 获取地址的话,会报错;
  4. JSON 文件会被加载到内存中,注意 table 大小。

利用CMDB数据实现指标业务维度的动态扩展》 是转载文章,点击查看原文


相关推荐


深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
q***2512025/11/16

SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数据库逻辑。 本文将以完整的示例,详细介绍 SQLSugar 的安装、配置和功能使用,适用于 .NET Framework 和 .NET Core 项目。 一、SQLSugar简介 1. 什么是 SQLSugar? SQLSugar 是一个轻量


vscode编译C语言 | 在VSCode中配置编译环境与常见问题解决
epvikz_0732025/11/15

三十岁学编程|从零开始,如何在30岁起步学编程并成功转行许多人认为编程是年轻人的事情,尤其是到了三十岁,很多人会觉得自己已经错过了最佳学习的时机。然而,实际上三十岁学编程并非不可能,反而可能是一个崭新的开始。在这个信息化时代,编程能力已成为许多行业的基本技能,很多人通过自学编程成功转行,获得了新的职业发展机会。首先,学编程最重要的就是坚持和耐心。虽然编程看起来有些抽象,但通过系统的学习和实践,任何人都可以掌握基本的编程技能。比如,掌握Python或JavaScript等基础语言,它们不仅有着强大


用Microsoft Visual Studio Installer Projects 2022打包程序,同时安装VC++的运行库等
CE贝多芬2025/11/13

目录 一、安装插件 二、创建打包程序 在解决方案中新建打包项目 三、配置打包属性内容等 文件系统的各个文件夹 将输出程序打包进Application Folder 创建桌面快捷方式 创建卸载程序 给快捷方式创建图标 设置打包时的属性以及安装语言,安装位置等信息 四、打包 五、附录 六、附录二 一、安装插件 说明: Microsoft Visual Studio Installer Projects 2022 是微软官方提供的 Visual Studio


高德MCP服务接入
QD.Joker2025/11/12

创建一个agent,集成高德MCP工具 文章目录 一、安装依赖二、获取高德key三、代码实现 一、安装依赖 pip install openai pip install langchain (1.0版本以上) pip install langchain_mcp_adapters 二、获取高德key https://lbs.amap.com/api/mcp-server/create-project-and-key 三、代码实现 import asynci


XC7A200T-2FBG676I Xilinx AMD Artix-7 FPGA
XINVRY-FPGA2025/11/10

XC7A200T-2FBG676I 是 赛灵思 Xilinx AMD 推出的高性能低功耗 FPGA,隶属于 Artix-7 系列。该芯片基于 28nm 低功耗硅工艺,采用可扩展的 7 系架构,旨在在性能、功耗和成本之间实现最佳平衡。它主要面向高速数据采集、视频处理、通信系统、工业控制与嵌入式硬件加速等场合,适合那些需要较高逻辑容量和中高速信号处理能力的系统。 该芯片拥有约 215,360 个逻辑单元,包含约 33,650 个查找表(LUT)等效逻辑模块,内部集成大容量片上存储资源,总片上


Socket编程实战:从基础API到多线程服务器
violet-lz2025/11/8

一、Socket编程概述:网络通信的桥梁 Socket(套接字)是网络通信的端点,它提供了不同主机间进程通信的接口。在Linux系统中,Socket可以被视为一种特殊的文件描述符,通过标准的文件I/O操作来进行网络数据传输。 Socket编程的核心概念         通信域:确定通信的协议族和地址格式         套接字类型:定义通信的语义和特性         协议:指定具体的传输协议         地址:标识网络中的通信端点 学习Socket编程的重要性:      


Python编程实战 · 基础入门篇 | 列表(list)
程序员爱钓鱼2025/11/6

在 Python 中,列表(list) 是最常用、最灵活的数据结构之一。 它能存放多个数据,可以增删改查,还能嵌套其他列表,是编程中处理“集合类信息”的核心工具。 本章我们将系统学习列表的定义、操作方法、常用函数与实战应用。 一、什么是列表 列表(list)是一个 有序、可变 的元素集合。 它可以存储任意类型的数据,包括数字、字符串、布尔值、甚至其他列表。 示例: numbers = [1, 2, 3, 4, 5] fruits = ["apple", "banana", "cherry"]


Python 的内置函数 float
IMPYLH2025/11/1

Python 内建函数列表 > Python 的内置函数 float Python 的内置函数 float() 是一个用于将数字或字符串转换为浮点数(即带有小数部分的数字)的函数。它是 Python 中处理数值转换的重要工具之一,常用于数据类型转换和数值计算场景。 功能说明 无参数调用:当不带任何参数调用时,float() 会返回 0.0 print(float()) # 输出: 0.0 数字转换: 整数转换为浮点数print(float(5)) # 输出: 5.0 布尔


【操作系统】计算机系统概述
.笑对人生.2025/10/30

目录 一、操作系统的基本概念 (一)操作系统的概念 (二)操作系统的功能和目标 (三)操作系统的特征 二、操作系统发展历程 (一)手工操作阶段(此阶段无操作系统) (二)批处理阶段(操作系统开始出现) (三)分时操作系统 (四)实时操作系统 (五)网络操作系统和分布式计算机系统 (六)个人计算机操作系统 三、操作系统的运行环境 (一)处理器运行模式 (二)中断和异常的概念 (三)系统调用 (四)操作系统运行环境的切换 四、操作系统结构 五、操作系统引导


搭建虚拟机完全分布式(centos)
小鹿学程序2025/10/27

在搭建完全分布式集群前,通常需要先在一台基础节点(可作为主节点或模板节点) 上完成基础环境配置,后续再通过克隆或批量操作同步到其他节点。以下是详细的实操步骤(以 CentOS 7 为例,其他 Linux 发行版操作类似): 一、准备工作 操作系统:确保基础节点已安装好 Linux 系统(推荐 CentOS 7/8、Ubuntu 20.04 等),并配置好静态 IP(避免 IP 动态变化影响集群通信)。 查看 IP:ip addr 配置静态 IP(CentOS 7):编辑 /etc/syscon

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0