最近在做一个项目,需要把客户端日志导入es里, 最初是想nginx日志写入kafka,再从kafka读取数据,写入es这样的流程。后来由于客户端上报的是json格式的日志,又不需要对内容做解析、计算,而es支持json格式输入,所以想到直接由logstash读取nginx日志写入es,整体数据流是客户端上报-->nginx-->logstash-->es。
这里,需要对nginx日志格式做配置,最初配置的是log_format log escape=json '$request_body'; 但是这样写到es里的数据把$request_body当成整个的字符串了,里面的字段没有做解析;后改为 log_format cdn_log escape=json '{"request": "$request_body"}'; 同时在logstash配置
filter{
json{
source => "request"
}
mutate{
remove_field => ["request", "host", "path"]
}
}
这样只对request解析,就能准确识别日志中的字段了。
无需写代码,只进行配置,并且数据流也较短,就能将数据入库了。