filter初级

Logstash安装

### 设置YUM源
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# tee /etc/yum.repos.d/elastic.repo << EOF
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# yum install -y logstash

基本使用

# tee filter.conf << EOF
input {
stdin {
}
}
filter {
mutate {
split => ["message", "|"]
}
}
output {
stdout {
}
}
EOF # /usr/share/logstash/bin/logstash -f filter.conf --path.settings /etc/logstash
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
12|fwd|343|dd
2017-09-18T01:35:03.342Z dnode [12, fwd, 343, dd]

ruby语法基本使用

# tee filter.conf << EOF
input {
stdin {
}
}
filter {
mutate {
split => ["message", "|"]
}
ruby {
code => '
msgs = event.get("message")
puts msgs.length
'
}
}
output {
stdout {
codec => "rubydebug"
}
}
EOF # /usr/share/logstash/bin/logstash -f ruby.conf --path.settings /etc/logstash
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
r|g
2
{
"@version" => "1",
"host" => "dnode",
"@timestamp" => 2017-09-18T09:06:12.546Z,
"message" => [
[0] "r",
[1] "g"
]
}

filter高级用法

grok插件

  • 自定义正则: 将需要提取的正则表达式用()括起来,然后使用?<tag_name>的固定语法格式给匹配项打上标签
  • 内置正则: 使用%{WORD:tag_name}内置正则地址

如果想要给一串很长的字符的很多字段都打上标签,即多个自定义组合的情况,那么正则必须能完全匹配整个字符串(可以使用.*的方式跳过不关心的字段)

在线测试地址

ruby插件

### 1. 先实现rb脚本,输入从变量读取,输出也保存到变量
### 2. 脚本的输入由变量改成event.get("name")
### 3. 脚本的输出由变量改成event.set("name", $value)

举例

样例字符串一

[NEW] tcp

  • 使用grok内置正则

  • 自定义正则

样例字符串二

[MAN] name=fwd age=12#[WONMEN]name=xb age=10

将字符串转换成JSON

### 编写rb脚本实现所需功能
# vim ruby.rb
$result = Hash.new
$people = []
begin
msgs = "[MAN] name=fwd age=12#[WONMEN]name=xb age=10"
msgs.split("#").each { |msg|
ret = Hash.new
item = msg[/(?<=\[)MAN(?=\])|(?<=\[)WONMEN(?=\])/]
if item.empty?
raise "Invalid format"
end
ret["sex"] = item beg = msg.index("name")
if beg == nil
raise "Invalid format"
end
msg[beg..-1].split().each { |item|
key, value = item.split("=")
ret[key] = value
}
$people.push(ret)
}
$result["peoples"] = $people
puts $result
end # ruby ruby.rb
{"peoples"=>[{"sex"=>"MAN", "name"=>"fwd", "age"=>"12"}, {"sex"=>"WONMEN", "name"=>"xb", "age"=>"10"}]}

将ruby脚本放入Logstash的filter插件中

# vim ruby.conf
input {
stdin {
}
}
filter {
ruby {
code => '
$result = Hash.new
$people = []
begin
msgs = event.get("message")
msgs.split("#").each { |msg|
# 分割后的字符串样例 => [MAN] name=fwd age=12
ret = Hash.new
# 匹配头部的[MAN]或[WONMEN]
item = msg[/(?<=\[)MAN(?=\])|(?<=\[)WONMEN(?=\])/]
if item.empty?
raise "Invalid format"
end
ret["sex"] = item # 获取从name到结束的字符串 => name=fwd age=12
beg = msg.index("name")
if beg == nil
raise "Invalid format"
end
msg[beg..-1].split().each { |item|
# 分割后的字符串样例 => name=fwd
key, value = item.split("=")
ret[key] = value
}
$people.push(ret)
}
$result["peoples"] = $people
event.set("message", $result)
event.set("[@metadata][drop]", false)
rescue
puts $!
event.set("[@metadata][drop]", true)
end
'
}
}
output {
if ![@metadata][drop] {
stdout {
codec => rubydebug
}
}
} # /usr/share/logstash/bin/logstash -f ruby.conf --path.settings /etc/logstash
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
[MAN] name=fwd age=12#[WONMEN]name=xb age=10 {
"@version" => "1",
"host" => "dnode",
"@timestamp" => 2017-09-20T08:40:26.293Z,
"message" => {
"peoples" => [
[0] {
"name" => "fwd",
"age" => "12",
"sex" => "MAN"
},
[1] {
"name" => "xb",
"age" => "10",
"sex" => "WONMEN"
}
]
}
}

参考文档

Logstash实践

关于Logstash中grok插件的正则表达式例子

elastic文档

elastic插件文档

Logstash过滤插件的更多相关文章

  1. Logstash收集nginx日志之使用grok过滤插件解析日志

    grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段. nginx日志的配置: log_format main '$remote_addr - $remote_user [ ...

  2. Logstash filter 插件之 grok

    本文简单介绍一下 Logstash 的过滤插件 grok. Grok 的主要功能 Grok 是 Logstash 最重要的插件.它可以解析任意文本并把它结构化.因此 Grok 是将非结构化的日志数据解 ...

  3. logstash常用插件解析

    官方地址:https://www.elastic.co/guide/en/logstash-versioned-plugins/current/index.html 配置文件写法: # 日志导入inp ...

  4. logstash过滤器插件filter详解及实例

    1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据弄成结构化和方便查询的结 ...

  5. 日志分析平台ELK之日志收集器logstash常用插件配置

    前文我们了解了logstash的工作流程以及基本的收集日志相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13761906.html:今天我们来了解下l ...

  6. logstash 过滤filter

    logstash过滤器插件filter详解及实例   1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解 ...

  7. Vanilla Masker – 功能强大的输入过滤插件

    Vanilla Masker 是一个纯 JavaScript 实现的输入内容过滤和自动转换插件.现在你可以使用一个简单而纯粹的 JavaScript 库来控制你的 input 元素,而不需要加载 jQ ...

  8. Logstash的插件

    Logstash的插件: input插件: File:从指定的文件中读取事件流: 使用FileWatch(Ruby Gem库)监听文件的变化. .sincedb:记录了每个被监听的文件的inode, ...

  9. Firefox火狐广告过滤插件Adblock Plus过滤规则包[中文维护小组]

    如果你经常使用Firefox火狐浏览器那么一定知道Adblock Plus这款广告过滤插件,功能非常强大,但是Adblock Plus广告过滤插件自带的过滤规则并不多,而且也不太适合我们中国的网站,在 ...

随机推荐

  1. JS命令模式个人理解

    JS命令模式个人理解 //BODY部分<body> <button id="execute">打开电视</button> <button ...

  2. a note of R software write Function

    Functionals “To become significantly more reliable, code must become more transparent. In particular ...

  3. 聊聊js跨域

    推荐先读一下这篇文章: https://segmentfault.com/a/1190000012469713http://www.dailichun.com/2017/03/22/ajaxCross ...

  4. 6_State 游戏开发中使用状态机

    ### State 不好的代码 ``` //处理玩家输入的代码 void Heroine::handleInput(Input input) { if (input == PRESS_B) { if ...

  5. 4_Prototype 原型

    #Prototype ``` // 不好的做法 monster ghost demon sorcerer class Spawner { public: virtual ~Spawner() {} ; ...

  6. 2017-2018-1 20179203 《Linux内核原理与分析》第七周作业及第三周测试总结

    攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  7. 【转】CSS制作图形速查表-存档

      http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet http://www.cnblogs.com/powertoolsteam/p/c ...

  8. How to manage concurrency in Django models

    How to manage concurrency in Django models The days of desktop systems serving single users are long ...

  9. 不重启linuxVMWare虚拟机添加虚拟磁盘

    Vsphere Client找到要添加磁盘的虚机,如图所示   点击虚机右键,在出现的下列列表中选择“编辑设置”如图   在打开的虚拟机属性中,在”硬件对话框点击“添加"按钮,如图   在添 ...

  10. POJ2689:素数区间筛选

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15820   Accepted: 4202 D ...