服务器 DevOps 必备工具: Python 监控日志脚本

2017-09-19 08:49:54 +08:00
 chanlion

作为一名服务器开发人员,需要实时得到服务器日志的异常信息进行排查。我们不可能天天盯着日志去做这项工作,必须由相应的运维脚本来完成。我尝试用 Python 制作了一个监控日志并发送错误信息到开发人员的邮箱的工具。

项目地址在 https://github.com/chuenlungwang/monitorlog ,欢迎 star 和提出 pull request

用途

主要用于对项目产生的日志进行跟踪,并将日志发送给回调函数进行处理。本项目中是 errmailcb.py 处理,找到其中特定正则表达式的行搜集到一起并发送给运维同学。你可以按照你自己的处理逻辑来处理,只需要引入 tail.py 即可。

特点

tail.py 中有一个 Tail 类处理跟踪日志文件,每次尝试读取一行的数据,如果不足一行将不把数据传递给回调函数。Tail 保证传递给回调函数的都是完整的行。Tail 内部有指针记录当前读取到了哪个位置,因此,在运行过程中不会重复读取,并且日志产生很慢的情况下会自行休眠,等待下一次读取。目前默认的休眠时间是 60s。

tail.py 还有一个 tails 函数,会对以当前时间进行格式化文件名的文件进行处理。如果文件不存在则会休眠 120s 再继续尝试。而且因为是对当前时间进行格式化,当日志更换日期时能够持续跟踪。

本项目一次只能单线程跟踪一个日志文件。需要多个文件则需要启动多个进程。


以上文章记录在我的个人网站上:Mr.LONGx 的笔记 http://mrlongx.com/index.php/2017/09/14/monitor-log-project/ 定位很简单,主要以自己看过的书或文章的笔记为主。因为本人是一名游戏服务端的程序员,所以相关的方面会比较多。但不局限于此,我对任何与编程、通信、物理、数学有关的话题都感兴趣。

欢迎大家关注,交流!

7002 次点击
所在节点    Python
14 条回复
sujin190
2017-09-19 09:19:10 +08:00
while 循环 sleep。。正常不应该用系统监听文件改变然后触发回调开始读取么
chanlion
2017-09-19 09:37:32 +08:00
@sujin190 感谢这个优化意见,我尝试用文件监听去优化下
ywgx
2017-09-19 09:57:28 +08:00
更好的姿势,难道不是潜入微信 API ,直接把异常信息发送到微信 😄
iappled
2017-09-19 10:20:38 +08:00
这么多好用的工具,为啥还自己造轮子,轮子还不行
nekoyaki
2017-09-19 10:23:11 +08:00
提几个关键词供参考:
1、用 inotify 机制监控文件是否发生变化。但只有 inotify 的话,并不是百分百可靠的,可以以低频率轮询做辅助。
2、用 grok 解析日志,比裸写正则更方便。不知道 python 是否存在模仿品。
3、如果日志量大,python 不太适合搞这种高并发的东西,可以考虑换用其他语言。
chanlion
2017-09-19 10:32:59 +08:00
@iappled 可否推荐一些工具?我之所以自己写一个的原因在于:不想为了这个功能装一大堆软件。我之前考察过很多软件,都是部署起来过于繁琐。
chanlion
2017-09-19 10:35:18 +08:00
@ywgx 这个的确是改进的方向,我之前有看过 itchat 项目,目前为了快速见到效果就没有用到微信接口,以后会像这个方向改进
chanlion
2017-09-19 10:38:16 +08:00
@nekoyaki 监控机制正在考虑中,我们的业务场景主要是游戏,产生的日志量可以说是很大,每天量可以达到几个 GB,而且是不停的产生。优化的方向是:占用内存、CPU 小,并且快速简洁,部署方便;
chanlion
2017-09-19 10:38:53 +08:00
感谢大家提的意见,蛮多都是有益的
coolloves
2017-09-19 10:46:02 +08:00
我之前用 rsyslog 来实时监控日志,如果对于集群,那就更方便了,效率也很高.
lgpqdwjh
2017-09-19 11:21:51 +08:00
我们的业务场景主要是游戏,产生的日志量可以说是很大,每天量可以达到几个 GB,而且是不停的产生。

确实可以说是很大了。
UnknownR
2017-09-19 12:36:54 +08:00
可惜用的是 powershell 和.net ,不过还是支持一波
chanlion
2017-09-19 13:37:18 +08:00
@coolloves 贵公司的业务是什么方面的?我一直觉得 rsyslog、Logstash、ElasticSearch、Kibana 主要用在大企业比较多。
chanlion
2017-09-19 13:38:00 +08:00
@UnknownR 等做再多完善完善,说不定以后你也用得上 :-)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/391846

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX