ELK
Filebeat的使用前言
Logstash功能虽然强大,但是它依赖java、在数据量大的时候,Logstash进程会消耗过多的系统资源,这将严重影响业务系统的性能,而filebeat就是一个完美的替代者,filebeat是Beat成员之一,基于Go语言,没有任何依赖,配置文件简单,格式明了,同时,filebeat比logstash更加轻量级,所以占用系统资源极少,非常适合安装在生产机器上。一、Filebeat下载安装
1.Filebeat下载
直接从
https://www.elastic.co/downloads/beats/filebeat
下载即可
下载完成后上传到服务器上
[root@VM-0-2-centos usr]# tar -zxvf filebeat-6.2.4-linux-x86_64.tar.gz -C /usr/local/
重命名一下
[root@VM-0-2-centos local]# mv /usr/local/filebeat-6.2.4-linux-x86_64.tar.gz / /usr/local/filebeat/
2.修改配置文件
vim打开/usr/local/filebeat/filebeat.yml
会发现如下没有被注释的配置
配置的意义如下
#=========================== Filebeat prospectors =============================
#定义filebeat输入数据的原型信息
filebeat.prospectors:
#指定数据的输入类型,这里是log,即日志,是默认值,还可以指定为stdin,即标准输入。
- type: log
#是否启用手工配置filebeat,而不是采用模块方式配置filebeat。
#如果使用默认设置fasle,则配置不会生效 线上一般都是true
enabled: false
#用于指定要监控的日志文件,可以指定一个完整路径的文件,也可以是一个模糊匹配格式
paths:
- /var/log/*.log
#============================= Filebeat modules ===============================
#引入filebeat的module配置
filebeat.config.modules:
# Glob pattern for configuration loading
# 模块化配置导入配置文件的地址
path: ${path.config}/modules.d/*.yml
# Set to true to enable config reloading
# 是否允许重新加载
reload.enabled: false
#==================== Elasticsearch template setting ==========================
#es模板配置
setup.template.settings:
#数据分片数
index.number_of_shards: 3
#============================== Kibana =====================================
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
#kibana的相关配置 -- <用不到>
setup.kibana:
#-------------------------- Elasticsearch output ------------------------------
#输出到es
output.elasticsearch:
# Array of hosts to connect to.
#es地址 可以是多个
hosts: ["localhost:9200"]
在本篇中,我们以输出到Logstash为例以上配置改为如下
filebeat.prospectors:
- type: log
#打开手动配置
enabled: true
#日志文件这里写自己要监听的文件的即可
paths:
- /var/log/*.log
#此处模块化配置不改或者全部注释都可以
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
#这里注释或者默认false
reload.enabled: false
#全部注释 或者不管
setup.template.settings:
index.number_of_shards: 3
#注释或者不管
setup.kibana:
#注释掉es配置
#output.elasticsearch:
#hosts: ["localhost:9200"]
#----------------------------- Logstash output --------------------------------
#打开logstash配置
output.logstash:
#默认使用内网去访问即可
hosts: ["172.19.xx.45:5044"]
启动
[root@VM-0-2-centos filebeat]# nohup ./filebeat -e -c filebeat.yml &
在nohup.out文件中查看日志是否启动成功
验证
进入/var/log文件夹下 新建一个aa.log
vim编辑该文件随便输入sdkjfsikjdhf
保存后
logstash标准输出模式下有如下展示信息即为成功
{
"@timestamp" => 2021-01-08T03:43:16.373Z,
"prospector" => {
"type" => "log"
},
"host" => "VM-0-2-centos",
"offset" => 14,
"tags" => [
[0] "beats_input_codec_plain_applied"
],
"@version" => "1",
"beat" => {
"name" => "VM-0-2-centos",
"hostname" => "VM-0-2-centos",
"version" => "6.2.4"
},
"message" => "sdkjfsikjdhf:",
"source" => "/var/log/aa.log"
}
重启
重启命令与启动命令一样
[root@VM-0-2-centos filebeat]# nohup ./filebeat -e -c filebeat.yml &
二、扩展
市面上有不少公司使用的Filebeat输出到kafka,然后被Logstash消费这种模式 可以有效地消峰。<这里给出一个正常的配置>
#这里是输入配置基本不变
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/*.log
#这里是定义了topic名称 供下面引用 不定义也可以
fields:
log_topic: xxx
#设置filebeat收集的日志中对应主机的名字,如果配置为空,则使用该服务器的主机名。
#这里设置为IP,便于区分多台主机的日志信息。
name: "172.16.xx.xxx"
#输出到kafka
output.kafka:
enabled: true
#指定输出数据到kafka集群上,地址为kafka集群IP加端口号。
hosts: ["172.16.xx.xx:9092", "172.16.xx.xx:9092", "172.16.xx.xx:9092"]
#kafka版本
version: "0.10"
#指定发送到集群上哪个topic 如果没有重新创建
topic: '%{[fields][log_topic]}'
#partition哈希取模轮询发送开启
partition.round_robin:
reachable_only: true
#并发负载均衡Kafka输出工作线程的数量
worker: 2
#ACK的可靠等级.0=无响应,1=等待本地消息,-1=等待所有副本提交.默认1.
#PS: 如果设为0,kafka无应答返回时,消息将丢失
required_acks: 1
#设置输出压缩编解码器
# 必须是 none, snappy 和 gzip 中的一个
# 默认是 gzip
compression: gzip
# json编码消息的最大允许大小, 更大的消息将被删除。默认值是 1000000 ( 字节 ) 。这个值应该等于 r,小于 broker 的 message.max.bytes
max_message_bytes: 10000000
#定义filebeat的日志输出级别 调试用debug
logging.level: debug