Logstash
Logstash简介
具备实时数据传输能力的管道
支持多种数据源输入
支持多种过滤器
支持多种数据输出目的地
在ELK中作为日志收集器
安装Logstash
请见博文
http://blog.csdn.net/sanjiang521/article/details/108612188
Logstash如何工作
Logstash对任何事件处理分为三个阶段
输入(input):必须,如stdin、file、http、exec……
过滤器(filter):可选,如grok、mutate……
输出(output):必须,如stdout、elasticsearch、file……
编解码器
作为输入或输出插件的一部分,分离传输与序列化过程
运行Logstash的两种方式
logstash -e CONFIG_STRING //使用给定的配置字符串,其格式同配置文件
logstash -f CONFIG_PATH //读取配置文件
Logstash配置语法
配置文件结构
# 输入
input {
...
}
# 过滤器
filter {
...
}
# 输出
output {
...
}
# 验证文件
logstash -f CONFIG_PATH -t
Logstash数据类型
输入插件
file:从文件中获得事件流
input {
file {
path =>"/var/log/message"
start_position =>"beginning"
sincedb_path => "/dev/null"
}
}
filter {}
output {
stdout {}
}
#多文件输入
input {
file {
path =>["/var/log/messages","/var/log/messages-2019*"]
}
}
……
编解码器
input {
file {
path =>"/data/stu.json"
start_position =>"beginning"
sincedb_path => "/dev/null"
codec => "json"
}
}
filter {}
output {
stdout { codec => "rubydebug"}
}
json
rubydebug
过滤器
grok:使用正则表达式解析任意文本和结构
100 10.10.0.1 →%{NUMBER:duration} %{IP:client}
input{stdin{}}
filter{
grok{
match=>{"message"=>"%{NUMBER:duration} %{IP:client}"}
}
}
output{ stdout{codec=>rubydebug}}
grok自定义模式
(?<field_name>the pattern here)
2019-01-01 0:0:0 100 10.10.0.1
→
(?<date>\d*[./-]\d*[./-]\d* \d*:\d*:\d*) %{NUMBER:duration} %{IP:client}
输出插件
stdout
file
elasticsearch
output {
stdout{codec=>rubydebug}
file {
path =>"/root/message.out"
}
elasticsearch{
hosts=>["localhost:9200"]
index=>"syslog"
}
}
注:
output可以同时使用多个输出插件
file默认以JSON格式输出每行
默认为索引名称为"logstash-%{+YYYY.MM.dd}"
条件判断
控制filter和output处理特定事件
if EXPRESSION {
...
} else if EXPRESSION {
...
} else {
...
}
比较操作
相等: ==, !=, <, >, <=, >=
正则: =~(匹配正则), !~(不匹配正则)
包含:in(包含), not in(不包含)
布尔:and(与), or(或), nand(与非), xor(异或)
取反:!(表达式)
控制duration<100的行输出至stdout
input{stdin{}}
filter{
grok{
match=>{"message"=>"%{NUMBER:duration} %{IP:client}"}
}
mutate{convert=>["duration","integer"]}
}
output{
if [duration]<100{
stdout{codec=>rubydebug}
}
}
注:
[字段名]表示字段引用
mutate过滤器可以重命名、删除、替换和修改字段