dreamramon
V2EX  ›  问与答

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

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

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