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 · 6994 次点击
    这是一个创建于 2647 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一名服务器开发人员,需要实时得到服务器日志的异常信息进行排查。我们不可能天天盯着日志去做这项工作,必须由相应的运维脚本来完成。我尝试用 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
        3
    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
    感谢大家提的意见,蛮多都是有益的
    coolloves
        10
    coolloves  
       2017-09-19 10:46:02 +08:00
    我之前用 rsyslog 来实时监控日志,如果对于集群,那就更方便了,效率也很高.
    lgpqdwjh
        11
    lgpqdwjh  
       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   ·   实用小工具   ·   1026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:55 · PVG 03:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.