dreamramon
V2EX  ›  问与答

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

  •  
  •   dreamramon · Jun 27, 2021 · 1798 views
    This topic created in 1807 days ago, the information mentioned may be changed or developed.

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

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

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

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

    你的程序用 select 观察 stdin
    dreamramon
        7
    dreamramon  
    OP
       Jun 28, 2021
    @micean @so1n @LeeReamond @qile1
    那个确实能及时获知文件变化了。但是一个 10g 的 txt 日志文件,新增了 30 行,要把这 30 行找出来,还是挺麻烦的。特别是在 java 读取的过程中,这个文件都还在变化。。。
    LeeReamond
        8
    LeeReamond  
       Jun 28, 2021
    @dreamramon #6 是挺好的办法,把文件转换成单向流,好处理多了
    so1n
        9
    so1n  
       Jun 28, 2021
    @dreamramon 如果你觉得自己不好维护 可以直接用系统自带的 rsyslog 他也是利用 inotify 监听的 然后可以发送到 redis, rabbitmq, kafka 之类的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 15:12 · PVG 23:12 · LAX 08:12 · JFK 11:12
    ♥ Do have faith in what you're doing.