【Python之旅】第八篇:开发监控软件的思想与流程

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

    最近两周时间里,一直都在学习监控软件的开发,虽然是简版的,可是在这个过程当中,对于要开发一个监控软件的大概框架和流程还真的学习了很多东西,而且也想,这些知识实在是很难通过看文章或者是书籍能学习得到,只有自己亲自去实践过,我想才可以慢慢体会到这中间的不易吧。而通过这样一个过程,发现自己在这方面的思想枷锁也慢慢地打开,也才慢慢体会到那种乐趣吧。这里,真的是非常感谢Alex老师非常精彩的讲解。

    监控软件的大概流程如下:

wKiom1Yp8PfQJUByAAHkBZuaRZM867.jpg    当然,实际中学习的过程中并没有去监控MySQL或者是ngnix,而只是监控Linux服务器的CPU、内存、load的各项相关指标,不过我觉得这倒没什么问题,因为思想和框架出来了,后面要监控什么,自然而然也就很轻松了,把插件写好,然后添加到监控项里面去就OK了。

    我刚开始看到上面的监控软件示意图时,感觉应该也不会太难的,但当我跟着一步一步去做时,才实现这中间要考虑和解决的问题实在是太多太多,总结起来,要解决的问题,或者说基本的实现流程与思想,简单的总结可以如下:


对于客户端:

1.如何获得需要监控的指标项目

    例如如果我要监控的是CPU的情况,我该如何去获得CPU的相关指标信息,通过什么方式或者说什么命令,这一步实现之后,其实得到的就是一个监控CPU的插件,这个插件应该尽量独立,即不受其它程序的影响,与其它程序之间的耦合度要低,总之,这个插件的功能,就是可以得到我想要的监控指标信息。


2.如何处理获得的监控指标信息

    主要是指客户端对这些监控指标信息数据的处理,这里应该涉及到的问题,获得监控的指标信息后,应该是基于一个监控项目来保存,还是要基于一台被监控的主机来保存指标信息。比如我监控了一台主机的CPU、内存、load后,我是应该把这三者分别保存为三个数据结构,还是把这三者直接保存为一个数据结构?这就要看需求了,而基于CPU、内存、load的监控频率可以调整,考虑到软件以后的扩展性,应该要把三者获得的数据分开保存,用Python开发时,就可以把这三者保存到三个不同的字典中去了。因此,从这一步来看,这里重要的是要知道监控的频率从何而来,继续看下面的内容。


3.监控项目的配置信息获取方式

    比如我要监控CPU,具体我要监控CPU的什么信息,什么指标,如idle、nice等,我应该去哪里找这些配置信息?多长时间监控一次,即监控的频率是多少?有想法是可以直接在客户端上自己设置,但如果这样做的话,依然是考虑到软件的扩展问题,如果以后要监控的服务器主机很多,那不是要在每一台客户端主机上进行设置?既然是监控,那倒不如考虑在服务器端设置客户端的信息,即配置文件,然后可以由客户端直接从服务器端获取,这样当监控多台主机时,只要在服务器端进行相应的设置,客户端跑个客户端程序就可以了,集中、统一管理的思想由此而体现出来。但问题的关键是,这些配置信息,客户端怎么去服务器端取?


4.如何从服务器端获得监控项目的配置信息

    如果用的是3中的方法策略,那么客户端如何从服务器端去取?这时就可以借助Redis数据库的订阅服务功能了,基于Redis数据库的特性,只要在服务器端和客户端都安装并运行了Redis数据库,问题就很好解决了。当然,这里需要获取的重要配置信息应该是:这台主机监控的项目是什么?监控频率是多少?


5.通过什么方式将获取的监控信息发送给服务器端

    有了4的经验,那使用Redis的订阅服务那是最简单不过了。这时其实我们要采取的监控方式是被动监控方式,即服务器端不会主动向客户端获取监控信息,而是由客户端主动向服务器端发送监控信息,然后服务器端再根据已经设定好的监控策略来进行判断客户端主机是否出现异常,然后再实现报警功能。


对于服务器端:

    服务器端要考虑的则更多了,在这里,面向对象的编程思想就显得犹为重要了,当然,监控数据的接收与整理、处理、报警也不容易。


1.用面向对象的编程思想实现不同主机监控项目的模板定制

    客户端的监控配置信息都是从服务器端获得的,由于不同的客户端主机监控的项目、监控的频率都有可能不一样(这很正常,不同的服务器对于不同的性能指标要求都不一样),因此通过面向对象的编程思想,把每个监控项目的基本配置信息模板写好,基于这些模板,根据需要被监控的服务器主机的不同,定制不同的监控配置信息,然后保存到Redis数据库中,让客户端主机去取,这里对应客户端解决问题中的第3点。


2.监控数据如何接收与整理

    前面其实已经说过,依然是通过Redis数据库的订阅服务功能来进行接收,如果这个方式要改变,那么在客户端主机中也应该进行相应的更改,这里对应客户端解决问题中的第5点。这里,可以单独写一个程序来跑一个进程,把接收到的数据,根据后面处理数据时的需求,再添加相关的信息来重新整合接收到的监控数据,再保存到Redis数据库中去,再由监控数据处理程序去进行处理,即handle程序,之所以要这样做,是为了要降低程序之间的耦合度,以方便以后对监控软件进行功能上的扩展。


3.监控数据如何处理

    这里单独写一个程序跑一个进程,从Redis数据库中读取不同主机不同监控项目的监控信息,然后将这些监控信息与第1步定制的模板中的指标阀值进行比对(所以第一步写的内容信息不仅仅是监控项目配置信息模板,也应该还有不同指标和阀值的相关设定),如果发现有异常情况的,即将异常情况信息保存下来,写入到Redis数据库中,等待报警程序进行相关处理以实现报警功能,这样分开来做的目的依然是为了降低程序之间的耦合度。另外这里需要注意的是,监控数据的处理也应该是基于不同的监控项目的(对应客户端中的第2点),而不是基于不同的主机,因为不同的主机的不同监控项目的监控频率可以是不一样的。


4.如何进行报警

    这里也应该单独写一个程序来进行报警功能的实现,从Redis数据库中读取报警信息后,如何将这些信息进行报警,是直接在屏幕输出?还是邮件?还是短信?还是电话?以及将这些信息发给哪个相关负责人?基于上面的这些不同需求,要构思的应该又不少了。


    所以对于上面的一个流程的概述,可以更进一步总结如下:

客户端:读取监控配置信息-->开始监控-->获得监控数据-->发送给服务器端

服务器端:读取监控数据-->监控数据处理-->保存异常信息-->实施自动报警


知道监控软件的思想流程有何作用?

    不管怎么说,监控软件的大致开发过程或者说是开发的流程与思想应该是跟上面说的类似的,只是基于不同的功能、不同的需求、不同的方式,在实际开发的过程当中又有太多细节的不一样,总的来说,流程看起来不会太难,但具体到每一个细节的实施,需要花费的精力,我想是非常非常多的,而这,应该是需要一定的经验的。但无论如何,因为知道了大概的开发流程,并且自己动手实践过,所以以后在自己需要开发相关监控软件时,根据自己的需求,再按照上面的思想流程去做,我想,从最基本的开始做起,是一定可以开发出一套适合实际生产环境的监控软件的。



为什么要学习Python自动化运维开发?

    今年5月份,接手了学校600多台交换机的管理,发现对交换机的监控实在是太弱,600台交换机,上万的用户,竟只有一个只能通过屏幕界面来进行查看的监控平台,因此,更不用说自动报警功能了,迫于这种无奈,我上网找了很多相关的监控软件,要么都是收费的,要么是使用不了,要么就是操作起来非常非常复杂的,因此,很难下手。其实我的需求很简单,只是希望可以看到交换机有没有挂掉,然后如果挂掉了,可以给我打个信息或者打个电话,是这样一种轻量级的监控软件就好了。

    到了今年9月,实在是无奈,只能自己去学开发,那种求人不如求己的感觉越来越强烈。

    不管怎么说,在学习了这方面的知识后,发现其实要开发具有我上面所说功能的交换机功能的监控软件,在流程上面就要比前面说的那个要简单很多,所以我想,这是不难实现的。

    继续Python开发的学习,在后面学习了Web开发相关的知识后,我是希望通过自己的能力可以开发一个较为完善的基于自己实际需要的交换机监控系统。

    当然,以后要用Python做的事情,就真的是太多太多了。

    不管如何,往后要学习的知识或者说技术,真的是太多太多,希望自己不要放弃,继续努力下去吧!




本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1705623,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
25天前
|
监控 算法 安全
深度洞察内网监控电脑:基于Python的流量分析算法
在当今数字化环境中,内网监控电脑作为“守城卫士”,通过流量分析算法确保内网安全、稳定运行。基于Python的流量分析算法,利用`scapy`等工具捕获和解析数据包,提取关键信息,区分正常与异常流量。结合机器学习和可视化技术,进一步提升内网监控的精准性和效率,助力企业防范潜在威胁,保障业务顺畅。本文深入探讨了Python在内网监控中的应用,展示了其实战代码及未来发展方向。
|
1月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
54 7
|
2天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
21 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
2天前
|
人工智能 测试技术 数据处理
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
通义灵码 2.0 体验报告:Deepseek 加持下的 Python 开发之旅
36 11
|
5天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
6天前
|
API Python
python泛微e9接口开发
通过POST请求向指定IP的API注册设备以获取`secrit`和`spk`。请求需包含`appid`、`loginid`、`pwd`等头信息。响应中包含状态码、消息及`secrit`(注意拼写)、`secret`和`spk`字段。示例代码使用`curl`命令发送请求,成功后返回相关信息。
29 5
|
23天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。

热门文章

最新文章