2017-01-27 60 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%確定這個大小,因爲信息非常不一致。但是如果你在日誌中發現破損線 - 減小這個尺寸。