Node.js應用的日志是排查網絡問題的首要線索,需重點關注錯誤類型和堆棧跟蹤。常見網絡錯誤及對應的日志表現包括:
Error: connect ETIMEDOUT
(請求未在指定時間內得到響應);Error: getaddrinfo ENOTFOUND <域名>
(無法將域名轉換為IP地址);Error: listen EADDRINUSE <端口號>
(端口已被其他進程占用);Error: connect ECONNREFUSED
(目標服務器未監聽指定端口);Error: Request failed with status code <非200狀態碼>
(如404、500等)。可通過grep
命令快速篩選日志中的網絡錯誤,例如:
grep -E 'ETIMEDOUT|ENOTFOUND|ECONNREFUSED|EADDRINUSE' app.log
若日志未記錄詳細錯誤,需調整日志級別(如使用winston
設置為debug
)或添加console.error
輸出錯誤詳情。
Ubuntu的系統日志(如syslog
、kern.log
)會記錄網絡驅動、內核層面的問題,補充應用日志的不足。使用以下命令查看實時或歷史系統日志:
# 實時查看系統日志(過濾Node.js相關進程)
sudo tail -f /var/log/syslog | grep node
# 查看內核網絡日志(如網卡錯誤、路由問題)
sudo less /var/log/kern.log
重點關注與網絡相關的關鍵詞(如network error
、dropped packet
、failed connection
)。
通過命令行工具快速排查網絡層問題:
ping <目標域名/IP>
(如ping example.com
),若未收到回復,說明網絡不通;traceroute <目標域名/IP>
(如traceroute google.com
),查看數據包經過的節點,定位延遲或丟包位置;telnet <目標IP> <端口號>
(如telnet example.com 80
)或nc -zv <目標IP> <端口號>
,若連接失敗,說明端口未開放或防火墻攔截;curl -v <API地址>
(如curl -v https://api.example.com/data
),查看請求響應詳情(如狀態碼、響應頭)。Ubuntu的防火墻(如ufw
)可能阻止Node.js應用的網絡請求,需確認規則是否放行:
sudo ufw status
(若未啟用,可跳過后續步驟);sudo ufw allow http
、sudo ufw allow https
;sudo ufw allow 3000/tcp
;sudo ufw reload
。檢查Node.js代碼中的網絡相關部分,重點關注以下幾點:
http.request
、axios
)都有.catch
或error
事件監聽,避免未捕獲的異常;axios
的timeout: 5000
、http
模塊的options.timeout
),避免長時間等待;api.example.com
而非ap1.example.com
);axios
的proxy
選項)。若上述步驟無法定位問題,可使用Wireshark
捕獲網絡流量,分析數據包的詳細信息:
sudo apt install wireshark
;sudo wireshark
,選擇網卡(如eth0
)開始捕獲;ip.addr == <目標IP>
),查看是否有丟包、延遲或重傳等問題。通過以上步驟,可系統性地排查Ubuntu系統中Node.js日志里的網絡問題,從應用層到系統層逐步縮小問題范圍,最終定位并解決問題。