elk系列2之multiline模块的使用【转】
preface
上回说道了elk的安装以及kibana的简单搜索语法,还有logstash的input,output的语法,但是我们在使用中发现了一个问题,我们知道,elk是每一行为一个事件,像Java这类的输出日志,一个事件占用了好几行,导致elk在处理日志的时候,不能够识别多行日志为一个事件,所以我们在kibana上看的时候,明明是一个事件的日志,却拆分了好几段显示,所以我们针对这类一个事件占用多行的日志,得使用elk另一个模块,multiline模块,这个模块能够合并多行当作一个事件呢,使其在kibana显示的时候,同一个事件在一段。下面我们就看看elk更高级的用法。
下面的操作都是在linux-node1下操作
把多行日志合成一个事件
我们需要使用logstash的input里的multiline模块:https://www.elastic.co/guide/en/logstash/2.3/plugins-filters-multiline.html
参考万官方的配置文档以后,我们自己去配置一下,下面就看下配置文件:
[root@linux-node1 ~]# cat /etc/logstash/conf.d/codec.conf
input{
stdin {
codec => multiline{
pattern => "^\[" # 正则表达式,匹配以[开头的行
negate => true # 布尔值,true表示启用,匹配上干活,
what => "previous" # what这参数意思是说匹配上[后,是取[前面的内容还是后面的内容,我这里写的previous,表示拿去[前面的内容。
}
}
}
filter{
}
output{
stdout{
codec => rubydebug
}
}
配置完成后,启动服务:
[root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f codec.conf
测试下,看是否能够匹配以[开头的行
[root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f codec.conf
Settings: Default pipeline workers: 2
Pipeline main started
asdfasdf
xcfv
sdf
swe
rwer
asdf
[fasdfasdf #只要以[开头的行,都匹配上去了。并且都是[前面的内容。
{
"@timestamp" => "2016-12-08T23:25:14.350Z",
"message" => "asdfasdf\nxcfv\nsdf\nswe\nrwer\nasdf",
"@version" => "1",
"tags" => [
[0] "multiline"
],
"host" => "linux-node1"
}
1111111111
2222222222222
33333333333
44444444444
[ #只要以[开头的行,都匹配上去了。并且都是[前面的内容。
{
"@timestamp" => "2016-12-08T23:25:25.374Z",
"message" => "[fasdfasdf\n1111111111\n2222222222222\n33333333333\n44444444444",
"@version" => "1",
"tags" => [
[0] "multiline"
],
"host" => "linux-node1"
}
下面我们就通过这个模块来说说如何匹配java形式的日志
我们这里使用elasticsearch的日志来做分析,elasticsearch的日志形式就是java 的,它的日志路径是/var/log/elasticsearch/myes.log。
我们之前说过,logstash它会有一个文件专门存它需要读取哪些文件,所以再次启动之前,由于读取的是同一个文件(之前的配置文件也配置成了去读该文件),所以这里需要把logstash的sincedb数据库给删除,这样就能从头开始搜集了。同时在head模块里面,把对应的es-log索引也需要删除。
[root@linux-node1 logstash]# find / -name ".since*"
/root/.sincedb_a9b9fed7edff6fd888ffe131a05b5397
/root/.sincedb_1fb922e15ccea4ac0d028d33639ba3ea
/var/lib/logstash/.sincedb_a9b9fed7edff6fd888ffe131a05b5397
/var/lib/logstash/.sincedb_1fb922e15ccea4ac0d028d33639ba3ea
[root@linux-node1 logstash]# cat /root/.sincedb_a9b9fed7edff6fd888ffe131a05b5397
395042 0 2051 5972 #注意看第一列的数字,其实是日志文件的inode
395128 0 2051 5177
[root@linux-node1 logstash]# ls -li /var/log/elasticsearch/myes.log #-li参数是能够显示文本的inode节点
395042 -rw-r--r--. 1 root root 454310 Dec 9 07:02 /var/log/elasticsearch/myes.log # 第一列就是这个文件的inode节点,和/root/.sincedb_1fb922e15ccea4ac0d028d33639ba3ea 一致。
注意,sincedb记录的是日志文件的inode。
删除elaticsaerch记录了myes.log的sincedb文件,同时也在head的web界面删除es-log的索引,让es重新开始搜集日志。
[root@linux-node1 ~]# rm -f /root/.sincedb_a9b9fed7edff6fd888ffe131a05b5397 # 找到记录了myes.log这个inode的sincedb数据库,删除即可
此时我们修改配置文件,使用multiline模块,配置文件请看下面:
[root@linux-node1 conf.d]# cat /etc/logstash/conf.d/codec.conf
input{
file {
path => ["/var/log/messages","/var/log/secure"]
type => "system-log"
start_position => "beginning"
}
file {
path => "/var/log/elasticsearch/myes.log" # 读取es的j
type => "es-log"
start_position => "beginning"
codec => multiline {
pattern => "^\[" # 正则匹配
negate => true
what => "previous" # 使用[之前的
}
}
}
filter{
}
output{
if [type] == "system-log" {
elasticsearch {
hosts => ["192.168.141.4:9200"]
index => "system-log-%{+YYYY.MM}"
}
}
if [type] == "es-log" {
elasticsearch {
hosts => ["192.168.141.4:9200"]
index => "es-log-%{+YYYY.MM}"
}
}
}
确认无误后,我们启动logstash
[root@linux-node1 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/codec.conf
然后我们同时重启elasticsearch在linux-node1和linux-node2上
[root@linux-node1 ~]# service elasticsearch restart # node1节点
[root@linux-node2 ~]# service elasticsearch restart # node2节点
我们重新打开head模块,访问地址是:http://192.168.141.3:9200/_plugin/head/
可以看到有es-log这个新的索引产生了
我们打开kibana页面,地址是http://192.168.141.3:5601
由于我们配置文件与上一篇博客写的不是一样的,上一篇是以年月日来作为索引,这里是使用年月来作为索引,所以这里需要重新增加一个索引。
然后切换到Discovery模版下,切换到es-log下面
此时我们可以看到java 的日志就是把多行合并成一行了,这样就一个事件一段了,不会把一个事件拆分多行显示了。
elk系列2之multiline模块的使用 - 温柔易淡 - 博客园
http://www.cnblogs.com/liaojiafa/p/6155322.html
elk系列2之multiline模块的使用【转】的更多相关文章
- elk系列2之multiline模块的使用
preface 上回说道了elk的安装以及kibana的简单搜索语法,还有logstash的input,output的语法,但是我们在使用中发现了一个问题,我们知道,elk是每一行为一个事件,像Jav ...
- elk系列6之tcp模块的使用【转】
preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...
- elk系列6之tcp模块的使用
preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...
- elk系列5之syslog的模块使用【转】
preface rsyslog是CentOs系统自带的的一个日志工具,那么我们就配置logstash来接受rsyslog的日志. logstash的syslog模块 linux-node2上操作log ...
- elk系列8之logstash+redis+es的架构来收集apache的日志【转】
preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的,架构图如下: 解释下这个架构图的流程 首先前端log ...
- elk系列7之通过grok分析apache日志【转】
preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...
- elk系列1之入门安装与基本操作【转】
preface 我们每天都要查看服务器的日志,一方面是为了开发的同事翻找日志,另一方面是巡检服务器查看日志,而随着服务器数量以及越来越多的业务上线,日志越来越多,人肉运维相当痛苦了,此时,参考现在非常 ...
- elk系列3之通过json格式采集Nginx日志【转】
转自 elk系列3之通过json格式采集Nginx日志 - 温柔易淡 - 博客园http://www.cnblogs.com/liaojiafa/p/6158245.html preface 公司采用 ...
- ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)
本文章将会继承上一篇文章,主要讲通过工具来进行日志的收集与发送,<ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd> Nxlog是一个日志收集工具, ...
随机推荐
- 具体数学斯特林数-----致敬Kunth
注意这里讲的是斯特林数而非斯特林公式. 斯特林数分两类:第一类斯特林数 和 第二类斯特林数. 分别记为. 首先描述第二类斯特林数. 描述为:将一个有n件物品的集合划分成k个非空子集的方法数. 比如集合 ...
- 各行业最受欢迎的编程语言,硬件最青睐C和C++
近日,HackerRank发布了2018年开发技能报告,其中探讨了一些对理解开发人员环境至关重要的事情,本文将摘录编程语言排行部分 2018 开发者技能调查:不同行业中最热门的编程语言 尽管新语言经常 ...
- 【BZOJ1758】【WC2010】重建计划(点分治,单调队列)
[BZOJ1758][WC2010]重建计划(点分治,单调队列) 题面 BZOJ 洛谷 Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表 ...
- NOIP2003 传染病控制 【搜索 + 卡时】
题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...
- 51nod1967 路径定向(欧拉回路+结论题)
看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ...
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- 关于OpenCV的stitching使用
配置环境:VS2010+OpenCV2.4.9 为了使用OpenCV实现图像拼接头痛了好长时间,一直都没时间做,今天下定决心去实现基本的图像拼接. 首先,看一看使用OpenCV进行拼接的方法 基本都是 ...
- HDU 3480 斜率dp
Division Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 999999/400000 K (Java/Others)Total ...
- [Java多线程]-线程池的基本使用和部分源码解析(创建,执行原理)
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 多线 ...
- shell多进程的实现
需求:多个脚本彼此互不干涉,同时运行,节省时间 菜鸟级实现: #!/bin/sh dir="/data/test" $dir/sbin/test1.sh >> $dir ...