服务器 DevOps 必备工具: Python 监控日志脚本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chanlion
V2EX    Python

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

  •  
  •   chanlion 2017-09-19 08:49:54 +08:00 7348 次点击
    这是一个创建于 2953 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一名服务器开发人员,需要实时得到服务器日志的异常信息进行排查。我们不可能天天盯着日志去做这项工作,必须由相应的运维脚本来完成。我尝试用 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/ 定位很简单,主要以自己看过的书或文章的笔记为主。因为本人是一名游戏服务端的程序员,所以相关的方面会比较多。但不局限于此,我对任何与编程、通信、物理、数学有关的话题都感兴趣。

    欢迎大家关注,交流!

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

    确实可以说是很大了。
    UnknownR
        12
    UnknownR  
       2017-09-19 12:36:54 +08:00
    可惜用的是 powershell 和.net ,不过还是支持一波
    chanlion
        13
    chanlion  
    OP
       2017-09-19 13:37:18 +08:00
    @coolloves 贵公司的业务是什么方面的?我一直觉得 rsyslog、Logstash、ElasticSearch、Kibana 主要用在大企业比较多。
    chanlion
        14
    chanlion  
    OP
       2017-09-19 13:38:00 +08:00
    @UnknownR 等做再多完善完善,说不定以后你也用得上 :-)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:25 PVG 18:25 LAX 03:25 JFK 06:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86