日志收集组件
介绍
Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。
Filebeat的工作方式
启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。
部署
云平台部署
1.云平台有fileBeat
镜像,直接通过镜像仓库部署即可,部署后需要在被收集日志应用下,挂载存储,把日志文件存到该存储下,如下:
2.filebeat
部署之后需要从该存储下读文件:
3.fileBeat
需要挂载配置文件,文件中配置如下:
xml
filebeat.prospectors:
- input_type: log
enabled: true
paths:
# 指定存储地址下取哪些文件
- /deployments/logs/web_*.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
processors:
- add_cloud_metadata:
# 指定输出到elasticSearch的地址
output.elasticsearch:
hosts: ['10.19.46.34:9200']
#指定生成index的命名规范
index: "system_dev_log-%{+yyyy.MM}"
username:
password:
4.fileBeat
指定elasticSearch
的索引,如果不做处理会提示找不到索引,需要在elasticSearch
建立相应索引,或者设置成自动创建索引。关于elasticSearch
的相关操作,请参见elasticSearch
组件文章。
查询
数据直接推送到elasticSearch
,可以通过部署kinaba
来查询elasticSearch
中的数据,可以看到推过来的数据:
fileBeat调优
Filebeat 的缓存目前分为 memqueue 和 spool。memqueue 顾名思义就是内存缓存,spool 则是将数据缓存到磁盘中
1.memqueue
可配置的 全局参数 max_procs: 1 # 限制一个CPU核心,避免过多抢占业务资源
queue.mem.events: 2048 # 存储于内存队列的事件数,排队发送 (默认4096)
queue.mem.flush.min_events: 1536 # 小于 queue.mem.events ,增加此值可提高吞吐量 (默认值2048)
queue.mem.flush.timeout: 1s # 这是一个默认值,到达 min_events 需等待多久刷出
2.spool
xml
queue.spool.file:
path: "${path.data}/spool.dat" #spool文件的位置, 默认的位置是 ${path.data}/spool.dat
size: 512MiB # 文件大小提示, 一旦达到这个极限, spool 阻塞
page_size: 16KiB # 一个文件被分割成相同大小的多个页面 默认值是4KiB
prealloc #如果prealloc设置为true,则使用truncate将空间保留到文件大小.此设置仅在创建文件时使用。如果prealloc设置为false,文件将动态增长。如果prealloc为false且系统磁盘空间不足,则假脱机将阻塞。默认值为true。
queue.spool.write:
buffer_size: 10MiB # 设置 write buffer 大小
flush.timeout: 5s # 如果写缓冲区尚未满, 刷新事件的最大等待时间
flush.events: 1024 # 最大缓冲事件数。一旦达到限制,写缓冲区就会被刷新。
flush.codec: cbor # 用于序列化事件的事件编码。有效值为json和cbor。默认值为cbor。
queue.spool.read:
flush.timeout: 0s #如果 flush_timeout 为 0, 则立即将所有可用事件转发到输出。
注意
如果想用一个fileBeat收集多个应用的日志,只要在部署的第一步中,把这几个应用的日志都推到fileBeat的存储即可,注意日志名称要有区分,以及fileBeat采集日志文件的名称要能读到全部需要收集的日志文件。