日常Bug排查-Nginx重複請求?
前言
日常Bug排查系列都是一些簡單Bug排查,筆者將在這裡介紹一些排查Bug的簡單技巧,其中不乏一些看起來很低階但很容易犯的問題。
問題現場
有一天運維突然找到我,要我協助排查一個問題。業務開發懷疑Nginx會重複相同的請求,就感覺Nginx自己重試了一樣。而PE給我看了下他們的配置,並沒有配置任何重試。
第一感覺
我第一感覺就是應該不是Nginx的問題。但是開發怎麼得出Nginx重試這個結論的呢?
跟隨業務開發思路
於是筆者翻了下他們的郵件,他們是通過PE提供的Nginx Access日誌和業務應用日誌來推斷的。其中搜尋Nginx用了grep '30/Nov/2999 07:33:45' access.log | grep '業務條件' 這個命令。發現在這一秒內,對應的業務日誌有兩筆,而access.log只有一筆。
從日誌上搜尋確實如此。但筆者看了他們的搜尋命令後,就發現他們犯了一個很常見的問題。那就是,請求會跨秒!
請求跨秒了
這是個很常見容易犯的錯誤,尤其是在請求有幾百毫秒響應時間的情況下。於是筆者用grep搜尋了下一秒的access.log中的資料。
很明顯的,由於第二個請求花了641ms,導致access.log落在了46s的區間。grep 45s是無法找到這個請求的。
總結
日誌是我們排查問題的重要手段,在海量的日誌提取資訊時候必須考慮好過濾條件。如若不然,則會影響我們的判斷。