大多数客户端都有日志,但打开一看满屏英文和时间戳,直接关掉。其实真正有用的字段只有五六个,看懂之后定位问题的速度能快好几倍。
先看这五个字段
| 字段 | 含义 | 异常表现 |
|---|---|---|
| 时间戳 | 事件发生时刻 | 用来和系统时间对齐 |
| 目标地址 | 连的是哪个节点 | 和你选的节点不一致说明配置没生效 |
| 协议 | TCP / UDP / 传输层协议 | UDP 被限速时会有大量重传 |
| 握手耗时 | 建连用了多久 | 超过 1 秒说明链路有问题 |
| 错误码 | 失败原因 | 见下 |
三个最常见的错误码
1. 连接超时(timeout)
包发出去了,没有回应。可能是节点不可达、端口被封、或者本地网络拦了出站。
排查顺序:换节点 → 换网络(手机热点)→ 查本地防火墙。三步能排除八成。
2. 连接被拒(connection refused)
对端明确回了一个拒绝。说明目标主机活着,但那个端口上没有服务在听。
这不是网络不通,是服务端问题——通常是节点配置错误或服务没启动。直接换节点,别在本地折腾。
3. 握手失败(handshake failed)
TCP 通了,但加密协商没完成。常见原因:协议版本不匹配、证书过期、系统时间不对。
系统时间这一条最容易被忽略。时间偏差超过几分钟,TLS 证书校验就会失败,表现就是"昨天还好好的,今天全连不上"。
用时间戳对齐
日志里的时间是客户端本地时间。如果你怀疑是某个操作导致的,比如"改了设置之后就坏了",就把操作时间点和日志时间对齐。
# 看系统当前时间
date
# 看日志最后 20 行
tail -20 client.log
两者差得多,说明日志时间不准(时区或系统时间问题),先校时。
日志级别怎么调
默认级别通常只记录错误,看不到连接过程。排查时要临时调到 debug:
- 看完整握手过程 → debug
- 看数据传输细节 → trace(会产生大量日志,排完记得调回来)
- 日常使用 → info 或 warning
长时间开 trace 会让日志文件迅速膨胀,占满磁盘还会拖慢程序。
日志里不该出现的东西
顺便提醒:连接日志里可能有目标地址、时间、协议,正常情况下不应该有账号密码和订阅链接。
如果你在日志里看到明文凭据,说明客户端的日志处理有问题,建议换版本或关掉详细日志。
💡 最快的一招:把日志里第一个错误前后的 10 行复制出来看,八成问题就写在那几行里。不用从头读。
延伸阅读:四层连通性自检、端口被占用怎么排查、IPv6 开了反而更慢。