最近二期开始上线了,一直没顾上写博客,今天忙里偷闲写一篇关于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,logdataelseparseXmlLog event,logdataendendreturn [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的朋友们,再有就是得到领悟阅读源码确实可以得到不一样的理解和见解.我们不管要知其然,还要知其所以然

logstash之ruby模块相关推荐

  1. 从自己实现Ruby单例模式揭秘Ruby模块内幕

         从自己实现Ruby单例模式揭秘Ruby模块内幕 缘起 整个故事要从某一天开始说起,那天,我看到一篇文章介绍了Ruby中实现单例模式的模块.Singleton模块,只要include  Sin ...

  2. Ruby语言基础学习六:Ruby模块、引用其他程序、Mixins

    新建一个trig.rb程序并写入: #-*-coding:UTF-8 -*-#Ruby模块Module # 模块提供了一个命名空间和避免名字冲突.模块实现了 mixin 装置. module Trig ...

  3. logstash中Ruby代码把@timestamp时间戳格式转换

    logstash中ruby代码把@timestamp时间戳格式转换 filter{ ruby {code => "event.set('xxx_time',(event.get('@t ...

  4. 【分布式应用】ELFK集群部署(Filebeat+ELK)Logstash的过滤模块

    一.ELFK集群部署(Filebeat+ELK) ELFK= ES + logstash+filebeat+kibana 实验环境 服务器类型 系统和IP地址 需要安装的组件 硬件方面 node1节点 ...

  5. Logstash详解之——output模块

    Logstash的output模块,相比于input模块来说是一个输出模块,output模块集成了大量的输出插件,可以输出到指定文件,也可输出到指定的网络端口,当然也可以输出数据到ES. 在这里我只介 ...

  6. 使用ruby和python快速开发metasploit自定义模块

    使用ruby和python快速开发metasploit自定义模块 前言 本文的内容主要分为两个部分: 提供一个基本ruby模块代码框架,并快速开发自定义ruby模块 提供一个基本python模块代码框 ...

  7. logstash mysql eror_Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)

    Logstash是es官方标配的ELK中的"L",它们三者的关系是这样:"E"指elasticsearch,用来提供核心的搜索服务:"L"指 ...

  8. JRuby:使Java和Ruby成为一家人

    一. 引言 Ruby是现在编程界讨论得正热火朝天的一种语言.这种语言功能强大而且易于使用:同时Ruby还紧密 绑定到例如Ruby on Rails等web应用程序开发框架中.另一方面,在过去的十年间, ...

  9. Gestalt - 在浏览器里用 python/ruby 写客户端脚本

    Gestalt 是 Mix Online Lab 创造出来的一个框架,利用它我们可以在浏览器里用 python/ruby 写脚本来操纵 DHTML 的各种对象,其作用就跟 javascript 类似. ...

最新文章

  1. Spring4-HelloWorld
  2. linux 打包压缩工具
  3. Springboot-添加对jsp支持
  4. php 匹配多行,PHP-选择与相关表中的多行匹配的行
  5. 史上最详细Docker安装Redis (含每一步的图解)实战
  6. IBM服务器显示系统恢复,苏州数据恢复_IBM X3850服务器数据恢复中处理SAS硬盘故障的恢复案例...
  7. 数据库:计算地球上两个坐标点之间里程
  8. jmeter 压测 RabbitMQ_单机
  9. Android Media (Audio) Framework 多媒体系统框架
  10. 液位单闭环实验计算机控制,过程控制实验报告3(液位单闭环实验)
  11. Scrapy: 爬虫返回403错误
  12. android 九宫格封装,Android 实现九宫格、点击图片放大全屏浏览等
  13. 宽屏电脑应用不全屏显示问题
  14. 服务器搭建网站完整教程
  15. Android_仿ios状态栏一体化
  16. 为什么你关不掉手机里的广告?
  17. 【安卓开发系列 -- APP 】APP 性能优化 -- 崩溃分析
  18. 2015年09月23日
  19. Adobe PhotoShop安装程序无法初始化的解决办法
  20. uni-app页面跳转以及传值

热门文章

  1. 蜜趣疑似机器人_寻找12名锦鲤,每人10000+元免单大礼!你吃喝玩乐,这家商场全包了...
  2. Ubuntu下tmux的安装和使用
  3. 如何用cmd查看WIFI密码
  4. 高性能计算平台基本知识
  5. 莱茵特机器人奖金制度_德国莱茵TUV发布《工业机器人和网络安全白皮书》
  6. docker环境下安装nginx、挂载文件、docker容器中文乱码
  7. python刷b站视频浏览量_python + selenium 刷B站播放量的实例代码
  8. SciFi UI II:具有图像切换功能的六角形按钮
  9. 如何优雅又庶民地在Github Pages中上线Ghost博客系统
  10. Qt on Android 图文详解Hello World全过程