2017-01-27 41 views
3

我的nginx日志文件中的记录出现故障。 (编辑:通过“乱序”我的意思是按时间顺序排列。例如对于2017-02-21 09:13:26的日志行往往是之前行2017-02-21 09:13:45)也许一定量无序的记录是可以预料的,因为它们是在请求完成后记录的,而不是在收到时记录的。但是,这是一种更大数量的无序登录请求,包括对小型静态文件的已知短(快)请求。nginx日志出现故障,可能是由于缓冲日志记录

这是使用缓冲记录的已知副作用还是可以改善?

为了得到更完整的画面,这里有一些其他配置PARAMS:

nginx.conf

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 

在配置文件中的虚拟主机:

server { 
    #The backlog parameter matches sysctl net.core.somaxconn setting. Default value is 511 on Ubuntu. 
    listen 80 backlog=30000; 
    server_name www.example.com; 
    access_log /var/log/nginx/access.log main buffer=128k; 
    error_log /var/log/nginx/error.log; 
    root /var/www/html/website; 
    ... 
} 
+0

不太确定为什么这是一个问题... – cnst

+0

“失序”是什么意思?日志时间戳有时会倒退,还是记录的URL发生的顺序与预期的顺序不一致?缓冲不应该影响排序。它只会导致服务器在内存中累积大量消息,以便它们可以通过单个大写操作推送到日志文件,这比写出单个消息更有效。 – ottomeister

+0

@ottomeister我的意思是行不按时间排序,就像你期望日志文件通常一样。 – tinkerr

回答

4

是,这是缓冲问题。如果你使用的工人很少 - 每个工人都有自己的缓冲区。

方法来改善:

  • 禁用缓存
  • 减少缓冲区的大小(1)
  • 添加flush选项,如果 刷新到磁盘上还是不多见的
  • 创建自己的日志收集与整理 (例如nginx可以使用syslog协议)

但通常你不需要关心日志记录的顺序。日志分析系统将自行排序。 (1)对于linux系统,缓冲区大小不能超过原子写入磁盘文件的大小。在现代Linux中 - 它是64k。那么,我不是100%确定这个大小,因为信息非常不一致。但是如果你在日志中发现破损线 - 减小这个尺寸。