一,问题情景:
我们有多台apache server,apache上的access log会通过rsyslog client传送给rsyslog center汇总并展示给用户。最近一段时间,有多个用户反馈自己的access log不全,有丢失的现象。而我们之前的相关变更是把用户的debug日志和info日志放在相同的一个日志级别中传输。
二,查找原因及解决办法:
1,部署监控
我们给一个rsyslog center做了一个监控,每2min钟curl 5次指定的url,然后看rsyslog center是否出现此log,把每2min的丢失数量展示在graphite中。以便于我们对日志的丢失比率有一个直观的掌控。
2,分析监控图
发现日志是时丢时不丢,并且丢失比率也不固定。
3,分析log
一个请求被哪台apache处理,我们在log中有字段来记录。分析rsyslog center我监控url的log,发现一个奇怪的现象。例如:监控发现连续4个小时丢日志,而这四个小时中的log中处理监控url的都没有出现某一台apache server。而接下来不丢的2小时,这台apache server又出现了。再过一段时间又变成另一台apache server不在rsyslog center中。而监控的url的log在apache server本地的log中,都是正常的,没有丢失现象。
4,抓包分析
在rsyslog center通过抓包分析,发现在丢的日志,在rsyslog center server抓包是能抓到的,所以当时认为这个丢日志的问题和服务端有关系。
5,根据分析,认为是rsyslog 性能跟不上导致丢日志