Python运维监控系统之架构设计

news2024/9/23 5:23:10

        说起Python这门编程语言的作用,可以列举很多方面,其实每一门流行的编程语言都可以列举很多方面,但是要说起Python的主要领域,莫过于运维监控方面,在这方面有大量优秀的开源运维系统。

        虽然有很多优秀的开源运维监控系统,如Nagios、Zabbix、Prometheus、Grafana,但是当你真正在线上企业环境面对各种各样实际需求时,总感觉不够自己需要,这些系统提供的二次开发功能,要么自己不喜欢这些语言,要么自己不喜欢这种具体的模式,总想自己弄一个简单的、自己随意想怎么开发就怎么开发的系统来,所选择的主要语言自然是Python,因为Python简单,但又不像shell脚本那么过于简单。

        在我的运维经验里,基础资源的监控其实不重要,如CPU,内存,磁盘和网络等,这些不是说不要监控,而是随便用一个开源的系统就监控到了,如我们用Prometheus+Grafana就解决了,只要正常就行,其它部门对这个根本没特殊需求。但是,对业务系统的监控,对业务数据的监控和分析,这个需求就多了,各个部门可能都需要一些数据,严格讲这些数据应该是数据分析人员去做的,但是中小功能哪里有那么多岗位细化,在客户现场环境,公司驻点的唯一工程师就是运维工程师,他必须搞定一切,如果这些数据每次提取都是手工去用各种系统提供的命令行去做,速度可想而知,比如mysql表用sql查询一下,elasticsearch索引数据在kibana上查询一下,milvus特征向量数据统计用pymilvus脚本去统计,每天运维工作中这种比率将很大。

        

         上图给出了一种运维监控平台架构的设想,DataOps是一个通俗的名字,现在DevOps、DataOps、AIOps,到处都是概念,但是我感觉用数据说话的思路是最靠谱的,最基本的指标数据容易做的到,运维人员也容易理解,也容易去执行。AIOps太高级,运维人员未必能理解;DevOps太难搞,毕竟多个部门协作说的好听,效果能到哪里很难。

        这个架构的一个想法就是把各种指标数据推送到数据库里存储起来,然后前端来查询,技术上就这么简单,提倡的是一个个细节要做好,就是能不能真正去采集各种各样的有用的数据指标,能不能及时提供监测业务系统正确性的数据指标,是不是能做到,上线一个业务功能,运维部门能及时开发一个采集组件及时的配套上业务功能。

        有时候功能强大的运维监控系统对一个中小企业就是一个废品,架构师和主管组织上马了一个强大的运维监控系统让运维部门去使用,之后到底效果怎么样谁也不管,最后运维人员还是习惯用手工命令操作一下,搞几个他认为重要的,或者公司同事要他查询的,其它的一切不理。当然不光是运维系统,好多业务系统也是一样。

        我的DataOps系统核心还是把各种指标数据写入MySQL数据库,其实和Prometheus是一样的,都是采集时序数据指标,那为什么不直接用Prometheus呢? 其实我们已经用了Prometheus系统,但是运维人员就是搞不明白它,上线了也没真正用上,更不会用Prometheus客户端库写探针功能,而且我们也不喜欢Prometheus主动去连接各个探针的模式,开防火墙规则都麻烦死。

        opsstash就是承担了Prometheus的角色,只是opsstash是服务器,让各种beat来主动连接,一般采取短连接方式,数据封装采用JSON格式,尽量的简单,比如Python编写beat的话,用request库就搞定了,一般运维人员都能搞定,比Prometheus的客户端库和模式简单多了。opsstash用Flask框架实现一个API接口就行,支持各种指标数据推送即可,加上安全令牌身份证认证,一个服务接口就解决了所有的时序指标数据入库。

        opsapi提供各种指标数据项的查询接口,供运维前端系统调用,可能各个指标的查询条件、排序字段、显示字段的要求各不相同,这个就必须一个指标项一个API接口,但是基于Flask+SQlAlchemy框架,可以用Python写一个自动生成API接口模块的Python代码的工具程序,这个目前已经实现。

        opsweb是运维前端web系统,所有指标数据都要在这里展示,运维人员主要在这个系统界面上每日观察分析数据。运维人员99%都是在看运维指标数据,所以分页表格展示是最常用的,选择Amis低代码框架来实现前端web系统,只需要去生成JSON文件就可以轻松得到一个web界面,大大减少了开发门槛,因为中小公司的运维团队,不大可能擅长vue、react等,jquery系列库也搞不定,Javascrip语法都未必能学习好,唯一JSON语法是最简单的。而且,我也用Python写了一个自动生成简单web界面的工具程序,实现了对一张MySQL表数据进行分页表格显示,提供过滤条件和排序功能等,在这个基础上手工加JSON配置来实现更多特有功能,还是很简单的,百度开源的Amis低代码框架确实不错。

        opsmobile是一个想法,毕竟用手机监控是比较常见的,一套API服务接口给多种前端使用也是很正常的。另一个重要原因是我司的系统部署特点,基本都是在客户封闭的内网里部署,互联网是不可以访问的,只有客户颁发给我们特有的手机才可以访问这个内部网络,只能用这种手机才能远程监控系统。

        总之,DataOps系统是侧重于指标数据要多要强大,而使用的技术越简单越好,希望能用Python全部解决,不需要用Go、Java、C/C++等比较难的语言来实现。DataOps也需要和Promethues、Loki、ELK对接,那些现成的基础通用的数据指标采集,用这些开源组件实现就好了,比如CPU、内存、磁盘和网络等,没必要自己用Python写一通,我们写各种beat主要是针对业务系统指标,对业务数据进行统计分析采集,业务数据监控其实比基础资源数据更重要。

        

        

        

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

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

相关文章

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】

基于springboot实现自媒体社区平台系统演示 系统开发平台 在该自媒体分享网站中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能…

《微信小程序开发从入门到实战》学习十九

3.3 开发创建投票页面 3.3.7 wx:for列表渲染 接下来为创建的投票页面添加一个“添加选项”的功能。需要用户输入文字,应该使用input组件。头投票的数量是不确定的,面对不确定数量的组件的情况时,可以使用wx:for属性对组件进行列表渲染。 使…

windows pgsql 数据库 数据目录更改

一.先停止postgres服务 cmd命令 services.msc找到服务停止 二.修改注册表 cmd命令 regedit找到路径 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-13 将“-D”后的目录名修改为新的数据目录位置即可,如果目录路径中含有…

【C++】泛型编程 ⑦ ( 类模板常用用法 | 类模板声明 | 类模板调用 | 类模板作为函数参数 )

文章目录 一、类模板基础用法1、类模板声明定义2、类模板使用3、类模板做函数参数 二、完整代码示例1、代码示例2、执行结果 一、类模板基础用法 1、类模板声明定义 上一篇博客中 , 【C】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 ) 讲解了模板类的基础语法 , 模板类声明如…

23 - 如何优化JVM内存分配?

JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。 但所有的调优都是有目标性的,JVM 内存分配调优也一样。…

计算机网络的标准化工作及相关组织

一、国际化组织 计算机网络的标准化工作由一些主要的组织来进行管理和推动。以下是几个主要的计算机网络标准化的国际组织及其相关的标准: 1. 国际标准化组织(ISO):国际标准化组织负责制定各种行业的标准,包括计算机…

Linux性能分析——TOP命令详解

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …

网络割接用VRRP替换HSRP

如图3-11所示,C6500作为核心层设备上行连接出口路由器NE40E-X3,下行连接接入层设备CE6800。C6500上配置HSRP实现冗余备份网关,同时在二层网络部署MSTP破除环路。 总体思路 HSRP为CISCO私有协议,CE系列交换机(以CE1280…

基于go标准分层架构项目设计实现

基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识,一方面是技术相关的,如何设计一个比较好的后端架构项目代码;一方面是非技术相关的,如何写一篇好的技术文章,能够让他人读懂并有收获。因…

C++ 形参传值和传指针的误解

#include <stdio.h>void swap(int *x, int *y);main(){ int a 5, b 9;int *pp &a;int *kk &b;swap(pp, kk);printf("a%d\nb%d\n", *pp, *kk);return 0; } void swap(int *x, int *y) {int *t;t x;x y;y t; } 会发现&#xff0c;输出结果并没有…

iptables详解:常用模块的基本使用

目录 tcp扩展模块 multiport扩展模块 iprange扩展模块 connlimit模块 limit扩展模块 udp扩展模块 icmp扩展模块 state扩展模块 限制每分钟接收10个ICMP数据报文 允许10个数据报文快速通过&#xff0c;然后限制每分钟接收1个个ICMP数据报文 限制网络传输的带宽不可以…

VMware——WindowServer2012R2环境mysql5.7.14解压版安装主从复制(图解版)

目录 一、服务器信息二、192.168.132.33主服务器上安装mysql&#xff08;主&#xff09;2.1、环境变量配置2.2、安装2.2.1、修改配置文件内容2.2.2、初始化mysql并指定超级用户密码2.2.3、安装mysql服务2.2.4、启动mysql服务2.2.5、登录用户管理及密码修改2.2.6、开启远程访问 …

【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》&#xff08;NAACL 2021&#xff09;代码https://github.com/ThomasScialom/QuestEval/的流程记录&#xff1a; 在服务器上conda创建虚拟环境questeval&#xff08;python版本于readme保持一致&…

Open AI开发者大会:AI“科技春晚”

ChatGPT的亮相即将满一年之时&#xff0c;OpenAI举行了自己的首次开发者大会。OpenAI首席执行官Sam Altman宣布推出最新的大模型GPT-4 Turbo。正如“Turbo”一词的中文含义“涡轮增压器”一样&#xff0c;本次发布会上&#xff0c;OpenAI的这款最新大模型在长文本、知识库、多模…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 3

1、下图中&#xff0c;乐乐家的位置用数对&#xff08;4,3&#xff09;表示&#xff0c;学校在乐乐家西南方向。下列选项中&#xff0c;学校的位置不可能是 A、&#xff08;5,4&#xff09; B、&#xff08;2,2&#xff09; C、&#xff08;2,1&#xff09; D、&#xff…

进程之理解进程的概念

你必须非常努力&#xff0c;才能看起来毫不费力。文章目录 进程的基本概念描述进程——pcbtest_struct pcb的一种task_struct 内容分类 组织进程查看进程通过系统调用获取进程标示符总结 进程的基本概念 课本概念&#xff1a;进程是一个执行实列&#xff0c;正在执行的程序等。…

数据结构 堆

手写堆&#xff0c;而非stl中的堆 如何手写一个堆&#xff1f; //将数组建成堆 <O(n) for (int i n / 2;i;i--) //从n/2开始down down(i); 从n/2元素开始down&#xff0c;最下面一层元素的个数是n/2&#xff0c;其余上面的元素的个数是n/2&#xff0c;从最下面一层到最高层…

【汇编】[bx+idata]的寻址方式、SI和DI寄存器

文章目录 前言一、[bxidata]寻址方式1.1 [bxidata]的含义1.2 示例代码 二、SI和DI寄存器2.1 SI和DI寄存器是什么&#xff1f;2.2 [bxsi]和[bxdi]方式寻址2.3 [bxsiidata]和[bxdiidata] 总结 前言 在汇编语言中&#xff0c;寻址方式是指指令如何定位内存中的数据。BX寄存器与偏…

滚雪球学Java(09-5):Java中的赋值运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

拷贝对象时编译器的一些优化

在传参和传值返回的过程中&#xff0c;编译器会通过一些优化减少拷贝的次数。 class A { public:A():_a(1){cout << "A()" << endl;}A(const A& aa):_a(aa._a){cout << "A(const A& aa)" << endl;}A& operator(const …