Logstash学习资料
是什么
日志的分析,清洗
使用
bin目录是脚本目录
config目录是配置文件目录
Logstash是怎么工作的
一个开源的、服务端的数据处理pipeline(管道)。它开源接收多个源的数据,然后进行转换,最终将它们发送到指定的目的地。
Logstash实现的功能主要分为接收数据、解析过滤并转换数据、输出数据三个部分。对应的插件依次是,input、filter、output……,其中fileter是可选的,其他两个是必须的。
- input插件
- Output插件
安装使用
-
启动
nohup ./logstash -f logstash.conf & # 此处的conf文件里面定义了输入输出格式插件
-
logstash插件实例
input{ file { # 输入file插件 path => "/var/log/secure" } } output{ kafka { # 输出kafka插件 bootstrap_servers => "192.168.1.20:9092,192.168.1.30:9092,192.168.1.40:9092" topic_id => "osmessage" } }
-
Logstash事假文件的编写并从Kafka消费数据
input{ kafka { bootstrap_servers => "192.168.1.20:9092,192.168.1.30:9092,192.168.1.40:9092" topics => ["osmessage"] codec => "json" } } output{ elasticsearch { hosts => ["192.168.1.60:9200"] index => "osmessagelog-%{+YYYY-MM-dd}" } }
Logstash语法应用
基本语法组成
- Input
- Output
- Filter
Input
标准输入(stdin)
input{
stdin{
add_field => {"key" => "iivey"} #表示增加一行自定义输出
tages => ["add1"]
}
}
oupt{
stdout{
codec => rubydebug
}
}
-
Logstash编码插件
编码插件(Codec)可以在Logstash输入或者输出时处理不不同类型的数据
Codec插件支持常见的格式有plain、json、json_lines……
-
plain
是一个空的解析器,它可以让用户自己指定格式,也就是说输入什么格式,输出就是什么格式。
input{ stdin{} } output{ codec => "plain" }
-
json、json_lines
input{ stdin{} } output{ codec => "json" }
-
Filter
/usr/local/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns,在这个Logshtash的安装目录下可以查询Logstash自带的匹配模式
在线调试平台:grokdebug.herokuapp.com
-
匹配模式
-
删除字段
input{ stdin{} } filter{ grok{ match => ["message","%{IP:clientip}\ \[%{HTTPDDATE:timestamp}\]"] remove_field => ["message"] #表示删除某个字段 } date { #时间插件 match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"] #表示自己定义的时间赋给系统 } mutate { remove_field => ["timestamp"] # 上面时间被修改后,这里可以删除时间字段 } } output{ stdout{ codec => rubydebug } }
-
时间处理(Date)
-
数据修改(Mutate)
-
GeoIP地址归类查询
一个稍微有点难度的匹配
GREEDYDATA :grok中科院匹配任何字符
input{
stdin{}
}
filter{
grok{
match => {"message" => "%{TIMESTAMP_ISO8601:localtime\|\~\|%{IPORHOST:clientip}\|\~\|(%{GREEDYDATA:http_user_agent})\|\~\|(%DATA:http_referer)\|\~\|%{GREEDYDATA:mediaid}{GREEDYDATA:http_user_agent})\|\~\|(%DATA:http_referer)\|\~\|%{GREEDYDATA:mediaid}\|\~\|%{GREEDYDATA:osid}"}
}
}
data {
match => ["localtime","yyyy-MM-dd'T'HH:mm:ssZZ"]
target => "@timestamp" #target表示赋值给@timestamp
}
mutate {
remove_field => ["localtime"]
}
output{
stdout{
codec => "rubydebug"
}
}
Output
- 输出到Elasticsearch集群
output{
elasticsearch{
host => ["192.168.1.60:9200"]
index => "logstash-%{+YYYY.MM.dd}" #索引名称,可以使用变量格式,索引名称必须是小写字母,不能是大写
manage_template => false #是否开启自动管理模板的功能
template_name => "template_web_access_log" # 自定义模板的名称
}
}