logstash启动后如果过滤条件中ruby语法;开始过滤日志的会报错ruby语法;但是ruby语法时正确的

来源:12-9 filter 插件之geoip和ruby 讲解

qq_无妄_3

2018-07-26

这个错误会在启动logstash后偶尔出来;重启logstash后;重新过滤日志就会恢复正常。ruby错误消失;

请问这个是没把ruby环境加载进来嘛?//img.mukewang.com/szimg/5b727cca0001414c10520939.jpg

原始日志格式

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回答

rockybean

2018-08-16

你这个报错很有可能是 log_time 没有导致的,你可以加一个 if 判断,只有有该字段的时候才执行 ruby。


另外你这个地方的时间处理感觉没啥意义啊,直接 date 处理一下不就好了吗?为什么要给他 +8*60*60


下面是我的解法

        dissect{

            mapping => {

                "message"=>"%{log_time} %{} [%{alarm_level}] %{}"

            }

        }


        date {

            match => ["log_time","ISO8601"]

        }


0
1
qq_无妄_3
谢谢您;老师。
2018-08-16
共1条回复

rockybean

2018-08-10

没有看到你的配置和错误截图,我还真没遇到过这种情况

0
4
qq_无妄_3
回复
rockybean
老师我列出来了;您看看那俩ruby转换如何在ruby单独的脚本中实现?
2018-08-14
共4条回复

Elastic Stack从入门到实践,动手搭建数据分析系统

有了Elastic Stack,不用写一行代码,你也可以玩转大数据分析!

1361 学习 · 397 问题

查看课程