1 、 logstash简介:
logstashj是一个数据分析软件,主要目的是分析log日志。整一套软件可以当作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。
首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化,它是调用Elasticsearch的接口返回的数据进行可视化。logstash和Elasticsearch是用Java写的,kibana使用node.js框架。
2、安装使用
# 解压安装包到/opt目录下
[root@bgsbtsp0006-dqf software]# tar -xf logstash-5.2.2.tar.gz -C /opt/
#改变宿主权限
[root@bgsbtsp0006-dqf opt]# chown -R bfd.bfd logstash-5.2.2/*
#运行logstash插件,input模块是输入(接受数据的流入) out模块是输出(将数据输出到某地方)
[bfd@bgsbtsp0006-dqf logstash-5.2.2]# ./bin/logstash -e 'input {stdin{} } output {{stdout}}'
stdin {} #可以从标准输入读数据
stdout {} # 标准输出
codes模块是将输出的内容按照某种格式输出,可以rubydebug,也可以是json,我们看看输出的是什么格式的内容。
./bin/logstash -e 'input {stdin{} } output {stdout{codec =>rubydebug} }'
3、可以写到es中去,首先得先安装了es,以及es-head插件,前面博客有写到。上面的两个链接也有该部分内容。
./bin/logstash -e 'input {stdin{} } output { elasticsearch {hosts => ["172.18.1.22:9200"] index => "logstash-%{+YYYY.MM.dd}"} }'
我们在es-head插件页面中发现会生成一个索引:实时写 立马就可以在es_head中看到数据
4、对于像一些多行日志处理multiline的使用。
写到文件中就是下面的格式
input{
file{
path => ["/opt/logstash-5.2.2/nohup.out"]
type => "logstash-log"
start_position => "beginning"
}
file{
path => ["/opt/elasticsearch/logs/bfd_cluster.log"]
type => "es-log"
# 从日志的开始位置读取
start_position => "beginning"
# 将多行日志变成一行,下面是匹配的格式。
codec => multiline {
# 遇到以这个开头[的就会形成一个事件。
pattern => "^\["
negate => true
#匹配到和上面的行合并成一条
what => "previous"
}
}
}
filter{
#暂时未讲到
}
output{
# 这里要加if判断,不然容易写到一起去。
if [type] == "logstash-log" {
elasticsearch {
hosts => ["172.18.1.22:9200"]
index => "logstash-log-%{+YYYY.MM}"
}
}
if [type] == "es-log" {
elasticsearch {
hosts => ["172.18.1.22:9200"]
index => "es-log-%{+YYYY.MM.dd}"
}
}
}