一、基本介绍
Filebeat 是 beats 家族的一员,是一款用于转发和集中日志数据的轻量级工具。它可作为 Agent 安装在你的服务器上,监控指定的日志文件或位置,收集日志的时间,并转发到目标应用,如:Elasticsearch、Logstash、Kafka、Redis等。
Filebeat由两个主要组件组成:inputs 和 harvester。这些组件一起工作跟踪文件并将事件数据发送到指定的输出。
1、Harvester
每个文件都将启动一个 harvester,harvester 逐行读取每个文件,并将内容发送到指定的输出。在 harvester 运行时,文件描述符将保持打开的状态,如果文件被删除了或者被重命名,Filebeat还是会继续读取该文件,直到达到 close_inactive 的状态。这样的缺点是,在 harvester 关闭之前,磁盘的空间将不会释放。
关闭 harvester 后会产生以下后果:
- 如果在harvester还在读取文件时文件被删除,当文件处理程序关闭时,会释放基础资源。
- 只有在scan_frequency过后,文件的采集才会重新开始。
- 如果在harvester关闭的情况下移动或移除文件,则不会继续收集文件。
2、Input
Input 负责管理 Harvester 并找到所有读取的资源。如果 input 类型是日志,那么 input 会查找出驱动器上所有的问天,以及匹配定义的全局路径的所有文件,并为每一个文件启动一个 harvester。每个 input 按照各自的顺序执行。
以下示例配置 Filebeat 从指定的文件中收集数据:
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log
对于同一种的 input 也可以进行重复定义:
filebeat.inputs: - type: log paths: - /var/log/system.log - /var/log/wifi.log - type: log paths: - "/var/log/apache2/*" fields: apache: true fields_under_root: true
目前支持的 input 类型有:
- AWS CloudWatch
- AWS S3
- Azure Event Hub
- Cloud Foundry
- Container
- Docker
- filestream
- GCP Pub/Sub
- HTTP Endpoint
- HTTP JSON
- journald
- Kafka
- Log
- MQTT
- NetFlow
- Office 365 Management Activity API
- Redis
- Stdin
- Syslog
- TCP
- UDP
3、Filebeat如何保持文件的状态
Filebeat 通过注册表的磁盘记录 harvester 读取的上一个偏移量,并确保发送所有日志行。如果无法将内容输出到目的地,如:Elasticsearch或Logstash,Filebeat将记住最后发送的行,并在目标可触达时,再次读取文件。当 Filebeat 运行时,每个 input 的状态被记录在内存中,当 Filebeat 重启时,根据注册表中的数据进行状态重建,以保证每个 harvester 在上次读取的位置继续收集数据。
二、安装配置
1、使用Docker安装
其中 /Users/www/filebeat 目录为我本机的目录,大家可替换为自己的目录。
镜像地址:https://hub.docker.com/r/elastic/filebeat/tags
#获取镜像docker pull elastic/filebeat:8.0.0-rc1 #启动容器docker run -d--name=filebeat elastic/filebeat:8.0.0-rc1 #拷贝数据docker cp filebeat:/usr/share/filebeat /Users/www/filebeat chmod-R777 /Users/www/filebeat #filebeat.yml的详情见下面chmod go-w /Users/www/filebeat/filebeat/filebeat.yml #删除原来的容器docker rm-f filebeat #重新创建容器docker run -d \ --name=filebeat \ --restart=always \ -v /Users/www/filebeat/filebeat:/usr/share/filebeat \ -v /Users/www/filebeat/log_messages:/var/log/messages \ elastic/filebeat:8.0.0-rc1
filebeat.yml配置如下:
setup.kibana: host: "172.17.0.4:5601"#指定kibana username: "elastic"#用户 password: "elastic"#密码filebeat.inputs: - type: log enabled: true paths: - /var/log/messages/*.log filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: falseprocessors: - add_cloud_metadata: ~ - add_docker_metadata: ~ output.elasticsearch: hosts: '172.17.0.2:9200'#es的ip地址 username: 'elastic'#es 用户名 password: 'elastic'#es 密码 indices: - index: "filebeat-%{+yyyy.MM.dd}"
2、配置Kibana
进入 Kibana 的 Stack Management 选择 Index Patterns ,点击 Create index pattern 创建一个索引匹配规则。
输入 filebeat 后,下面会将相关的索引展示出来,点击下一步:
创建成功后,在 Discover 页面就可以看到采集到的数据了:
至此,filebeat采集日志到ES就结束了,大家可根据实际的情况灵活调整,欢迎评论区一起交流探讨~