V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · Sep 19, 2017 · 7641 views
    This topic created in 3142 days ago, the information mentioned may be changed or developed.

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

    确实可以说是很大了。
    UnknownR
        12
    UnknownR  
       Sep 19, 2017
    可惜用的是 powershell 和.net ,不过还是支持一波
    chanlion
        13
    chanlion  
    OP
       Sep 19, 2017
    @coolloves 贵公司的业务是什么方面的?我一直觉得 rsyslog、Logstash、ElasticSearch、Kibana 主要用在大企业比较多。
    chanlion
        14
    chanlion  
    OP
       Sep 19, 2017
    @UnknownR 等做再多完善完善,说不定以后你也用得上 :-)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4651 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 01:05 · PVG 09:05 · LAX 18:05 · JFK 21:05
    ♥ Do have faith in what you're doing.