最近有个项目对方提供的是 go 编译后的二进制文件,然后不停的写日志到本地一个 log 文件。
想做个日志分析器,监控这个本地文件,并且近实时的把每次的变更提交到我们的后端。。。之前类似的需求用 filebeat 做的很好了,但是因为是个小系统,所以不想上 graylog 或者 elk 先接受日志再通过 api 解析出来。
貌似 filebeat 的 output 也不能直接推送到自己的业务系统,不知道有没有小伙伴遇到类似的场景,怎么解决的?
1
ccde8259 2021-06-27 02:01:08 +08:00 via iPhone
可以 ouput 指向 Kafka
自己起一个消费者就行了 |
2
LeeReamond 2021-06-27 02:51:21 +08:00 via Android
但是有一些异步监控文件描述符的工具,有动作时触发回调。不过日志文件本身会滚动啥的,应该挺麻烦的
|
3
so1n 2021-06-27 03:03:36 +08:00
有个叫 inotify 的东西, 我之前就利用他传日志 利用他就可以了。Python 用法可以参考下: https://juejin.cn/post/6973678434832613412#heading-3
|
4
qile1 2021-06-27 04:39:16 +08:00 via Android
监控文件变化有个 watchdog,拼写不一定是
|
5
micean 2021-06-27 09:51:04 +08:00 via Android
java 有监视文件变化的 api
|
6
westoy 2021-06-27 11:10:38 +08:00
tail -f 日志 | 你的程序
你的程序用 select 观察 stdin |
7
dreamramon OP @micean @so1n @LeeReamond @qile1
那个确实能及时获知文件变化了。但是一个 10g 的 txt 日志文件,新增了 30 行,要把这 30 行找出来,还是挺麻烦的。特别是在 java 读取的过程中,这个文件都还在变化。。。 |
8
LeeReamond 2021-06-28 23:23:34 +08:00
@dreamramon #6 是挺好的办法,把文件转换成单向流,好处理多了
|
9
so1n 2021-06-28 23:39:13 +08:00
@dreamramon 如果你觉得自己不好维护 可以直接用系统自带的 rsyslog 他也是利用 inotify 监听的 然后可以发送到 redis, rabbitmq, kafka 之类的
|