GCP GCE中Node.js 12应用出现未知连接超时错误排查求助
排查Node.js应用ETIMEDOUT连接错误的步骤
首先,这个错误是应用尝试连接104.19.213.87:10442时超时了,咱们一步步来定位根源:
1. 先找到是谁发起的这个连接请求
很多时候这类请求可能是第三方依赖在后台发起的(比如日志SDK、监控工具、依赖版本检测),不一定是你自己写的代码。可以用这两个方法定位:
- 用Node.js的调试日志:启动应用时加上
NODE_DEBUG=net环境变量,命令如下:
这样Node会输出所有网络连接的详细日志,包括每个连接的调用栈,你就能直接看到是哪个模块发起的请求。NODE_DEBUG=net node your-app-entry-file.js - 临时Hook住网络连接:在应用入口最顶部加一段代码,拦截到目标IP端口的连接请求并打印调用栈:
启动应用后,当触发这个连接时,就能看到完整的调用栈,直接定位到具体代码或依赖包。const originalConnect = require('net').connect; require('net').connect = function(options) { // 匹配目标IP和端口 const targetHost = '104.19.213.87'; const targetPort = 10442; const isTarget = (options.host === targetHost && options.port === targetPort) || (options.path && options.path.includes(`${targetHost}:${targetPort}`)); if (isTarget) { console.error('=== 检测到目标连接请求,调用栈如下 ==='); console.error(new Error().stack); } return originalConnect.apply(this, arguments); };
2. 检查GCE实例的网络连通性
确认是不是虚拟机本身无法访问这个端口:
- 在GCE实例上执行命令测试连通性:
如果命令也返回超时,那就是网络层面的问题:# 用telnet测试 telnet 104.19.213.87 10442 # 或者用nc更直观 nc -zv 104.19.213.87 10442- 检查GCP控制台的VPC防火墙规则,看出站(Egress)规则有没有限制对
104.19.213.87或10442端口的访问; - 确认实例的VPC路由配置有没有变化,比如是不是新增了路由规则导致流量无法出站。
- 检查GCP控制台的VPC防火墙规则,看出站(Egress)规则有没有限制对
3. 排查依赖包或配置变化
既然是昨天突然出现的问题,大概率是有变更:
- 查看代码仓库的提交记录,看昨天有没有更新依赖包(比如
npm install了新包,或者升级了现有包); - 检查应用的环境变量,看有没有修改过服务地址类的配置(比如
API_SERVER、MONITOR_ENDPOINT等),是不是误设成了这个IP端口; - 用
npm ls生成依赖树,排查哪些依赖可能会发起外部请求(比如日志监控类、错误追踪类的SDK)。
4. 验证目标服务的可用性
这个IP属于Cloudflare的IP段,你可以在其他网络环境(比如本地电脑)测试连接104.19.213.87:10442:
- 如果其他环境也连不上,那就是目标服务本身出了问题(比如服务下线、端口变更、IP被封禁);
- 如果其他环境能正常连接,那回到GCE实例的网络配置,检查是不是有出站流量被限制。
内容的提问来源于stack exchange,提问作者pomo
相关产品推荐
相关产品推荐

