filebeat 安装及采集规则

一 背景

ELK是3个开源产品的组合:

  • Elasticsearch、
  • Logstash
  • Kibana

ELK = Elasticsearch, Logstash, Kibana 是一套实时数据收集,存储,索引,检索,统计分析及可视化的解决方案。最新版本已经改名为Elastic Stack,并新增了Beats项目。

中文官网地址:https://www.elastic.co/cn/products/beats/filebeat  

当您要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,请告别 SSH 吧。Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。

filebeat 采集的数据可以输送至 Elasticsearch 或 Logstash。在 Kibana 中实现可视化。

也是小型互联网公司常用的开源方案,打点公司会根据自己的业务需求去造轮子。本文记录下filebeat的安装及采集规则:

二 安装

   对于Linux系统,官网是推荐:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.5.1-linux-x86_64.tar.gz

对于下载个人习惯不同,你也可以换成wget,更轻量一些。就是下载、解压。

我们使用的是之前的6.7版本。

运维为了统一,一版都去掉版本号。

mv filebeat-6.7.1-linux-x86_64 filebeat

cd filebeat 

三 配置

再具体配置参数之前,先大概扫盲下大概原理,这样更好的理解配置的参数;

Filebeat涉及两个组件:查找器prospector和采集器harvester,来读取文件(tail file)并将事件数据发送到指定的输出。

启动Filebeat时,它会启动一个或多个查找器,查看你为日志文件指定的本地路径。对于prospector所在的每个日志文件,prospector启动harvester。每个harvester都会为新内容读取单个日志文件,并将新日志数据发送到libbeat,后者将聚合事件并将聚合数据发送到你为Filebeat配置的输出。

   配置文件:$FILEBEAT_HOME/filebeat.yml。Filebeat可以一次读取某个文件夹下的所有后缀名为log的文件,也可以读取指定的某一个后缀名为log的文件。

paths:指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:

/var/log/* /*.log

则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。

encoding:指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的。

input_type:指定文件的输入类型log(默认)或者stdin。

exclude_lines:在输入中排除符合正则表达式列表的那些行。

include_lines:包含输入中符合正则表达式列表的那些行(默认包含所有行),include_lines执行完毕之后会执行exclude_lines。

exclude_files:忽略掉符合正则表达式列表的文件(默认为每一个符合paths定义的文件都创建一个harvester)。

fields:向输出的每一条日志添加额外的信息,比如"level:debug",方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,

fields_under_root:如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。

ignore_older:可以指定Filebeat忽略指定时间段以外修改的日志内容,比如2h(两个小时)或者5m(5分钟)。

close_older:如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h。

force_close_files:Filebeat会在没有到达close_older之前一直保持文件的handle,如果在这个时间窗内删除文件会有问题,所以可以把force_close_files设置为true,只要filebeat检测到文件名字发生变化,就会关掉这个handle。

scan_frequency:Filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s。

document_type:设定Elasticsearch输出时的document的type字段,也可以用来给日志进行分类。

harvester_buffer_size:每个harvester监控文件时,使用的buffer的大小。

max_bytes:日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。默认是10MB。

multiline:适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。这个配置的下面包含如下配置:

pattern:多行日志开始的那一行匹配的pattern

negate:是否需要对pattern条件转置使用,不翻转设为true,反转设置为false。

match:匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志

max_lines:合并的最多行数(包含匹配pattern的那一行),默认为500行。

timeout:到了timeout之后,即使没有匹配一个新的pattern(发生一个新的事件),也把已经匹配的日志事件发送出去

tail_files:如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。

backoff:Filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s。

max_backoff:Filebeat检测到某个文件到了EOF之后,等待检测文件更新的最大时间,默认是10秒。

backoff_factor:定义到达max_backoff的速度,默认因子是2,到达max_backoff后,变成每次等待max_backoff那么长的时间才backoff一次,直到文件有更新才会重置为backoff。比如: 

如果设置成1,意味着去使能了退避算法,每隔backoff那么长的时间退避一次。

spool_size:spooler的大小,spooler中的事件数量超过这个阈值的时候会清空发送出去(不论是否到达超时时间),默认1MB。

idle_timeout:spooler的超时时间,如果到了超时时间,spooler也会清空发送出去(不论是否到达容量的阈值),默认1s。

registry_file:记录filebeat处理日志文件的位置的文件

config_dir:如果要在本配置文件中引入其他位置的配置文件,可以写在这里(需要写完整路径),但是只处理prospector的部分。

publish_async:是否采用异步发送模式(实验功能)。

实际我们使用了yaml配置,主要是路径,json相关,以及写入ES的index及参数,很多排除及backoff都是没有配置。

#keys_under_root可以让字段位于根节点,默认为false

json.keys_under_root: true

#对于同名的key,覆盖原有key值
json.overwrite_keys: true

#将解析错误的消息记录储存在error.message字段中
json.add_error_key: true

#message_key是用来合并多行json日志使用的,
json.message_key: message

配置的参数很多,推荐官网:https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

启动:

cd filebeat

nohup ./filebeat -c product.yml >/dev/null 2>&1

同一个机器上可以启动多个filebat,但是运维通常不建议这样,(对于负载较高的:日志较多的,通常启动后再去kibana立即就能看的,但是对于启动多个filebeat,后面的可能过2分钟才能看到,这种就是前面的队列的日志没有处理完)

停止:

ps -ef|grep filebeat

kill -9 XXX

参考:

官网:https://www.elastic.co/guide/en/beats/filebeat/current/index.html

https://www.jianshu.com/p/0a5acf831409

发布了521 篇原创文章 · 获赞 94 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/103845908
今日推荐