[蓝鲸有奖征文]蓝鲸6.1 CMDB 事件推送的开源替代方案

本文来自腾讯蓝鲸智云社区用户:木讷大叔爱运维

背景

在蓝鲸社区“社区问答”帖子中发现这么一个需求:

--fec098ae72bbac0dded46d693e234b45.png

究其原因,我在《不是CMDB筑高墙,运维需要一定的开发能力!》一文中已经介绍,在此我再简单重复下:

  • 蓝鲸5.1 自带“事件推送”功能,当配置信息发生变化的时候,实时通知到关联的系统中;
  • 蓝鲸6.1 不再提供“事件推送”功能,而是由“监听资源变化事件”的一个 CMDB API 实现,需要我们自行查询;

CMDB 版本的迭代,或许说明老版本的“事件推送”已经不符合蓝鲸的设计理念,作为此功能的对接使用者感同深受:

  • 事件推送功能全面性,基本覆盖了CMDB全场景的信息变化;
  • 事件推送更类似一个图形化的API,通过界面就让开发者知道该如何使用;
  • “简单的背后的逻辑复杂化”,这是在对接事件推送接口的第一感受;
  • 由于功能的全面性,意味着数据格式的多样性,对接过程你懂得;

通过对事件推送功能对接过程的回顾以及对替代服务resource watch的使用对比,就非常理解蓝鲸社区推陈出新的做法了!

需求

既然是小伙伴们“插眼关注”的问题,与其等待答案,不如我们自己去寻找答案!

API分析

该 watch 功能的主要特性包括:

  • 在有限的时间内(目前为 3 小时,可能会调整,请勿依赖此时间)为用户提供高可用的数据变更 watch 服务。
  • 在有限时间内,用户可以根据自己上一次事件的 cursor(游标)进行事件回溯或者追数据,适用于异常数据回溯,或者系统变更进行数据补录。
  • 支持根据时间点进行变更数据回溯,支持根据游标进行变更数据回溯,支持从当前时间点进行数据变更 watch。
  • 支持根据事件类型进行 watch 的能力,包括增、删、改。事件中包含全量的数据。
  • 支持主机与主机关系数据变化的事件 watch 能力。
  • 采用短长链的设计,当用户通过游标进行事件 watch 时,如果没有事件,则会保持会话连接,在 20s 内有事件变更则直接直接将事件推回。避免用户不断请求,同时保证用户能及时的拿到变更的数据。
  • 支持批量事件 watch 能力,提升系统吞吐能力。
  • 支持定制关注的事件数据字段,满足用户轻量级的 watch 需求。

链接:https://bk.tencent.com/docs/document/6.1/190/14399

事先先行

对接CMDB属于事件驱动,因此事件先行,先来分析通过API都能获取哪些事件:

  • host 代表主机详情事件
  • host_relation 代表主机的关系事件(主要使用)
  • biz 代表业务详情事件
  • set 代表集群详情事件
  • module 代表模块详情事件
  • process 代表进程详情事件
  • object_instance 代表通用模型实例事件
  • mainline_instance 代表主线模型实例事件
  • biz_set 代表业务集事件
  • biz_set_relation 代表业务集和业务的关系事件

以上事件未必都能用到,我们只要按需获取即可,这也体现了watch服务的灵活性!

动作其次

每类事件都有其相应的动作:

  • create 创建
  • delete 删除
  • update 更新

我们的工作重点就是从事件中将增、删、改的动作分离出来,对下游系统进行事件回放,从而保证数据同步。

时间/事件回溯

虽然时间回溯最长间隔为3小时,我们还是希望对不同粒度的事件进行区分,原则如下:

  • host_relation 主机关系事件,实时生效;
  • module 模块事件,实时生效;
  • set 集群事件、biz 业务事件等,可适当在不同时间间隔生效;

时间回溯保证我们能查到历史数据,而事件回溯的cursor游标能够保证我们避免重复的事件。
因此我们对于时间/事件回溯要有一个清醒的理解!

功能需求

通过API的分析,其实我们的功能需求也就同时梳理了出来:

  • 核心目标:CMDB驱动资产同步,按业务/集群/模块/主机的结构与下游系统实现关系对应;
  • 事件驱动:
    1)biz 业务名同步;
    2)set 集群名同步;
    3)module 模块名同步;
    4)host_relation 主机关系同步;
    5)其他名称或关系同步;

开发框架

根据”监听资源变化事件“接口的特性,我梳理了下开发过程的几个要点:

  • 对于事件的获取、与下游系统同步,这是两个步骤。不需要等待同步完成再去获取事件,要进行解耦
    1)事件获取,异步执行;
    2)与下游系统对接,同步执行;
  • 不同事件变化的频繁度不同,我们要按需获取,因此就需要一个调度器,可自定义调度计划;

通过以上分析,我们初步确认了python + celery + rabbitmq的几个组件:

  • celery 用于对不同时间回溯间隔的调度;
  • rabbitmq 通过交换机、路由、队列分别保存celery调度的任务;
  • python对不同事件结果封装统一的数据与其他运维系统进行资产同步;

其具体的实现流程如下图:
--a15fed825c203b5ee29fad5997dacae9.png

具体部署

依赖组件

1.Python 3.9
2.Celery
3.Rabbitmq 保存celery调度任务

安装

1.python环境

conda create -n resource-watch python=3.9
source activate resource-watch
pip install  requests celery pyamqp flower kombu

2.rabbitmq环境

# 安装rabbitmq
yum install rabbitmq-server
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

# 开启 RabbitMQ 的web管理界面
rabbitmq-plugins enable rabbitmq_management
# 创建admin用户并授权
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p '/' admin '.' '.' '.*'
rabbitmqctl list_users
rabbitmqctl list_user_permissions admin
systemctl restart rabbitmq-server

# 访问rabbitmq管理界面
http://ip:15672

1.路由队列

针对不同事件,使用不同的队列

交换机路由队列备注
cmdbcmdb.host_relationcmdb.host_relation主机关联关系事件
cmdbcmdb.modulecmdb.module模块事件
cmdbcmdb.setcmdb.set集群事件
cmdbcmdb.bizcmdb.biz业务事件

2.运行

cd /app/resource-watch
# 启动beat,将定时任务发送至worker
celery -A celery_cmdb beat -l INFO --detach

# 启动worker,异步执行任务,绑定相应事件队列
celery -A celery_cmdb worker -Q cmdb.host_relation -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.module -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.set -l INFO -c 1 -D
celery -A celery_cmdb worker -Q cmdb.biz -l INFO -c 1 -D

# 启动flower,任务查看

总结

整个开发过程比较重要的是“对不同事件结果数据的封装”,除了部分开发经验外,就是要不断的试错,这样才能保证我们完成对最终的数据格式的解析,从而更好的匹配下游运维子系统!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

喜讯!全视通获评“医用气体行业优秀装备制造企业”称号

春意盎然,“渝”您相见。3月28日,“2024中国医学装备大会暨展览会”在重庆隆重启幕,本次展览会是我国医学装备领域政府部门、相关专家、头部企业深度参与的综合性展会,是先进技术最权威的展示平台之一,是引领创新发展的…

备战2024年中学生古诗文大会(初中组):单选题真题和独家解析

我们继续来做中学生古诗文大会(初中组)——简称初中生古诗文大会的一些真题,让大家了解初中生古诗文大会的考察内容和形式,并且提供了我独家的题目解析和答案,供初中的同学们学习和参考。 以下题目截取自我独家制作的在…

《基础设施即代码(IaC)》译者序

随着信息技术的飞速发展,我们对基础设施的理解也在不断深化。传统的基础设施往往被看作是硬件和软件的堆砌,而现在,基础设施的概念已经发生了巨大的变化。在当今这个信息化、数字化的时代,基础设施已经成为了企业和组织运行的核心…

Linux多进程通信(3)——详细说说共享内存原理及使用例程

1.共享内存原理及优缺点 共享内存的原理便是将相同的一片物理内存映射到进程A和进程B不同的逻辑地址空间,两个进程同时访问这块物理内存(共享内存)。 1)优点 共享内存是进程间通信访问速度最快。 例如消息队列,FIFO&…

喜尔康众多智慧酒店解决方案亮相上海酒店展,“十档妇洗”技术惊艳全馆

日前,2024上海国际酒店及商业空间博览会在上海新国际博览中心盛大举行,2000品牌同时亮相,引发行业广泛关注。 作为行业领先的智能家居企业,喜尔康30年来专注于为大家居行业提供智能化解决方案,此次参展展出了超静音智能…

ssm校园订餐系统

ssm校园订餐系统 一、项目简介 本项目是一套基于SSM实现的网上订餐系统 或 在线点餐系统 或 外卖点餐系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 详细介绍了网上订餐系统的实现,包括: 1.项目介绍 2.环境…

突破编程_前端_JS编程实例(分割窗体组件)

1 开发目标 分隔窗体组件旨在提供灵活的窗体分隔功能,支持横向分割与纵向分隔两种类型,并具备拖拽调整窗体比例的功能,同时提供最小比例设置,以防止窗体被过度缩小: 2 详细需求 2.1 分隔窗体类型 (1&…

Ant Design Vue中的table与pagination的联合使用

效果&#xff1a; 代码&#xff1a; <a-table:dataSource"dataSource":columns"columns":pagination"pagination"change"handleTableChange":scroll"{ x: 100%, y: 600 }"> </a-table> export default defin…

零基础入门实战深度学习Pytorch课程下载

本课程旨在帮助零基础学员掌握PyTorch深度学习框架。通过实战项目&#xff0c;学员将学习神经网络基础、模型训练和调优技巧。逐步掌握深度学习核心概念&#xff0c;为未来在人工智能领域打下坚实基础。 课程大小:2.6G 课程下载&#xff1a;https://download.csdn.net/downlo…

网络安全 | 什么是云安全?

关注WX&#xff1a;CodingTechWork 云安全-介绍 云安全是为了解决企业安全所面临的外部和内部威胁&#xff0c;它是一组程序和技术的集合。企业在实施其数字化转型策略&#xff0c;并将各种云端工具和服务纳入企业基础架构中时&#xff0c;需要云安全保障业务顺利进行。 云计…

CentOS7.9排查网络带宽高占用的情况

//显示全部网卡 ifconfig //安装iftop yum install iftop -y //设定监测的网卡 iftop -i eth0 按 P 显示 host 信息及端口信息。 按 D 切换是否显示远端目标主机的端口信息。

15 - grace序列处理 - 十三点滑动平均法

grace序列处理 -十三点滑动平均法 滑动平均是一种常用的平滑数据的方法,可以用于去除噪声或者提取趋势。十三点滑动平均是指使用窗口大小为13的滑动平均,应用于GRACE序列处理中可以去除周年项的影响。 十三点滑动平均的计算公式为: y [ n ] = ( x [ n − 6 ]

C++ | Leetcode C++题解之第6题Z字形变换

题目&#xff1a; 题解&#xff1a; class Solution { public:string convert(string s, int numRows) {int n s.length(), r numRows;if (r 1 || r > n) {return s;}string ans;int t r * 2 - 2;for (int i 0; i < r; i) { // 枚举矩阵的行for (int j 0; j i &l…

ARM64架构栈帧以及帧指针FP

文章目录 前言一、arm64架构寄存器简介1.1 异常等级1.2 通用寄存器1.3 ARM64架构ABI 二、ARM64架构函数调用标准2.1 AArch64过程调用标准简介2.2 通用寄存器中的参数 三、demo分析3.1 main函数3.2 funb3.3 funa 四、栈帧总结五、demo演示参考资料 前言 这篇文章描述了 x86_64架…

Linux之实现Apache服务器监控、数据库定时备份及通过使用Shell脚本发送邮件

目录 一、Apache服务器监控 为什么要用到服务监控&#xff1f; 实现Apache服务器监控 二、数据库备份 为什么要用到数据库备份&#xff1f; 实现数据库备份 三、Shell脚本发送邮件 为什么要用使用Shell脚本发送邮件&#xff1f; 实现Shell脚本发送邮件 一、Apache服务器…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 &#xff08;1&#xff09;关于CPU &#xff08;2&#xff09;关于内…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”&#xff0c;可以保护表格不被他人随意打开&#xff0c;那如果后续不需要保护了&#xff0c;不想每次打开Excel都需要输密码&#xff0c;要怎么去除“打开密码”呢&#xff1f; 今天分享3个方法&#xff0c;最后一个方法记得收藏起来&#xff0c;以…

GWO-CNN-BiLSTM多输入时序预测|灰狼群算法优化的卷积-双向长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…

需要本地后端的真机调试-微信

打开和修改IP改为电脑与手机同一局域网的 不知道这个要不要