1、概述
web服务产生的日志文件,需要进行日志收集并进行可视化展示,一般使用filebeat和logstash组合。
2、组件介绍
2.1 Logstash
Logstash是具有实时收集日志功能,可以动态统一来自不同来源的数据,任何类型的事件都可以通过各种各样的输入,过滤功能和输出插件来丰富和转换。是一个重量级的服务,很占用内存,会影响到部署到本机器上的服务。
2.2 Filebeat
Filebeat是用于转发和采集日志数据的轻量级服务。能监视您指定的日志文件或位置,收集日志事件,并将它们转发到Logstash或elasticsearch (在 5.x 版本中,它也具备过滤的能力,但是还不及Logstash丰富)
2.3 选型
如果对于日志不需要进行过滤分析的,可以直接使用filebeat
如果需要对日志进行过滤分析, 可以使用filebeat+Logstash最合适,如果单独使用Logstash,多台机都需部署Logstash,每台机消耗资源大,filebeat+Logstash相结合,每台机部署filebeat进行数据采集, 一台机部署Logstash作为中心进行接收数据处理以及存储到不同的地方,
3、单点部署
3.1、 部署流程
3.2、 Filebeat.yml文件
filebeat.prospectors:
# 输入设置
- input_type: log
paths:
# 指定日志文件位置,可以使用正则方式,也可以指定多个路径的日志
- /mnt/log/log.*
# 输出设置
output.logstash:
# logstsh的ip地址
hosts: ["127.0.0.1:5044"]
loadbalance: true
index: filebeat
3.3、 Logstash.conf文件
input {
# 接收filebeat读取的数据
beats {
port => 5044
codec => "json"
}
}
output {
# 输出到es
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "test"
document_type => "log"
manage_template => false
}
}
3.4、Logstash.yml文件
http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
xpack.monitoring.enabled: false
3.5、 容器创建
Logstash
sudo docker run \
--restart always \
--name logstash \
-itd \
-p 5044:5044 \
-p 9600:9600 \
-v /path/logstash/pipeline/:/usr/share/logstash/pipeline/ \
-v /path/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
elastic/logstash
Filebeat
sudo docker run \
--restart always \
--name filebeat \
-itd \
-v /path/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /path/mylog:/data \
elastic/filebeat
4、多个日志源输出到不同存储位置
4.1、修改filebeat.yml
filebeat.prospectors:
# 日志源1
- input_type: log
paths:
- /data/video/log.*
tags: ["log1"] # 后面logstash用于区别哪个日志来源写入不同的位置
# 日志源2
- input_type: log
paths:
- /data/search/*.log
tags: ["log2"] # 后面logstash用于区别哪个日志来源写入不同的位置
# 输出位置
output.logstash:
# The Logstash hosts
hosts: ["127.0.0.1:5044"]
loadbalance: true
index: filebeat
4.2、修改logstash.conf
input {
# 接收filebeat读取的数据
beats {
port => 5044
codec => "json"
}
}
# 不同的日志输出到不同的位置
output {
if "log1" in [tags] {
elasticsearch{
hosts => ["127.0.0.1:9200"]
index => "test_logstash_log1"
document_type => "log"
}
}
if "log2" in [tags] {
elasticsearch{
hosts => ["127.0.0.1:9200"]
index => "test_logstash_log2"
document_type => "log"
}
}
}
参考链接
filebeat文档:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
logstash文档: https://www.elastic.co/guide/en/logstash/7.3
网友评论