V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dreamramon
V2EX  ›  问与答

Java / Python 里面如何实时监控日志文件的变化,并且输出每次的变更

  •  
  •   dreamramon · 2021-06-27 01:48:12 +08:00 · 1185 次点击
    这是一个创建于 1035 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近有个项目对方提供的是 go 编译后的二进制文件,然后不停的写日志到本地一个 log 文件。

    想做个日志分析器,监控这个本地文件,并且近实时的把每次的变更提交到我们的后端。。。之前类似的需求用 filebeat 做的很好了,但是因为是个小系统,所以不想上 graylog 或者 elk 先接受日志再通过 api 解析出来。

    貌似 filebeat 的 output 也不能直接推送到自己的业务系统,不知道有没有小伙伴遇到类似的场景,怎么解决的?

    9 条回复    2021-06-28 23:39:13 +08:00
    ccde8259
        1
    ccde8259  
       2021-06-27 02:01:08 +08:00 via iPhone
    可以 ouput 指向 Kafka
    自己起一个消费者就行了
    LeeReamond
        2
    LeeReamond  
       2021-06-27 02:51:21 +08:00 via Android
    但是有一些异步监控文件描述符的工具,有动作时触发回调。不过日志文件本身会滚动啥的,应该挺麻烦的
    so1n
        3
    so1n  
       2021-06-27 03:03:36 +08:00
    有个叫 inotify 的东西, 我之前就利用他传日志 利用他就可以了。Python 用法可以参考下: https://juejin.cn/post/6973678434832613412#heading-3
    qile1
        4
    qile1  
       2021-06-27 04:39:16 +08:00 via Android
    监控文件变化有个 watchdog,拼写不一定是
    micean
        5
    micean  
       2021-06-27 09:51:04 +08:00 via Android
    java 有监视文件变化的 api
    westoy
        6
    westoy  
       2021-06-27 11:10:38 +08:00
    tail -f 日志 | 你的程序

    你的程序用 select 观察 stdin
    dreamramon
        7
    dreamramon  
    OP
       2021-06-28 22:07:33 +08:00
    @micean @so1n @LeeReamond @qile1
    那个确实能及时获知文件变化了。但是一个 10g 的 txt 日志文件,新增了 30 行,要把这 30 行找出来,还是挺麻烦的。特别是在 java 读取的过程中,这个文件都还在变化。。。
    LeeReamond
        8
    LeeReamond  
       2021-06-28 23:23:34 +08:00
    @dreamramon #6 是挺好的办法,把文件转换成单向流,好处理多了
    so1n
        9
    so1n  
       2021-06-28 23:39:13 +08:00
    @dreamramon 如果你觉得自己不好维护 可以直接用系统自带的 rsyslog 他也是利用 inotify 监听的 然后可以发送到 redis, rabbitmq, kafka 之类的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2480 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:17 · PVG 09:17 · LAX 18:17 · JFK 21:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.