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日志里的网络问题,从应用层到系统层逐步缩小问题范围,最终定位并解决问题。