logstash之ruby模块

      最近二期开始上线了,一直没顾上写博客,今天忙里偷闲写一篇关于logstash的,项目引入elk有半年多了,由于日志记录的错综复杂.之前解析都是通过ruby进行字符串分割实现,但是这个月对日志记录这块做了调整,全部采用json方式记录.这样一来logstash解析日志这块就的重新实现.json嵌套了2层,如果直接用json进行格式化,es中会有冗余字段,所以只能人工解析json,话不多说直接看过程

      logstash中ruby这块网上案例并不多,查了半天也没有什么收获,官网上给了一句                                                                                                     

        可以执行任意ruby代码.可是真正去实现的时候踩了不少吭,诸多报错. 第一步调用ruby脚本的时候就一直提示"Script does not define a filter! Please ensure that you have defined a filter method!,根本不加载指定的函数.翻阅logstash-filter-ruby源码得知

                             

       其方法中必须有filter函数,固将函数名称更改成filter后解决,但是后续提示没有定义event ,继续翻阅源码看到这个                                                    

       在调用自定义ruby脚本的时候将event传递过去了.于是将event更改成参数传递解决.最终生产配置如下:

                             

        ruby中String和json转换关系如下:   

                          String--->JSON         JSON.parse String  

                          JSON--->String         JSON.to_json

         定义方法如下:

   def filter(event)
      #取出日志信息
      logdata=event.get('message')
      if (logdata.include?'reqMessage' )
        #解析日志级别和请求时间,并保存到event对象中
        logleve=logdata[(logdata.index('[')+1)...logdata.index(']')]
        event.set('logleve',logleve)
        event.set('requestTime',logdata[0,logdata.index(' - [')])
        #如果是rest接口json日志
        if(logdata.include?'restJson')
          parseJsonLog event,logdata
        else
          parseXmlLog event,logdata
        end
      end
    return [event]
   #解析json格式日志
 def parseJsonLog(event,logdata)
    #获取日志内容
    loginfo=logdata[(logdata.index('] ')+2)...(logdata.rindex('}')+1)]
    #转成json对象
    logInfoJson=JSON.parse loginfo
    #获取流水号
    event.set('transactionID',logInfoJson['transactionID'])
    event.set('channel',logInfoJson['reqMessage']['channel'])
    #获取返回报文
    event.set('respMessage',logInfoJson['respMessage'].to_json)
    #获取请求报文
    event.set('reqMessage',logInfoJson['reqMessage'].to_json)
    .....................省略部分代码
    #设置标示位
    event.set('tags','log_success')
  end

        ruby插件确实不错,可以随意实现日志解析,相比与正则和直接logstash中的json插件要方便灵活的多.推荐使用logstash中的ruby脚本解析日志.希望此篇博客可以帮忙到诸多新接触elk的朋友们,再有就是得到领悟阅读源码确实可以得到不一样的理解和见解.我们不管要知其然,还要知其所以然

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值