You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否剥离Nginx错误日志特定内容?抑制K8s集群Calico相关INFO日志

嗨,我来帮你逐个解决这两个Nginx日志相关的问题

1. 是否可以剥离Nginx错误日志中的特定日志内容?

当然可以!根据你的需求,有两种主流方案可选:

  • 配置层面过滤(更推荐):利用Nginx的map指令结合条件日志功能,精准过滤掉你不需要的日志条目。比如,如果你想排除包含某个关键词的日志,可以这么配置:

    map $log_message $exclude_log {
        ~*"你要排除的关键词" 0;
        default 1;
    }
    
    error_log /var/log/nginx/error.log warn if=$exclude_log;
    

    这里的$log_message是Nginx的内置变量,代表即将写入错误日志的内容。如果匹配到目标关键词,$exclude_log会被设为0,这条日志就不会被记录;反之设为1,正常写入日志。

  • 日志后处理过滤:如果不想修改Nginx配置,也可以在日志收集环节做过滤。比如用grep -v "目标关键词"来过滤掉不需要的内容,或者在Fluentd、Logstash这类日志收集系统里配置过滤规则,自动丢弃指定条目。

2. 如何抑制来自Calico Pod的SSL握手断开INFO日志?

你提到的client closed connection while SSL handshaking这类INFO级日志,本质是Calico Pod在SSL握手完成前主动断开了连接导致的。这里有几个针对性的解决办法:

方案一:调整Nginx错误日志级别

如果这类INFO日志对你完全没用,且你能接受忽略其他非关键的INFO级日志,可以直接把错误日志的级别从info提升到warn及以上:

error_log /var/log/nginx/error.log warn;

这样Nginx只会记录warnerrorcritalertemerg级别的日志,所有INFO级内容都不会被写入。

方案二:精准过滤特定日志条目(保留其他INFO日志)

如果你还需要保留其他有用的INFO级日志,就用map指令精准匹配这条握手断开的日志,跳过记录:

map $log_message $skip_calico_ssl_log {
    ~*"client closed connection while SSL handshaking" 0;
    default 1;
}

error_log /var/log/nginx/error.log info if=$skip_calico_ssl_log;

这样只有这条来自Calico的噪音日志会被丢弃,其他正常的INFO日志都会保留下来。

额外建议:排查Calico的连接配置

频繁出现这类握手断开日志,可能和Calico Pod的健康检查、连接超时设置有关。你可以去Calico侧排查下相关配置,比如是否存在过短的连接超时,或者是否有不必要的端口探测,从根源减少这类日志的产生。

内容的提问来源于stack exchange,提问作者L P

火山引擎 最新活动