Filebeat是Elastic中的轻量文件收集系统,相比于功能更强悍的Logstash,当我们需求很单一,读取文件内容且对文件内容没有过多复杂处理时,最好使用FileBeat取代Logstash,以免造成不必要的内存开销。文档链接
基本功能
Filebeat负责收集文件并发送给下游服务。核心行为包含输入、处理过滤和输出。当然也有集成好配置的模块,通过模块与Es和Kibana链接可以直接在Kibana上看到组件的可视化。同时不难看出Filebeat其实对数据库的支持不是很健壮。
Input(输入)类型
截止7.6版本,开源的Filebeat可支持以下几种消息输入类型:
log 用得最多的输入类型;
stdin 标准的输入,从process或是piepline读取(可理解为脚本运行通道直接输入),一旦配置了这种input方式,其他 input将不再生效文档地址;
container 容器日志,例如docker、kubernate;
kafka 允许从Kafka队列中读取消息;
redis 从redis中读取slow log,截止到7.6版本,这还是个测试性的input类型;
udp 使用udp协议监听端口输入;
docker 从docker中读取日志,这一类型已在稍新的版本被container类型取代;
tcp 使用tcp协议监听端口输入;
syslog 使用udp或ycp协议监听端口,监听指定的BSD(RFC 3164)格式消息;
Output(输出)类型
截止7.6版本,开源的Filebeat可支持以下几种消息输出类型:
elasticsearch 通过Http API直接传给es存储
logstash 传输给Logstash进行处理
kafka 发送给Kafka消息队列
stdout 直接在控制台输出
redis 输出给redis服务
file 输出在另一个文件中
Modules(模块)
Filebeat有很多模块,其实就是写好了配置的yml,会将一些支持的应用日志发送给es,其消息格式还能让我们直接在Kibana上看到示例的可视化。例如Nginx module直接收集了Nginx的sccess和error日志,配置并启动后我们能直接通过Kibana看到访客来源、UA、状态码等的分布示例图。其他模块也是类似的,我们只需要配置可能并非默认的log文件目录和输出的es地址就可以轻松的实现对不同组件的监控,Filebeat提供的module非常丰富,可以去这里的官方文档查看。
QuickStart
这里只收录linux系统的部署,其他系统请前往官方文档查看命令行。
安装和部署
比较建议直接下载对应版本的tar.gz包,使用curl或者直接用wget,以7.6.1为例:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz
然后解压到想要的目录:
tar xzvf filebeat-7.6.1-linux-x86_64.tar.gz -C /home/ubuntu/filebeat
当然,也可以使用deb或是rpm:
# deb curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-amd64.deb sudo dpkg -i filebeat-7.6.1-amd64.deb # rpm curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-x86_64.rpm sudo rpm -vi filebeat-7.6.1-x86_64.rpm
文件配置-input
配置input,此处的type就是我们的输入类型,以log为例,更加详尽的设置可以去官网文档查看。注意此处的type是一个数组,所以我们可以让它同时运行多个input type,就像下面这样。但是官方文档中说明:有一点必须注意,多个type间涉及的消息或是文件一定不要有交集,可能会引起无法预料的异常。
默认的配置文件为filebeat目录下的filebeat.yml
#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: true # Paths that should be crawled and fetched. Glob based paths. # 路径 可以指定多个 paths: - /home/ubuntu/*/log.out # Exclude lines. A list of regular expressions to match. It drops the lines that are # matching any regular expression from the list. #按正则匹配,符合要求的行会被排除掉,这里指排除掉所有DBG开头的行 exclude_lines: ['^DBG'] # Include lines. A list of regular expressions to match. It exports the lines that are # matching any regular expression from the list. #按正则匹配,只会导出符合要求的行,这里指只保留所有含ERR和WARN的行 #include_lines: ['ERR', 'WARN'] # Exclude files. A list of regular expressions to match. Filebeat drops the files that # are matching any regular expression from the list. By default, no files are dropped. #按正则匹配,符合路径要求的文件会被排除掉,这里指定了一个文件,和以.gz结尾的任何未见 exclude_files: ['.gz$','/home/ubuntu/test/log.out'] #是否从文件末尾开始取 tail_files: true tags: ["javalog"] # Optional additional fields. These fields can be freely picked # to add additional information to the crawled log files for filtering #fields: # level: debug # review: 1 - type: log enabled: true paths: - /home/uftp/*/log.out exclude_lines: ['^DBG'] include_lines: ['INFO'] tail_files: true tags: ["javalog-2"] ### Multiline options # Multiline can be used for log messages spanning multiple lines. This is common # for Java Stack Traces or C-Line Continuation # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [ #multiline.pattern: ^\[ # Defines if the pattern set under pattern should be negated or not. Default is false. #multiline.negate: false # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern # that was (not) matched before or after or as long as a pattern is not matched based on negate. # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash #multiline.match: after
运行
filebeat对权限要求很高,所以要以root权限启动,如果你是tar.gz解压的filebeat,可以执行:
sudo chown root filebeat.yml sudo nohup ./filebeat -e & >/dev/null 2>&1 &
而对于deb或是rpm,直接以服务形式启动:
sudo service filebeat start
会使用配置好的默认的filebeat.yml和module.d下已经启动的module。
版本兼容性
来自Elastic官网的版本对照表,不难看出版本兼容性较为严苛,建议使用相同的一套版本进行开发。
Elasticsearch | Kibana | X-Pack | Beats^* | Logstash^* | ES-Hadoop (jar)* | APM Server | App Search |
---|---|---|---|---|---|---|---|
5.0.x | 5.0.x | 5.0.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.1.x | 5.1.x | 5.1.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.2.x | 5.2.x | 5.2.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.3.x | 5.3.x | 5.3.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.4.x | 5.4.x | 5.4.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.5.x | 5.5.x | 5.5.x | 1.3.x-5.6.x | 2.4.x-5.6.x | 5.0.x-5.6.x | ||
5.6.x | 5.6.x | 5.6.x | 1.3.x-6.0.x | 2.4.x-6.0.x | 5.0.x-6.0.x | ||
6.0.x | 6.0.x | 6.0.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | ||
6.1.x | 6.1.x | 6.1.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | ||
6.2.x | 6.2.x | 6.2.x | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.3.x | 6.3.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.4.x | 6.4.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.5.x | 6.5.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.6.x | 6.6.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.7.x | 6.7.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
6.8.x | 6.8.x | N/A** | 5.6.x-6.8.x | 5.6.x-6.8.x | 6.0.x-6.8.x | 6.2.x-6.8.x | |
7.0.x | 7.0.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | |
7.1.x | 7.1.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | |
7.2.x | 7.2.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | 7.2.x |
7.3.x | 7.3.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | 7.3.x |
7.4.x | 7.4.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | 7.4.x |
7.5.x | 7.5.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | 7.5.x |
7.6.x | 7.6.x | N/A** | 6.8.x-7.6.x | 6.8.x-7.6.x | 6.8.x-7.6.x | 7.0.x-7.6.x*** | 7.6.x |