0 说明
本次EFK分布式日志收集系统节点安排如下:
主机名 | 主机ip | 部署情况 |
chen-1 | 192.168.218.100 | Elasticsearsh Logstash Filebeat Namenode ResourceManager ZK |
chen-2 | 192.168.218.101 | Elasticsearsh SecondaryNamenode Datanode Nodemanager ZK |
chen-3 | 192.168.218.102 | Elasticsearsh Datanode Nodemanager ZK |
chen-4 | 192.168.218.103 | Kibana Datanode Nodemanager |
chen-5 | 192.168.218.104 | Datanode Nodemanager |
Filebeat和Logstash都具有日志采集功能,不同的是Filebeat是轻量级的,Logstash运行在JVM上,但其功能更强大。本文采用Filebeat+Logstash方式采集日志。
1 logstash介绍
Logstash是一个开源的数据收集引擎,它具有备实时数据传输能力。它可以统一过滤来自不同源的数据,并按照开发者制定的规范输出到目的地,支持正则表达式。
由于日志文件来源多(如:系统日志、服务器日志、tomcat日志、nginx日志等),且内容杂乱,不便于人类进行观察。因此,我们可以使用 Logstash 对日志文件进行收集和统一过滤,变成可读性高的内容
下载对应的Logstash-6.6.2版本,并解压安装。
2 案例1
Filebeat采集数据放入Lostash中过滤,再存入Elasticsearsh中,最后通过Kibana进行页面展示。
启动
./logstash -e 'input {stdin{}} output{stdout{}}' 表示标准输入和标准输出
此时,启动成功。我们在控制台输入内容就会打印出相应的内容
2.1 配置文件
logstash -f logstash.conf
input {
# 从文件读取日志信息
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
filter {
}
output {
# 标准输出
stdout {}
}
插件分类:
inputs 输入
codecs 解码
filters 过滤
outputs 输出
指定日志路径,日志类型和起始位置;没有过滤;输出为标准输出。
logstash -f logstash.conf启动
可以看到采集的日志如下
Gemfile中内置了Logstash内置的插件,根据不同的插件,我们可以将采集不同类型的日志文件,并进行过滤输出等操作。
如使用filter插件,更改配置文件,写入如下内容
input {
stdin {
}
}
filter {
mutate {
split => ["message", "|"]
}
}
output {
stdout {
}
}
此时会把“|”过滤掉,并得到相应的数组。
数据处理流程:
input->解码->filter->编码->output
输出到elasticsearch:
input {
# 从文件读取日志信息
file {
path => "/var/log/messages-20200906"
type => "system"
start_position => "beginning"
}
}
filter {
}
output {
elasticsearch {
hosts => ["192.168.218.100:9200"]
index => "msg-%{+YYYY.MM.dd}"
}
}
启动
此时进入kibana中查看,发现在es的索引中已经新建了一个msg-*的索引
可以对其内容进行查询
4 案例2
使用Logstash收集nginx的日志
新建配置文件,并输入如下内容:
启动./bin/logstash -f ./config/logstash-nginx.conf
可以看到logstash已经把nginx中的日志输出来了。
再页面重新访问
http://192.168.218.100/chen/hello
增加nginx日志输出,查看是否是实时输出的。
可以看到其实时输出了日志
接下来,我们再把nginx的输出日志存入es中
input {
file {
path => "/usr/local/nginx/logs/access.log"
type => "nginxaccess"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
elasticsearch {
hosts => ["192.168.218.100:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
修改logstash-nginx.conf配置文件,再重新启动,刷新kibana页面。可以看到es的索引中新增加了nginx标签