排障方法论

排障方法论:从日志到内核参数的定位流程

2024年11月10日 约15分钟 排障流程

大多数「配置不对」都能靠一套固定的定位流程解决,而不是瞎试参数。这篇把排障组织成 五个阶段:看日志 → 看连接 → 看规则 → 查配置 → 动参数,每步给出工具与判断标准。

阶段 1:看日志

先把日志级别调到 info 甚至 debug,复现问题后立即停止,避免日志刷屏掩盖关键行。 关注的典型条目:

日志内容 含义
[UDP] dial tcp ... i/o timeout 节点连接超时
[TCP] match RuleSet: ... 规则命中情况
dns: resolve tcp ... DNS 解析链路
rejected ... domain-suffix 被规则拒绝(REJECT)

阶段 2:看连接

# API 拉取活跃连接,按目标域名过滤
curl -H "Authorization: Bearer secret" http://127.0.0.1:9090/connections \
  | jq '.connections[] | {host: .metadata.host, rule: .rule, chain: .chains}'

这一步回答两个问题:请求有没有到达内核?命中了哪条规则、走了哪条链? 如果连接列表里根本没有目标域名,问题在客户端/系统代理层,不在内核。

阶段 3:验证规则

规则是「自上而下、先命中先生效」的。用 /rules 接口确认规则顺序,用 /dns/query 确认域名解析结果。常见误判:域名走了 IP 段规则而非域名规则, 或 REJECT 规则排在直连规则之前把流量全部拦截。

阶段 4:查配置

阶段 5:动参数

前四步都没定位到,才考虑动内核参数,并且一次只动一个:udp-timeout、keep-alive-interval、 find-process-mode、sniff。每次改动后保留日志,用实测数据确认改善, 避免多个参数叠加后无法判断谁起作用。

二分定位法

面对复杂问题时用二分法缩小范围:先把整个规则切成「全局代理」与「全局直连」两端, 确定问题在哪一端;再在问题端内逐步二分(只留一半规则测试)。 相比逐个试参数,二分法定位次数是指数级减少的。

总结

排障的本质是信息收集:日志给线索、连接表给事实、规则给解释、配置给原因、 参数给对策。按流程走,大部分问题在阶段 1–3 就能结束,根本不需要改参数。

相关阅读