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" # 自定义模板的名称
}
}
Logstash收集方法