最近在做一个项目,需要把客户端日志导入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解析,就能准确识别日志中的字段了。

无需写代码,只进行配置,并且数据流也较短,就能将数据入库了。

Logo

开源、云原生的融合云平台

更多推荐