ELK学习笔记(二)【原创】

在[url=http://zhenggm.iteye.com/admin/blogs/2336814]ELK学习笔记(一)【原创】[/url]中,介绍了Logstash的入门,本文再对Logstash进行分析,并将日志导入ES中。
[b]1. input[/b]
input 有很多种, 如stdin, file, log4j 等。这里只着重分析file, 下次在分析log4j.

input{
file {
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
charset => "UTF-8"
}
path => ["/usr/local/apache-tomcat-gtw/logs/catalina.*"]
start_position => "beginning"
discover_interval => 2
sincedb_path => "/usr/share/logstash/conf/logstash_gateway/config/tomcat_sincedb.txt"
sincedb_write_interval => 2
}
}

codec 使用多行模式分割日志
path 日志路径
start_position 表示从头开始
discover_interval 每两秒去扫描文件夹是否有日志文件变化
sincedb_path 记录日志读取到第几行
sincedb_write_interval 每两秒记录一次位置信息

[b]2. filter[/b]
上一篇中在filter中主要采用split对日志进行解析, 这一篇主要采用json模板来进行匹配。

filter {
mutate{
gsub => [ "message", "\[", "" ]
gsub => [ "message", "]", "" ]
remove_field => [ "@version" ]
}
grok {
patterns_dir => "/usr/share/logstash/conf/logstash_gateway/logstash-patterns"
match => {
"message" => "%{DATETIME:datetime} %{APP:app} %{LOGLEVEL:level} %{JAVACLASS:class} %{METHOD:method}"
}
}
if [level] == 'DEBUG' {
mutate {
replace => ["level_code",1000]
convert => {
"level_code" => "integer"
}
}
}
if [level] == 'INFO' {
mutate {
replace => ["level_code",2000]
convert => {
"level_code" => "integer"
}
}
}
if [level] == 'WARN' {
mutate {
replace => ["level_code",3000]
convert => {
"level_code" => "integer"
}
}
}
if [level] == 'ERROR' {
mutate {
replace => ["level_code",4000]
convert => {
"level_code" => "integer"
}
}
}
}

gsub 是对message中的[]进行替换,因为[是用来多行匹配的,在日志中实际没作用。
remove_field 移除不需要的字段 @Version字段是logstash自动加的,不需要
grok 采用正则对日志进行匹配
patterns_dir 正则表达式文件路径
%{DATETIME:datetime} 表示第一个字段是时间类型,转化为datetime field。
%{APP:app} 表示第二个字段是APP类型(自定义正则),转化为app field. 以下类推
后面是根据日志级别,定义level_code以便报表统计

[b]3.output[/b]
分别输出到ES和控制台

output {
elasticsearch {
hosts => ["192.168.3.140"]
index => "gateway"
template => '/usr/share/logstash/conf/logstash_gateway/template/logstash-gateway.json'
template_name => 'logstash-gateway'
template_overwrite => true
flush_size => 20000
idle_flush_time => 10
}
stdout{
codec => rubydebug
codec => plain{charset=>"UTF-8"}
}
}

hosts 搜索引擎地址
index 索引名称
template 模板文件
template_name 模板文件中的模板名称
template_overwrite 设为true,当模板变更时可以更新
flush_size 每次20000再新增索引
idle_flush_time 超过10s,如果还没到达20000也刷新索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值