蓝鲸社区:解决小伙伴们插眼关注的一个需求

news2024/11/17 23:36:05

背景

在蓝鲸社区“社区问答”帖子中发现这么一个需求:
image.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驱动资产同步,按业务/集群/模块/主机的结构与下游系统实现关系对应;
  • 事件驱动:
    • biz 业务名同步;
    • set 集群名同步;
    • module 模块名同步;
    • host_relation 主机关系同步;
    • 其他名称或关系同步;

开发框架

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

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

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

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

其具体的实现流程如下图:

具体部署

依赖组件

  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
  1. 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业务事件
  1. 运行
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,任务查看

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pdf文档多页内插入统一图片

常用来添加公司logo、签名、印章等等 概括来说就是插入同一个图片,然后复制在每一页(自动) 用的是福昕pdf阅读器 首先打开pdf: 点击图像标注功能: 在弹出窗口中选择浏览,点击需要插入的图片&#xff08…

1.1.1 Qt信号槽之connect与disconnect介绍

关于Qt信号槽中connect与disconnect介绍 首先我们要知道,如果想要使用Qt中的信号槽机制, 那么必须继承QObject类,因为QObject类中包含了信号槽的一系列操作,今天我们来讲解的是信号与槽怎么建立连接以及断开连接。 一、connect …

用于语义图像分割的弱监督和半监督学习:弱监督期望最大化方法

这时一篇2015年的论文,但是他却是最早提出在语义分割中使用弱监督和半监督的方法,SAM的火爆证明了弱监督和半监督的学习方法也可以用在分割上。 这篇论文只有图像级标签或边界框标签作为弱/半监督学习的输入。使用期望最大化(EM)方法,用于弱…

rain-nowcasting-using-deep-learning github:使用深度学习进行临近降水预报

来源 github地址 是什么 本资料库旨在阐述 "在应用于降雨预报的深度学习模型中合并雷达雨量图像和风速预测 "( “Merging radar rain images and wind predictions in a deep learning model applied to rain nowcasting”)一文中提出的深度…

下拉表格多选sql批量插入以身份证号自动加载年龄性别生日

目录 一、layui下拉表格多选1、引入js2、html3、js代码①非动态数据②动态数据 4、运行效果 二、sql server批量插入三、根据身份证号动态填写出生日期年龄性别 一、layui下拉表格多选 1、引入js 2、html <div class"layui-input-inline"><input type&quo…

安装 Grafana 及 windows_exporter 配置 dubbo 配置 及报告示例

目录 安装部署 官网下载 配置中文 启动 访问 账户密码 界面效果 图表操作 新建添加仪表 添加 Prometheus 数据源 导入已有报告示例 下载 windows_exporter Grafana 的图表模板 node_exporter 中文版&#xff1a;windows_exporter for Prometheus Dashboard CN v2…

element框架select值更新页面不回显的问题,动态表单props绑定问题

1、页面中使用form表单&#xff0c;引入select组件 当data中默认没有定义form.region的值时&#xff0c;会出现选择select后input没有回显选择数据值&#xff1b;所以使用select时&#xff0c;必须定义默认值 <el-form ref"form" :model"form" label-…

常见面试题之线程中并发锁(二)

1. 什么是AQS&#xff1f; 1.1. 概述 全称是AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架&#xff0c;它是构建锁或者其他同步组件的基础框架 AQS与Synchronized的区别 synchronizedAQS关键字&#xff0c;c语言实现java语言实现悲观锁&#…

CISSP证书考试难度大吗?本文教你如何轻松拿下CISSP

主题&#xff1a;CISSP含金量、CISSP考试经验、CISSP备考、CISSP考试大纲 CISSP含金量高 CISSP注册信息系统安全师认证是信息安全领域被全球广泛认可的IT安全认证&#xff0c;一直以来被誉为业界的“金牌标准”。CISSP认证不仅是对个人信息安全专业知识的客观评估&#xff0c…

给若依添加单元测试(一)

给若依添加单元测试 方案二&#xff08;异常困难但企业开发一般用这个&#xff09; 方案一&#xff08;简单&#xff09; 在 admin 模块中添加单元测试 S1.在 src 目录下创建 test.java.MapperTests 文件 S2.将以下内容复制进去 import com.ruoyi.RuoYiApplication; imp…

初学mybatis(六)动态sql

学习回顾&#xff1a;初学mybatis&#xff08;五&#xff09; 一、动态SQL 介绍 什么是动态SQL&#xff1a;动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官网描述&#xff1a; MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验&…

小研究 - Java 指针分析综述(三)

近年来静态程序分析已成为保障软件可靠性、安全性和高效性的关键技术之一. 指针分析作为基 础程序分析技术为静态程序分析提供关于程序的一系列基础信息&#xff0c;例如程序任意变量的指向关系、变量 间的别名关系、程序调用图、堆对象的可达性等. 介绍了 Java 指针分析的重要…

微信小程序:实名认证登录 [2018年]

1、[微信开发社区]微信支付实名信息小程序授权接口能力&#xff08;用户获取用户真实姓名&#xff0c;身份证号码&#xff09; 微信开放社区 2、注意事项 四、接口文档 略。

English Learning - L3 纠音 W8 Lesson7 Ted Living Beyond Limits 2023.06.27 周二

朗读内容&#xff1a; Lesson 7 Day 47 - 51 句子 Ted Living Beyond Limits 3-22

GPT-4 参加2023年高考数学,人工智能对话机器人和人类对决,快谁速度快

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定 让ChatGPT帮你高效实现职场办公&#xff01;行动起来吧。 【点击查看更多知识】ChatGPT从入门到精通&am…

springboot中Thymeleaf模板插入Freemarker模板页面

概述 最近在修改springboot架构的项目&#xff0c;项目之前配置的是Thymeleaf模板&#xff0c; 但是在我新加的功能中&#xff0c;我非常想用Freemarker模板来新加一些页面功能。 看到网上很多其他地方描述&#xff0c;要么用不同的文件后缀来区分(如html文件为Thymeleaf&…

【java 程序设计实训】学生请假管理系统

学生请假管理系统 运行结果学生请假管理系统需求分析GUI 编程事件处理数据库编程部分代码项目结构实体类 Admin.javaLeaveData.javaUserLogin.javaMainWindow.javaTeacherReviewFrame.javaleaveList.java 注&#xff1a;完整内容可下载查看完整报告 运行结果 学生请假管理系统需…

mac配置VScode主题加makefile etc

profile配置&#xff1a; 参考链接&#xff1a;https://www.bilibili.com/video/BV1YW4y1M7uX/?spm_id_from333.999.0.0&vd_sourced75fca5b05d8be06d13cfffd2f4f7ab5 https://code.visualstudio.com/docs/cpp/config-clang-mac vscode profiles如下&#xff1a; {//…

蓝桥杯专题-试题版-【九宫重排】【格子刷油漆】【回文数字】【国王的烦恼】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

空间曲线的切线和法平面与曲面的切平面和法线

&#xff08;一&#xff09;空间曲线的切线和法平面 1. 参数方程的形式 理解和记住如下逻辑&#xff1a; 该两个公式&#xff0c;笔者可以理解但是无法证明。 2. 参数方程外的第二种形式&#xff1a; 此种变换的本质&#xff0c;就是将多元函数转换为参数方程的形式。如此看…