如何抑制Go 1.17引入的Pod中TLS握手错误日志?
抑制Go 1.17引入的TLS握手EOF错误日志方案
Pod中频繁出现以下无害但干扰性强的日志:
2023/04/19 05:06:38 http: TLS handshake error from 10.21.152.134:36134: EOF
这是Go 1.17版本引入的已知问题,由客户端提前断开连接触发。以下是几种抑制这类日志的可行方案:
1. 代码层面:自定义HTTP服务器错误日志过滤
若你拥有服务的Go代码控制权,可以通过自定义http.Server的ErrorLog来过滤特定错误:
import ( "fmt" "log" "os" "strings" ) type filteredErrorLogger struct { logger *log.Logger } func (l *filteredErrorLogger) Println(v ...interface{}) { msg := strings.Join(strings.Fields(fmt.Sprint(v...)), " ") // 匹配并忽略TLS握手EOF错误日志 if strings.Contains(msg, "TLS handshake error") && strings.HasSuffix(msg, ": EOF") { return } l.logger.Println(v...) } func main() { customLogger := log.New(os.Stderr, "", log.LstdFlags) server := &http.Server{ Addr: ":8080", ErrorLog: &filteredErrorLogger{logger: customLogger}, // 你的TLS配置等其他参数 } // 启动服务器逻辑 }
2. 运维层面:通过日志采集工具过滤
如果无法修改代码,可在日志采集阶段通过工具过滤这类日志:
- Fluentd:在配置中添加过滤规则
<filter **> @type grep <exclude> pattern /TLS handshake error from .*: EOF/ </exclude> </filter>
- Promtail(Loki配套采集器):在scrape配置中添加丢弃规则
scrape_configs: - job_name: pod-logs pipeline_stages: - regex: expression: '^.*TLS handshake error from .*: EOF$' - drop: source: "message" value: "^.*TLS handshake error from .*: EOF$"
3. 根治方案:升级Go版本
Go 1.19及后续版本已修复该问题,若业务允许,将服务的Go编译版本升级到1.19+,可从根源上消除这类日志输出。
内容的提问来源于stack exchange,提问作者Tzadik Even
相关产品推荐
相关产品推荐

