分布式日志收集之Logstash 笔记(二)

今天是2015年11月06日,早上起床,北京天气竟然下起了大雪,不错,最近几年已经很少见到雪了,想起小时候冬天的样子,回忆的影子还是历历在目。 进入正题吧,上篇介绍了Logstash的基础知识和入门demo,本篇介绍几个比较常用的命令和案例 通过上篇介绍,我们大体知道了整个logstash处理日志的流程: input => filter => output 除了上面几个基础命令,还有ruby,mutate,gork,codes几个命令比较常用: 在线gork正则的地址:http://grokdebug.herokuapp.com/ Logstash基础正则地址:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns 如果你是做运维的,那么很幸运,内置的120多个正则,对运维人员来说非常方面,比如常见的Apache的log格式,Nginx的log格式 上面的正则库都有成型的正则式,省去了自己编写正则一大部分的工作。 如果你是做开发的,那么稍微麻烦点,开发需要面对各种业务log+系统log,这时候,掌握gork用法,使用正则提取任意内容,变得比较重要了,不过相信大部分人都会一些基础的正则,所以还是比较轻松的。 下面看几个案例: 案例(一)使用gork提取Solr搜索的log里面的一些字段内容: 例子数据(注意这是一行数据):

Java代码

INFO  - 2015-11-03 06:10:53.106; [   company] org.apache.solr.core.SolrCore; [company] webapp=/solr path=/select params={mm=100%25&sort=score+desc,regCapital+desc,foundDate+asc,cpyNamePy+asc&start=0&q=+cpyName:兰州顶津食品有限公司++OR+sname:"兰州顶津食品有限公司"^10+OR+oldName:兰州顶津食品有限公司
+&wt=javabin&fq=&version=2&rows=10&defType=edismax} hits=0 status=0 QTime=2 

使用gork正则语法+内置正则,能够提取出,log级别,UTC时间,查询关键词等等内容

Java代码

log级别:
%{LOGLEVEL:loglevel} 
查询时间:
%{TIMESTAMP_ISO8601:time};
查询关键词  :
cpyName:(?<kw>.*)\+\+
命中数量 :
hits=(?<hits>\d+)
查询时间
QTime=(?<qtime>\d+)
查询偏移开始:
start=(?<start>\d+)
返回数量:
rows=(?<rows>\d+)

案例(二)使用filter-date插件提取日志文件里面的时间,覆盖logstash自己默认生成log时的时间 官网介绍:https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html 这个案例也比较常见,因为我们需要的时间,肯定是log日志里面记录的时间,而不是logstash接入时的那个时间,保证时间正确,才能在 Kibana里面正确的展示,关于UTC时间的+8的问题,这里就不说了,搜索时自己可以控制搜到正确的内容即可 内容如下截图,写了一个固定的时间:

结果如下图,已经被转换成UTC时间

案例(三)使用ruby内嵌代码,将一个yyyy-MM-dd HH:mm:ss格式的日期,转换成long时间戳 接着案例二的代码,再其filter里面再加入如下一段代码:

运行后,再看结果:

写个程序验证是否正确,发现没有问题:

如果会点JRuby或者Ruby语法,来使用Logstash则可以做更多的自定义的处理任务 案例(四)使用codec+multiline来处理跨行的日志 什么场景下,需要使用multiline插件呢? 最常见的就是我们的log4j里面的记录的java程序发生异常时,经常 会抛出一大堆异常,如下:

注意这么多行日志,从业务角度来讲,它是一行的,如果默认我们不做任何处理,logstash就会把它解析成多个事件,这样以来 基本上偏离了我们预期的设想,那么该如何处理呢? 方法(1): 在input阶段的编码过程中,加入正则判断:

方法(2): 还是在input阶段,但是使用的触发模式,直到遇到下一行日志前,把这一行与下一行之间的所有内容都当成是一行,这种做法比较简单,优点时在性能与准确度上可能会比上一个方法好,但是缺点是,必须有下一行日志产生,当前的这一行日志,才能被收集完毕 !

参考文章:http://blog.sematext.com/2015/05/26/handling-stack-traces-with-logstash/ 案例(五)使用mutate+gsub来去除一些字段里面的换行符

Java代码

  1. mutate {
  2. gsub => [ "message", "\r", "" ]
  3. }
 mutate {
    gsub => [ "message", "\r", "" ]
  }

gork过滤例子:

Java代码

  1. input { file { path => "/var/log/http.log" } }
  2. filter {
  3. grok {
  4. match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  5. }
  6. }

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2015-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安智客

《密码模块安全技术要求》解读

今天要讲到的是密码模块安全认证! 中国密码行业标准化技术委员会分别在2014年、2015年制定了GM/T 0028-2014《密码模块安全技术要求》和GM/T ...

64570
来自专栏FreeBuf

挖洞经验 | 如何参加众测项目发现美国国防部网站各类高危漏洞

美国国防部(DoD)于2016年11月21日首次与HackerOne合作,开展了“Hack the Pentagon”的漏洞众测项目,这将允许安全研究人员通过背...

31360
来自专栏友弟技术工作室

浅谈LVS

集群(cluster),从字面上就知道,集与群都是多的概念。集群就是多台机器组合在一起共同完成一个需求。

11530
来自专栏京东技术

闲话高并发的那些神话,看京东架构师如何把它拉下神坛

高并发也算是这几年的热门词汇了,尤其在互联网圈,开口不聊个高并发问题,都不好意思出门。高并发有那么邪乎吗?动不动就千万并发、亿级流量,听上去的确挺吓人。但仔细想...

31340
来自专栏小特工作室

WinFom中经典小游戏(含源码)

  最近整理了若干经典的小游戏,无聊时可以打发时间。程序本身不大,练手非常不错,主要是GDI编程,主界面地址如下图所示 ? 源码下载方式 1,关注微信公众号:小...

26050
来自专栏IT技术精选文摘

微信支付商户系统架构背后的故事

PostgreSQL-XC在事务管理系统方案本身有一个明显的缺点,那就是事务管理机制会成为系统的瓶颈,GTM(Global Transaction Manage...

17610
来自专栏晓晨的专栏

ASP.NET Core的身份认证框架IdentityServer4(1)-特性一览

11930
来自专栏玉树芝兰

如何用R和API免费获取Web数据?

API是获得Web数据的重要途径之一。想不想了解如何用R调用API,提取和整理你需要的免费Web数据呢?本文一步步为你详尽展示操作流程。

14220
来自专栏杨建荣的学习笔记

给自己写的程序挑毛病(r12笔记第68天)

前几那天写了一个Java程序模拟生产者消费者,当时写完还感觉不错,但是这几天再看的时候发现还是有很多的不足之处,给别人挑毛病不大好意思,尺度拿捏不好还容易...

36850
来自专栏Python、Flask、Django

python内容识别

17250

扫码关注云+社区

领取腾讯云代金券