Logstash的输入、过滤、输出插件

输入插件(Input):
  • stdin (前台输入、用于调试)
  • File (从主机文件中获取)
  • Redis (从redis中获取,当量日志较大时,在filebeat与logstash之间加个redis)
  • filebeat (logstash占用资源较大,所以使用filebeat进行日志收集)
  • 。。。。

1、所有输入插件都支持的字段

  • add_field:添加一个字段到一个事件,放到事件顶部,一般用来标记日志来源
  • tags:添加任意数量的标签,可以用来注明日志属性
  • type:为所有输入添加一个字段,可以用来表面日志类型

2、输入插件:file

  • 用于读取指定日志文件
input {
file {
path => "/var/log/test/*.log"
exclude => "cluster.log"
start_position => "beginning"
} }
filter {
}
output {
file {
path => "/tmp/test.log"
} }

常用字段:

  • path:指定日志文件路径
  • exclude:排除采集的日志文件
  • start_position:指定从什么位置读取日志,默认从结尾开始,beginning表示从头开始读

3、输入插件filebeat

input {
beats {
host => "0.0.0.0"
port => 5044
} }
filter { }
output {
file {
path => "/tmp/test.log"
} }

常用字段:

  • host: filebeat服务器监听地址
  • port: filebeat监听端口
过滤插件

过滤插件都支持的字段:

  • add_field 如果过滤成功,添加一个字段到这个事件
  • add_tags 如果过滤成功,添加任意数量的标签到这个事件
  • remove_field 如果过滤成功,从这个事件移除任意字段
  • remove_tag 如果过滤成功,从这个事件移除任意标签

1、过滤插件:json

示例数据:手动将该内容输入至输入插件收集的文件中
{"remote_addr": "192.168.1.10","url":"/index","status":"200"}
示例:解析HTTP请求
input {
file {
path => "/var/log/test/*.log"
} }
filter {
json {
source => "message"
} }
output {
file {
path => "/tmp/test.log"
} }

JSON插件:接收一个json数据,将其展开为Logstash事件中的
数据结构,放到事件顶层。
常用字段:

  • source 指定要解析的字段,一般是原始消息message字段
  • target 将解析的结果放到指定字段,如果不指定,默认在
    事件的顶层

2、过滤插件:KV

模拟数据:
www.ctnrs.com?id=1&name=aliang&age=30
示例:解析URL中参数
filter {
kv {
field_split => "&?"
} }

KV插件:接收一个键值数据,按照指定分隔符解析为Logstash
事件中的数据结构,放到事件顶层。
常用字段:
• field_split:指定键值分割符,默认空

3、过滤插件:Grok

Logstash内置的正则匹配模式,在安装目录下可以看到,路径:
vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
正则匹配模式语法格式:%{SYNTAX:SEMANTIC}SYNTAX 模式名称,模式文件中的第一列
• SEMANTIC 匹配文件的字段名
例如: %{IP:client}

Grok插件:如果采集的日志格式是非结构化的,可以写正则表
达式提取,grok是正则表达式支持的实现。
常用字段:
• match 正则匹配模式
• patterns_dir 自定义正则模式文件

正则表达式

符号功能
.匹配除换行符以外任意字符
[ ]匹配中阔号中任意字符
[^]匹配括号非括号内的任意字符
\d匹配一个数字
\D匹配非数字
\s匹配空字符、如:空格、tab
\S匹配非空白字符
\w匹配特殊字,如:a-Z、0-9、_、汉字
\W匹配非特殊字符
*匹配前一个字符0次或多次
+匹配前一个字符至少一次
匹配前一个字符0次或一次
{n}匹配前一个字符n次
{n,}匹配前一个字符至少n次
{n,m}匹配前一个字符n-m次
^以什么开头
$以什么结尾
\b匹配单词边界
\B匹配非单词边界
模拟数据:
192.168.1.10 GET /index.html 15824 0.043
示例:正则匹配HTTP请求日志
filter {
grok {
match => {
"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
} } }

自定义正则模式

vi /usr/local/elk/logstash/patterns
CID [0-9]{5,6}
# 模拟数据
192.168.11.1 GET /login.html 13242 0.02 123123

filter {
grok {
patterns_dir =>"/usr/local/elk/logstash/patterns"
match => {
"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{CID:cid}" 
} } }
输出插件

输出阶段:将处理完成的日志推送到远程数据库存储
常用插件:

  • file
  • Elasticsearch

1、输出插件:elasticsearch

Elasticsearch插件:将数据推送到ES存储。
常用字段:
• hosts 指定ES主机地址
• index 指定写入的ES索引名称,一般按日期ec 划分
示例:


output {
elasticsearch {
hosts => 
["192.168.31.61:9200","192.168.31.62:9200","192.168.31.63:9200"]
index => "microservice-product-%{+YYYY.MM.dd}"
} }
条件判断

1、操作符

  • 比较操作符:==,!= , < , > , <= ,>=
  • 正则匹配操作符:=~(匹配正则) ,!~(不匹配正则)
  • 成员操作符:in(包含) , not in(不包含)
  • 逻辑操作符:and(与),or(或), nand(非与) , xor(非或)
  • 一元运算符:!(取反) ,()(复合表达式) ,!()(对复合表达式结果取反)

2、实例

input {
file {
path => "/var/log/test/test.log"
add_field => {
"log_type" => "test"
} }
file {
path => "/var/log/test/prod.log"
add_field => {
"log_type" => "prod"
} } }
filter {
if [log_type] in ["test","dev"] {
mutate { 
add_field => { 
"[@metadata][target_index]" => "test-%{+YYYY.MM}" 
} 
}
} else if [log_type] == "production" {
mutate { 
add_field => { 
"[@metadata][target_index]" => "prod-%{+YYYY.MM.dd}" 
} 
}
} else {
mutate { 
add_field => { 
"[@metadata][target_index]" => "unknown-%{+YYYY}" 
} 
} } }
output {
elasticsearch {
hosts => "192.168.31.61:9200"
index => "%{[@metadata][target_index]}"
} }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值