厉害了,用Python脚本实现对线上程序的实时动态的监控调整

之前调试线上程序时,经常遇到的一个问题就是,线上程序出现bug,但线下调试时却无法重现,或者说想重现需要的准备条件很繁琐。所以我就想,能不能在线上程序出现问题时,直接切入程序,实时看到程序内部状况,数据到底是什么样的。

本着这个目标,我开发了一个简单的console接口,通过继承抽象类的方式来保证程序提供一个命令行式交互界面,实时动态的监控调整正在运行的程序。

先写个例子简单演示一下:

创建test_console.py,编写如下代码

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

执行

python test_consoler.py

执行情况如下:

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

再开一个窗口,执行

python test_consoler.py --console

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

回到刚才的窗口

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

原程序的行为被改变了!

厉害了word哥!

回到命令行交互页面

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

命令行现在所处的作用域为init

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

那么init中的所有本地变量均可以访问

通过self,我们可以改变self绑定的方法及self属性

使用exit或者control + c退出

让我们来看一下console类

consoler.py

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

console类是一个单例抽象类,为什么是单例主要是因为console类我主要用于maxin到我的微服务类,所以必须是单例且抽象。

需要实现一个抽象属性args,args是ArgumentParser是结果集。

所以可以通过如下方式使用。

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

console主要做的事情有两件

  • 开启一个console服务
  • 开启一个console客户端

当启动程序时不加--console参数时,默认启动一个线程服务来监听console客户端的链接。

当启动程序时添加了--console参数时,程序开启一个console并连接服务。

该console类已经被maxin进了monitors.py中的微服务基类中,可以直接继承使用

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

灵感来源于werkzeug中关于debug中间件的实现。

最后,想学习Python的小伙伴们!

请关注+私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

pytyhon学习资料

厉害了,用Python脚本实现对线上程序的实时动态的监控调整

python学习资料

相关推荐