go语言实现syslog_collector(1)

2023-09-20

syslog go ziblogs

Author: 向雪松

Link: https://zhuanlan.zhihu.com/p/657284896

最近有个小需求,对于静态生成网站,需要添加统计信息,考虑过不蒜子之类的实现,并没有成功,并且很多人反馈不准确。也可以用Go或者其他语言写一个简单的计数器服务,性能不是问题,关键是线上服务需要考虑的事情太多,比如防攻击、反垃圾等等。另外,仔细思考了一下,这个服务要做得好其实并不容易,例如客户端的user-agent的识别和屏蔽、ip地址的识别、uv和pv的真实统计、频次控制等等,想起来就头疼。

后来突然想到,所有这些在nginx日志里都可以拿的到,并且不需要动态服务支持,也不需要网页嵌入js代码,只要能比较实时的解析nginx的access log,将统计信息存起来(例如写到redis),统计信息数据就有了。下行的页面的统计显示,可以在服务端提供一个接口来查询,相对来说下行接口要考虑的安全问题就少的多的,大不了被刷,防不防都行。

为了性能考虑,也为了实现严谨,打算日志获取使用Go来实现一个syslog collector,在ubuntu下配置好rsyslog,将nginx的access log转发到go服务上,然后解析RFC54241 格式的日志数据,组织好存到redis中。

系统架构

系统架构

应该是配置nginx.conf,除了写文件,同时还写syslog,这样就可以发送到go的syslog collector。所谓的syslog collector就是按照标准实现的syslog日志解析服务,例如kafka、es都可以作为syslog的接收方,就是syslog collector。

找了一些资料2 3,大致设计了一下架构,回头有时间再开干。

参考

1 RFC5424

2 WRITING A SYSLOG COLLECTOR IN GO

3 https://github.com/otoolep/syslog-gollector

 
阅读