版本临近发布时,测试测出logstash资源占用过高,在3000/S的日志量下,cpu达到90%以上,需要优化。
经过验证整理,提出以下几个优化建议:
1.关闭调试模式
# stdout { codec => rubydebug }
把这段注释掉
2.优化grok的匹配流程
由于grok默认的匹配顺序是由上到下,所以会存在某条日志需要匹配多条正则才会命中的情况,甚至不会命中的日志也会匹配所有正则,及其消耗cpu。建议加入条件判断精准匹配正则,message就是每条日志的原始信息。
例如:
if "XXX" in [message] {
grok {
match => [
#XXX
]
}
}
else if "YYY" in [message] {
grok {
match => [
#YYY
]
}
}
else {
grok {
match => [
#ZZZ
]
}
}
3.及时过滤不需要的日志
if "XXX" in [message] {
drop{}
}
4.移除不需要的字段和标签
mutate {
remove_field => ["XX","YY"]
remove_tag => ["beats_input_codec_plain_applied"]
}