logstash 配置文件使用笔记
大背景配置Filebeat获取log数据,配置output传输到logstash,logstash进行二次转换存储过elasticsearch中
log日志格式为:
2021-02-07 13:56:15,025 - [xxxxx], xx:{"xxx": "xxx", "dt": 1612677351} ,以上log数据是简写,用logstash 拆分字段,logstash配置文件如下:
input { stdin { } } filter { dissect { mapping => { "message" => "%{ts} %{+ts} - [%{status}], %{brand}:%{msg}" } } date { match => [ "ts" , "YYYY-MM-dd HH:mm:ss,SSS" ] timezone=> "Asia/Shanghai" target => "logdata" remove_field => [ "ts" ] } json { source => "msg" } date{ timezone => "UTC" match => [ dt , "UNIX" ] target => "dttodate" } ruby { code => " event.set('logdateunix', event.get('logdata').to_i) # event.set('@timestamp', event.get('logdata')) " } }
以上用到了logstash下3中filter插件,
dissect 下的 mapping => { "message" => "%{ts} %{+ts} - [%{status}], %{brand}:%{msg}" } 对日志 2021-02-07 13:56:15,025 - [xxxxx], xx:{"xxx": "xxx", "dt": 1612677351} 进行解析
date{ timezone => "UTC" match => [ dt , "UNIX" ] target => "dttodate" } 日志里面dt是秒时间戳,这个时间需要在grafana中进行展示,故这里进行转化,dt这个字段在json格式里面,需要放到 json { source => "msg" } 后面执行才有效果
event.set('logdateunix', event.get('logdata').to_i) 这个是把时间格式转化为unix时间戳
event.set('@timestamp', event.get('logdata')) 这个是用日志里面的时间覆盖es里面 @timestamp 时间

浙公网安备 33010602011771号