Filebeat 是轻量级的数据收集器, 占用资源少, 支持系统很多, 是ELK 后期增加的一员。
一. 从官网下载, win10 是win 64位版本
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
目前是7.0.1 版本。
二. 把下载的filebeat-7.0.1-windows-x86_64.zip 解压
我是把里面的文件夹解压到 D:\program files\ 下,然后把文件夹filebeat-7.0.1-windows-x86_64 改名为 Filebeat。
三. 用管理员模式运行 power shell
cd ‘D:\program files\filebeat’
D:\program files\filebeat> .\install-service-filebeat.ps1
这个操作是把filebeat 注册成windows 服务, 如果你有安装类型360 安全卫士,会有提醒拦截,允许就行了, 成功的话,显示
如果上面的脚本执行不成功,有权限的问题, 执行下面的试试(我没验证是否可行)
PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
四. 配置
官方的配置文档:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html
当然我们肯定不是什么都不用配置就可以使用的, 具体的配置文件是
用文本工具打开filebeat.yml, 我个人喜欢用editplus, 注意因为用yml, 所以每段的缩进或空格都不能随便来的。
1. 配置输入 inputs
如果有不同的配置, 就用多个- type: log, 但是如果只是多个目录, 一个- type: log 就够了
如:
- type: log
配置1
- type: log
配置2
每个- type: log
enabled: true #启用
paths:
- G:\testlog\*.log #用了* 的通配符,这个百度一下就了解了用法了
- 其他目录。。。。。可以配置多个目录
#exclude_lines: ['^DBG'] #不包括的行,用了正则表达式,这里是排除debug 的行数据
#include_lines: ['^ERR', '^WARN'] #包括的行, 用了正则表达式, 这是是指定错误或警告的行数据
#exclude_files: ['.gz$'] #排除的文件, 这里是排除gz 的压缩文件
#fields: #自定义的字段和值, 用于传给输出
自定义字段1: 自定义字段的值1
### Multiline options 多行配置,如java 的exception 输入整个栈的内容
#multiline.pattern: ^\[ #正则表达式,这个后面还有两个参数配合使用
#multiline.negate: false
#multiline.match: after #官方的例子是最好的说明了
#多行的其他设置
#multiline.flush_pattern #指定正则表达式,匹配的多行信息将会结束,内容将会从内存中输出并刷新,特别适合有指定开始标志和结束标志的日志信息。
#multiline.max_lines
#最大的合并行的行数, 默认是500
#multiline.timeout
#合并行的超时时间,默认5秒,超过5秒没有新的行加入,已合并的行将会被发出
------------------------下面是*.yml 文件没有写到的 -----------------------------
#recursive_glob.enabled #是否包括子目录,最多8层目录,默认是true, 可以设置为false
#encoding: utf-8 #文件编码,对于有中文的这个配置就很重要了,最后用编码utf-8, 如果用gb 系统编码,最新是gb18030, 比utf-8 支持的汉字要多
#harvester_buffer_size #每一行的缓存字节数, 默认是
16384, 设当的缓存能提高效率
#max_bytes #一次性发送的消息最大字节数,超过的会被抛弃,特别是对多行的数据有用,默认
10MB (10485760)
#ignore_older #忽略更新时间在指定时间段前的文件,如忽略更新在2个小时前的文件。默认值是0,表示不启用该功能。启用该功能的话,可以使用时间字符串,2h(2小时)或 5m(5分钟)。这个配置项的值必须比
close_inactive 的值大, 为什么呢? 后面有说明, 忽略的文件必须是关闭的, 对于打开的文件, 就要关闭后再忽略了, close_inactive 配置的时间就是多久没更新就关闭文件的句柄。
## close_* 文件关闭的一些配置
#close_inactive #文件在指定时间内没有再次被采集,filebeat 关闭该文件的句柄。如果后面文件有更新,还是会被采集到的。默认是5m(5分钟)。如果文件的更新频率比较固定,我们可以设置关闭的时间比更新的时间高一些,这样每次都能实时采集,不然就是要等下一次的扫描周期才会采集。
#close_renamed #配置了这项的话,文件改名或移动,filebeat 将关闭文件的句柄。实践中,一些日志文件达到某些条件(如大小lin49940,行数或日期等),就会重新创建一个新的文件,老的文件改名,由于filebeat 是指向文件句柄的,所以文件改名或移动对其识别是没影响的,如果配置了这个,那么filebeat 将关闭文件句柄,不再读取文件。
#close_removed #配置了这项的话,文件删除,filebeat 将关闭文件句柄,不再采集。特别是大文件,如果没有采集完全就被删除了,那么采集就不完整了。
#close_timeout #timeout 超时,容易让人误解这个配置项的意义。它其实是采集器的生命周期,到了时间就停止采集,等待下一次的扫描周期。
##clean_* 清理
registry 文件, registry 文件会记录我们采集过的文件和文件内部的位置, 但是如果我们采集的文件很多,采集进行很久了, 那么registry 文件将会很大,所以必须有一个操作来维护registry 文件,减少它的大小。
#clean_inactive #清理
registry 文件 中不活跃的文件状态,设定的时间必须大于ignore_older + scan_frequency 的时间设定值。如果清除状态的文件再次更新, 那么文件会被从头开始采集。官方文档写了一个这个配置项最有用的地方,就是Linux系统的 inode 重用问题导致 filebeat 认错文件的问题。个人lin49940 追加一个,就是业务中不会再被更新的日志文件,如有时间周期的日志文件,归档的日志文件等。
#clean_removed #该配置项是默认启用的,如果文件被改名,移动或者删除, 那么这些文件的状态将从
registry 文件 中清除。 当时有一个场景要注意, 就是当我们读取文件夹的权限被没收,然后再此被给与, 这个时候文件夹下面的文件的状态会从registry 文件被清除, 这些文件将会从头开始采集,因为这个由于,官方是建议关闭这个配置项的。如果我们禁用close_removed 配置项的话,那么必须同时禁用该配置项。
#scan_frequency #扫描指定文件夹的频率,默认是10s(10秒),设置1s 扫描filebeat 也没问题, 但是不建议扫描时间低于1秒。如果你需要近乎实时同步数据,那也不要把这个值配置得很低, 我们可以修改
close_inactive 的值,一直打开的文件句柄会被持续轮询。
#scan.sort #排序字段,默认是禁用的,属于还在实验中的阶段,一般有用的话,文件修改时间或文件名称作为排序字段
#
scan.order
#搭配前面的排序字段使用(asc
or desc
)升序和倒序,默认是升序,也是属于实验的阶段。
#tail_files
#从文件尾部开始扫描,默认是false, 如果是true,就是只关心当前及后面发生的日志,不关心前面的日志了。
#symlinks #软链接,要理解的话就是windows 的快捷方式了,像我们同一个软件装了几个版本,但是我们每次想指定一个默认的版本使用,用软链接就很适合了,切换版本修改一下软链接就行了。Linux下安装python3后也会用到软链接,用于默认使用python3,而不是python2
没有了 document_type 了。
五. 启动
命令启动或者在服务里面启动
PS C:\Program Files\Filebeat> Start-Service filebeat