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

2021-06-27 01:48:12 +08:00
 dreamramon

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

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

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

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

你的程序用 select 观察 stdin
dreamramon
2021-06-28 22:07:33 +08:00
@micean @so1n @LeeReamond @qile1
那个确实能及时获知文件变化了。但是一个 10g 的 txt 日志文件,新增了 30 行,要把这 30 行找出来,还是挺麻烦的。特别是在 java 读取的过程中,这个文件都还在变化。。。
LeeReamond
2021-06-28 23:23:34 +08:00
@dreamramon #6 是挺好的办法,把文件转换成单向流,好处理多了
so1n
2021-06-28 23:39:13 +08:00
@dreamramon 如果你觉得自己不好维护 可以直接用系统自带的 rsyslog 他也是利用 inotify 监听的 然后可以发送到 redis, rabbitmq, kafka 之类的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX