ELk+Filebeat部署
# 0 前言
Logstash依赖于JVM,在启动的时候大家也很容易就能发现它的启动速度很慢很慢,但logstash的好处是支持很多类型的插件,支持对数据做预处理。
而Filebeat很轻量,前身叫 logstash-forward
,是使用 Golang
开发的,所以不需要有java依赖,也很轻量,占用资源很小,但功能也很少,不支持对数据做预处理。
因此一般都是将 filebeat
+ logstash
组合使用,在每个节点部署filbeat,然后将监控的日志推送到数据缓冲层或直接推送到logstash集群内。
FileBeat和Logstash配合,实现背压机制。
# 1 Logstash
# 1.1 简介
Logstash是一个开源的数据采集引擎。它可以动态地将不同来源的数据统一采集,并按照指定的数据格式进行处理后,将数据加载到其他的目的地。最开始,Logstash主要是针对日志采集,但后来Logstash开发了大量丰富的插件,所以,它可以做更多的海量数据的采集。
它可以处理各种类型的日志数据,例如: Apache的web log
、Java的 log4j
日志数据,或者是系统、网络、防火墙的日志等等。它也可以很容易的和Elastic Stack的 Beats
组件整合,也可以很方便的和 关系型数据库
、 NoSQL数据库
、 MQ
等整合。
经典架构
# 1.2 安装
安装Logstash只需要将Logstash压缩包解压到系统就可以。
Logstash官方下载地址
https://www.elastic.co/cn/downloads/past-releases/logstash-7-6-1
tar -xvzf logstash-7.6.1.tar.gz -C /louis
# 1.3 配置
cp logstash-sample.conf logstash-filebeat2es.conf
vi logstash-filebeat2es.conf
2
3
input {
#从filebeat取数据,端口与filebeat配置文件一致
beats {
host => "0.0.0.0"
port => 5044
}
}
filter {
#只对nginx的json日志做json解析,系统message为其他格式,无需处理
if [filetype] == "log_nginxjson"{
json {
source => "message"
remove_field => ["beat","offset","tags","prospector"] #移除字段,不需要采集
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #匹配timestamp字段
target => "@timestamp" #将匹配到的数据写到@timestamp字段中
}
}
}
output {
# 输出es,这的filetype就是在filebeat那边新增的自定义字段名
if [filetype] == "log_nginxjson" {
elasticsearch {
hosts => ["localhost:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
} else if [filetype] == "log_system" {
elasticsearch {
hosts => ["localhost:9200"]
index => "msg-%{+YYYY.MM.dd}"
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 1.4 启动
启动Logstash之前先启动ElasticSearch。
cd /louis/logstash-7.6.1
bin/logstash -f config/logstash-filebeat2es.conf
2
3
# 2 FileBeat
# 2.1 简介
FileBeat专门用于转发和收集日志数据的轻量级采集工具。它可以为作为代理安装在服务器上,FileBeat监视指定路径的日志文件,收集日志数据,并将收集到的日志转发到Elasticsearch
或者Logstash
。
# 2.2 工作原理
启动FileBeat时,会启动一个或者多个输入 (Input)
,这些Input监控指定的日志数据位置。FileBeat会针对每一个文件启动一个 Harvester(收割机)
。 Harvester
读取每一个文件的日志,将新的日志发送到libbeat,libbeat将数据收集到一起,并将数据发送给输出 (Output)
。
# 2.3 安装
安装FileBeat只需要将FileBeat压缩包解压到系统就可以。
FileBeat官方下载地址
https://www.elastic.co/cn/downloads/past-releases/filebeat-7-6-1
tar -xvzf filebeat-7.6.1-linux-x86_64.tar.gz -C /louis
cd /louis
mv filebeat-7.6.1-linux-x86_64/ filebeat-7.6.1
2
3
4
5
# 2.4 配置
FileBeats配置文件主要分为两个部分。 input
和 output
。一个是用来输入数据的,一个是用来输出数据的。
cd /louis/filebeat-7.6.1
cat filebeat.yml
2
3
filebeat.inputs:
- type: log
enabled: false
paths:
- /var/log/*.log
2
3
4
5
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"
#----------------------------- Logstash output --------------------------------
#output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FileBeats配置
cp filebeat.yml filebeat-2logstash.yml
vi filebeat-2logstash.yml
2
3
同时监控 nginx
的 access
日志以及系统的 messages
日志,并且分别新增一个字段 filetype(自定义的)
来做区分,输出到localhost的5044端口,由 logstash
消费:
filebeat.inputs:
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /usr/local/nginx/logs/access.log
fields:
filetype: log_nginxjson
fields_under_root: true
- type: log
enabled: true
backoff: "1s"
tail_files: false
paths:
- /var/log/messages
fields:
filetype: log_system
fields_under_root: true
output.logstash:
enabled: true
hosts: ["localhost:5044"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.5 启动
先启动 logstash
,不然的话 filebeat
会找不到 logstash
的5044端口。
cd /louis/filebeat-7.6.1
./filebeat -e -c filebeat-2logstash.yml
2
3
查看es,发现已新增索引nginx-年月日。