Logstash:
数据收集、日志数据
配置框架
input {
...
}
filter {
...
}
output {
...
}
四种类型的插件:input ,filter ,codec, output
数据类型
Array: [item1,item2,...]
Boolean: true, false
Bytes:
codec: 编码器
Hash: key => value
Number:
Password:
Path: 文件系统路径
String: 字符串
条件判断
==, != ,< ,<= ,> ,>=
=~ , !~
in , not in
and , or
()
logstash的工作流程:input | filter |output ,如无需对数据进行额处理,filter可省略
从标准输入,至标准输出
input {
stdin{}
}
output {
stdout {
codec => rubydebug
}
}
logstash的插件:
input插件:
file:从指定的文件中读取事件流;其工作特性类似于tail -f -1,使用FileWatch(ruby gem库)来监听文件是否发生变化;
.sincedb:记录了每个被监听的文件的inode,major,number,minor number,pos;
示例:
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
stdout {
codec => rubydebug
}
}
udp:通过udp协议从网络连接来读取messages,其必备参数为port,用于指明自己监听的端口,host则用指明自己监听的地址;
示例:
input {
udp {
port => 25826
codec => collectd {}
type => "collectd"
}
}
output {
stdout {
codec => rubydebug
}
}
filter插件:
用于将event执行ouput之前对其实现处理功能;
grok:用于分析并结构化文本数据;目前,是logstash中将非结构化日志数据转化为结构化的可查询数据的不二之选。
模式定义位置:
/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns
语法格式:
%{SYNTAX:SEMANTIC}
SYNTAX:预定义模式名称
SEMANTIC:匹配到的文本的自定义标识符;
示例:
input {
stdin{}
}
filter {
grok {
match => { "message" => "%{IP:clientip} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
}
}
output {
stdout {
codec => rubydebug
}
}
1.1.1.1 GET /index.html 30 0.23
%{IP:clientip} %{WORD:methond} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
{
"message" => "1.1.1.1 GET /index.html 30 0.23",
"@version" => "1",
"@timestamp" => "2018-05-15T04:16:39.808Z",
"host" => "0.0.0.0",
"clientip" => "1.1.1.1",
"method" => "GET",
"request" => "/index.html",
"bytes" => "30",
"duration" => "0.23"
}
自定义grok的模式:
grok的模式是基于正则表达式编写,其元字符与其它用到正则表达式的工具差别不大。
output插件:
示例:
stdout{}
elasticsearch{
cluster => "myes"
index => "logstash-%{+YYYY.MM.dd}"
}
redis {
port => "6379"
host => ["127.0.0.1"]
data_type => "list"
key =>
}
转载于:https://blog.51cto.com/limingyu/2116921