logstash启动后如果过滤条件中ruby语法;开始过滤日志的会报错ruby语法;但是ruby语法时正确的
来源:12-9 filter 插件之geoip和ruby 讲解

qq_无妄_3
2018-07-26
这个错误会在启动logstash后偶尔出来;重启logstash后;重新过滤日志就会恢复正常。ruby错误消失;
请问这个是没把ruby环境加载进来嘛?
原始日志格式
2018-06-05T14:44:38.954048+08:00 94050 [Note] Aborted connection 94050 to db: 'information_schema' user: 'telemonitor' host: '134.108.1.19' (Got an error reading communication packets)
2018-06-05T14:44:41.296781+08:00 0 [ERROR] /apps01/teledb/mysql6606/bin/mysqld: Got an error reading communication packets
2018-06-05T14:44:41.307480+08:00 0 [ERROR] /apps01/teledb/mysql6606/bin/mysqld: Got an error reading communication packets
2018-06-05T14:44:53.909580+08:00 94071 [Note] Aborted connection 94071 to db: 'information_schema' user: 'telemonitor' host: '134.108.1.19' (Got an error reading communication packets)
过滤条件:空格隔开后将第三块定义为alarm_level;带上前面的日志时间
#过滤MySQL日志
dissect{
mapping => {
"message"=>"%{log_time}+%{} %{} %{alarm_level} %{}"
}
}
mutate {
gsub=> ["alarm_level","[\[\]]",""]
}
ruby{
code => 'event.set("time",(Time.parse(event.get("log_time"))))'
}
ruby{
code => 'event.set("time",event.get("time")+8*60*60)'
}
过滤时虽然ruby没错但是老是出现ruby错误;请求老师如何用ruby脚本写
2回答
-
你这个报错很有可能是 log_time 没有导致的,你可以加一个 if 判断,只有有该字段的时候才执行 ruby。
另外你这个地方的时间处理感觉没啥意义啊,直接 date 处理一下不就好了吗?为什么要给他 +8*60*60
下面是我的解法
dissect{
mapping => {
"message"=>"%{log_time} %{} [%{alarm_level}] %{}"
}
}
date {
match => ["log_time","ISO8601"]
}
012018-08-16 -
rockybean
2018-08-10
没有看到你的配置和错误截图,我还真没遇到过这种情况
042018-08-14
相似问题