为了账号安全,请及时绑定邮箱和手机立即绑定

日志切割咨询

@麦可同学

我日志是按小时切割了,日志文件名前缀都一样后缀是按日期小时区分的,在代码里 读取模块,应该怎么实现这部分逻辑,求老师给个详细的思路方案,多谢。

正在回答

2 回答

1,这个问题其实我在最后一节课有提到,如果产生了新的日志文件,你需要再读取模块里检查当前文件的inode是否改变,有变化就重新打开文件句柄即可。

2,可以考虑先将日志做统一搜集,比如都发送到队列中或者落地,然后读取模块消费这些数据,有很多开源的解决方案,flume ,scribe什么的。如果日志量巨大,只用于监控的话,这样做的成本比较高,可以使用prometheus这类拉取模式的解决方案。

0 回复 有任何疑惑可以回复我~
#1

manny 提问者

检查当前文件的inode是否改变,inode 是怎么判断的,请老师详细点吗,给点提示。
2018-05-01 回复 有任何疑惑可以回复我~
#2

麦可同学 回复 manny 提问者

打开文件后,先获取文件的inode,后续 err == io.EOF,也就是文件读取到末尾的时候,检查inode,是否变化,有变化则重新打开文件句柄。至于inode,可以使用syscall.Stat来获取
2018-05-01 回复 有任何疑惑可以回复我~
#3

manny 提问者 回复 麦可同学

我明白了,就是文件一直处于打开状态(文件内容一直不停的增加)但是inode 是不变的,如果inode变了,就说明,文件已经没有变化了,inode就变了,这时 可以重新打开下一下小时的日志文件了。
2018-05-01 回复 有任何疑惑可以回复我~
#4

麦可同学 回复 manny 提问者

对,没错
2018-05-01 回复 有任何疑惑可以回复我~
#5

manny 提问者 回复 麦可同学

谢谢 @麦可同学 耐心的解答
2018-05-01 回复 有任何疑惑可以回复我~
#6

更来 回复 manny 提问者

fghvccd
2018-05-02 回复 有任何疑惑可以回复我~
#7

更来 回复 更来

好多好多话好多好多话
2018-05-02 回复 有任何疑惑可以回复我~
查看4条回复

我再问个问题,我想实现,程序在A服务器运行,而游戏日志在B服务器上,我想从A机器上直接实时的远程读取B服务器上的日志,请给个详细思路方案,非常感谢。

0 回复 有任何疑惑可以回复我~
#1

轨迹盒moc

你需要写一个传输服务,将B服务器上的日志先传输给A服务器的监控服务中。 或者可以借助 Kafka作为日志消息队列,B => Kafka => A
2018-05-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Go并发编程案例解析
  • 参与学习       15278    人
  • 解答问题       56    个

课程带你通过一个真实的线上日志监控系统学习Golang以及并发的编程思想。

进入课程

日志切割咨询

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号