2017.8.1 logstash基础语法学习
数据类型
1 bool:debug => true 2 string:host => "hostname" 3 int:port => 514 4 array:match => ["datetime", "UNIX", "ISO8601"] 5 hash:options => { 6 key1 => "value1", 7 key2 => "value2" 8 }
字段引用:
[field_name]
[geoip][location][0]
"the longitude is %{[geoip][location][0]}"
条件判断
1 判等:==, !=, <, >, <=, >= 2 正则:=~, !~ 3 包含:in, not in 4 布尔:and, or, nand, xor 5 一元:!()
命令行参数:
1 执行标准输入输出 bin/logstash -e ''
2 执行指定配置内容 bin/logstash -e '配置内容'
3 执行配置文件 bin/logstash -f bin/logstash.conf
4 读取confs下所有配置文件,拼接成大的配置文件再执行 bin/logstash -f /bin/confs/
5 测试配置文件 bin/logstash -f bin/logstash.conf --configtest
6 输出错误到日志 bin/logstash -l bin/logstash/logs/logstash.log
7 其他略。
输入插件
1 标准输入
1 input { 2 stdin { 3 add_field => {"key" => "value"} 4 codec => "plain" 5 tags => ["add"] 6 type => "std" 7 } 8 }
type:标记事件类型
tags:在数据处理过程中,由具体的插件来添加和删除的。 ???
2 读取文件
1 input 2 file { 3 path => ["/var/log/*.log", "/var/log/message"] 4 type => "system" 5 start_position => "beginning" 6 } 7 }
start_position : logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F
的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,有点类似 cat
,但是读到最后一行不会终止,而是继续变成 tail -F
。
3 读取网络数据
4 生成测试数据
1 input { 2 generator { 3 count => 10000000 4 message => '{"key1":"value1","key2":[1,2],"key3":{"subkey1":"subvalue1"}}' 5 codec => json 6 } 7 }
ELK的性能如何?
ELK并不是一个软件,而是一个并不耦合的套件,所以需要分开讨论性能。
Logstash:logstash本身并不维护队列,所以要熟悉测试方法。另外,logstash给自己的线程都设置了单独的名称,可以top -H查看每个线程的负载情况。
es:es是一个分布式系统,所以需要关注在确定的单机处理能力前提下,性能能否做到线性拓展。另外,有效的利用mapping API很重要。
kibana:只是一个单页web应用,加载慢基本是由于es的请求响应不够快造成。
5 读取syslog数据
6 读取redis数据
作为单独一篇。
7读取collectd数据
3 编码插件
3.1 json编码
1 input { 2 file { 3 path => "/var/log/nginx/access.log_json"" 4 codec => "json" 5 } 6 }
3.2 合并多行数据
1 input { 2 stdin { 3 codec => multiline { 4 pattern => "^\[" 5 negate => true 6 what => "previous" 7 } 8 } 9 }
这个正则还可以用 grok 表达式,稍后你就会学习这方面的内容。
4 过滤器插件
4.1 grok
1 input {stdin{}} 2 filter { 3 grok { 4 match => { 5 "message" => "\s+(?<request_time>\d+(?:\.\d+)?)\s+" 6 } 7 } 8 } 9 output {stdout{}}
官方提供的预定义 grok 表达式见:https://github.com/logstash/logstash/tree/v1.4.2/patterns
filter { grok { patterns_dir => "/path/to/your/own/patterns" match => { "message" => "%{SYSLOGBASE} %{DATA:message}" } overwrite => ["message"] } }