Filebeat是讲解一个轻量级的日志数据收集工具,属于Elastic公司的日志Elastic Stack(ELK Stack)生态系统的一部分。它的采集操作主要功能是从各种来源收集日志数据,将数据发送到Elasticsearch、组件Logstash或其他目标,实战以便进行搜索、轻量分析和可视化。讲解
以下是日志Filebeat的主要概述和特点:
工作的流程图如下:
图片
Filebeat的采集原理的主要步骤
Filebeat首先配置要监视的数据源,这可以是日志文件、系统日志、Docker容器日志、Windows事件日志等。Filebeat可以通过输入模块配置来定义数据源。
一旦数据源被定义,Filebeat会定期轮询这些数据源,检查是否有新的数据产生。
如果有新数据,Filebeat将读取数据并将其发送到后续处理阶段。
数据处理:
Filebeat可以对采集到的数据进行一些简单的处理,例如字段分割、字段重命名、数据解析等。这有助于确保数据格式适合进一步的处理和分析。
数据传输:
采集到的数据将被传输到一个或多个目标位置,通常是Elasticsearch、Logstash或Kafka等。
Filebeat可以配置多个输出目标,以便将数据复制到多个地方以增加冗余或分发数据。
安全性和可靠性:
Filebeat支持安全传输,可以使用TLS/SSL协议对数据进行加密。它还具有数据重试机制,以确保数据能够成功传输到目标位置。
数据目的地:
数据被传输到目标位置后,可以被进一步处理、索引和分析。目标位置通常是Elasticsearch,用于全文搜索和分析,或者是Logstash用于进一步的数据处理和转换,也可以是Kafka等其他消息队列。
实时性和监控:
Filebeat可以以实时方式监视数据源,确保新数据能够快速传输和处理。
Filebeat还可以与监控工具集成,以监控其自身的性能和状态,并将这些数据发送到监控系统中。
总的来说,Filebeat采集原理是通过轮询监视数据源,将新数据采集并发送到目标位置,同时确保数据的安全传输和可靠性。它提供了一种高效且灵活的方式来处理各种类型的日志和事件数据,以便进行后续的分析和可视化。
为了快速部署,这里选择通过docker-compose部署,可以参考我这篇文章:【中间件】通过 docker-compose 快速部署 Kafka 保姆级教程
# 先安装 zookeepergit clone https://gitee.com/hadoop-bigdata/docker-compose-zookeeper.gitcd docker-compose-zookeeper docker-compose -f docker-compose.yaml up -d# 安装kafkagit clone https://gitee.com/hadoop-bigdata/docker-compose-kafka.gitcd docker-compose-kafkadocker-compose -f docker-compose.yaml up -d
如果仅仅只是为测试也可以部署一个单机kafka官方下载地址:http://kafka.apache.org/downloads
### 1、下载kafkawget https://downloads.apache.org/kafka/3.4.1/kafka_2.12-3.4.1.tgz --no-check-certificate### 2、解压tar -xf kafka_2.12-3.4.1.tgz### 3、配置环境变量# ~/.bashrc添加如下内容:export PATH=$PATH:/opt/docker-compose-kafka/images/kafka_2.12-3.4.1/bin### 4、配置zookeeper 新版Kafka已内置了ZooKeeper,如果没有其它大数据组件需要使用ZooKeeper的话,直接用内置的会更方便维护。# vi kafka_2.12-3.4.1/config/zookeeper.properties#注释掉#maxClientCnxns=0#设置连接参数,添加如下配置#为zk的基本时间单元,毫秒tickTime=2000#Leader-Follower初始通信时限 tickTime*10initLimit=10#Leader-Follower同步通信时限 tickTime*5syncLimit=5#设置broker Id的服务地址#hadoop-node1对应于前面在hosts里面配置的主机映射,0是broker.id, 2888是数据同步和消息传递端口,3888是选举端口server.0=local-168-182-110:2888:3888### 5、配置kafka# vi kafka_2.12-3.4.1/config/server.properties#添加以下内容:broker.id=0listeners=PLAINTEXT://local-168-182-110:9092# 上面容器的zookeeperzookeeper.cnotallow=local-168-182-110:2181# topic不存在的,kafka就会创建该topic。#auto.create.topics.enable=true### 6、启动服务./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties./bin/kafka-server-start.sh -daemon config/server.properties### 7、测试验证#创建topickafka-topics.sh --bootstrap-server local-168-182-110:9092 --create --topic topic1 --partitions 8 --replication-factor 1#列出所有topickafka-topics.sh --bootstrap-server local-168-182-110:9092 --list#列出所有topic的信息kafka-topics.sh --bootstrap-server local-168-182-110:9092 --describe#列出指定topic的信息kafka-topics.sh --bootstrap-server local-168-182-110:9092 --describe --topic topic1#生产者(消息发送程序)kafka-console-producer.sh --broker-list local-168-182-110:9092 --topic topic1#消费者(消息接收程序)kafka-console-consumer.sh --bootstrap-server local-168-182-110:9092 --topic topic1
官网地址:https://www.elastic.co/cn/downloads/past-releases#filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-linux-x86_64.tar.gztar -xf filebeat-7.6.2-linux-x86_64.tar.gz
Filebeat的配置文件通常是YAML格式,包含各种配置参数,用于定义数据源、输出目标、数据处理和其他选项。以下是一些常见的Filebeat配置参数及其含义:
type:数据源的类型,例如日志文件、系统日志、Docker日志等。
paths:要监视的文件路径或者使用通配符指定多个文件。
enabled:是否启用该输入。
示例:
filebeat.inputs: - type: log paths: - /var/log/*.log - type: docker enabled: true
module:模块名称。
enabled:是否启用模块。
var:自定义模块变量。
示例:
filebeat.modules: - module: apache access: enabled: true error: enabled: true
hosts:Elasticsearch主机列表。
index:索引名称模板。
username和password:用于身份验证的用户名和密码。
pipeline:用于数据预处理的Ingest节点管道。
示例:
output.elasticsearch: hosts: ["localhost:9200"] index: "filebeat-%{ [agent.version]}-%{ +yyyy.MM.dd}" username: "your_username" password: "your_password"
hosts:Logstash主机列表。
index:索引名称模板。
ssl:是否使用SSL/TLS加密传输数据。
示例:
output.logstash: hosts: ["localhost:5044"] index: "filebeat-%{ [agent.version]}-%{ +yyyy.MM.dd}" ssl.enabled: true
add_fields:添加字段到事件数据。
decode_json_fields:解码JSON格式的字段。
drop_fields:删除指定字段。
rename:重命名字段。
示例:
processors: - add_fields: target: "my_field" value: "my_value" - drop_fields: fields: ["field1", "field2"]
这些是 Filebeat 的一些常见配置参数,具体的配置取决于您的使用场景和需求。您可以根据需要自定义配置文件,以满足您的数据采集和处理需求。详细的配置文档可以在Filebeat官方文档中找到。
这里主要用到几个核心字段:filebeat.prospectors、processors、output.kafka
filebeat.prospectors:用于定义要监视的数据源和采集规则。每个 prospector 包含一个或多个输入规则,它们指定要监视的文件或数据源以及如何采集和解析数据。
以下是一个示例 filebeat.prospectors 部分的配置:
filebeat.prospectors:- type: log enabled: true paths: - /var/log/*.log exclude_files: - "*.gz" multiline.pattern: '^\[' multiline.negate: false multiline.match: after tags: ["tag1", "tag2"] tail_files: true fields: app: myapp env: production
在上述示例中,我们定义了一个 filebeat.prospectors 包含一个 type: log 的 prospector,下面是各个字段的解释:
这些字段允许您配置Filebeat以满足特定的数据源和采集需求。您可以根据需要定义多个 prospector 来监视不同类型的数据源,每个 prospector 可以包含不同的参数。通过灵活配置 filebeat.prospectors,Filebeat可以适应各种日志和数据采集场景。
processors 是Filebeat配置中的一个部分,用于定义在事件传输到输出目标之前对事件数据进行预处理的操作。您可以使用 processors 来修改事件数据、添加字段、删除字段,以及执行其他自定义操作。以下是一些常见的 processors 配置示例和说明:
processors: - add_fields: fields: app: myapp env: production
processors: - drop_fields: fields: ["sensitive_data"]
processors: - decode_json_fields: fields: ["json_data"] target: ""
processors: - rename: fields: - from: old_field to: new_field
processors: - add_tags: tags: ["error"] when: equals: log_level: "error"
processors 部分允许您对事件数据进行复杂的处理和转换,以适应特定的需求。您可以根据需要组合不同的处理器来执行多个操作,以确保事件数据在传输到输出目标之前满足您的要求。
output.kafka 是Filebeat配置文件中的一个部分,用于配置将事件数据发送到Kafka消息队列的相关设置。以下是 output.kafka 部分的常见参数及其解释:
output.kafka: hosts: ["kafka-broker1:9092", "kafka-broker2:9092"] topic: "my-log-topic" partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
以下是各个参数的详细解释:
以上是常见的 output.kafka 参数,您可以根据您的Kafka集群配置和需求来调整这些参数。确保配置正确的Kafka主题和分区策略以满足您的数据传输需求。同时,要确保Filebeat服务器可以连接到指定的Kafka broker地址。
以下是一个完整的Filebeat配置文件示例,其中包括了 filebeat.prospectors、processors 和 output.kafka 的配置部分,以用于从日志文件采集数据并将其发送到Kafka消息队列:
Filebeat 从 7.x 版本开始引入了新的配置方式 filebeat.inputs,以提供更灵活的输入配置选项,同时保留了向后兼容性。以下是 filebeat.inputs 和 filebeat.prospectors 之间的主要区别:
filebeat.inputs 是较新版本的配置方式,用于定义输入配置。
允许您以更灵活的方式配置不同类型的输入。您可以在配置文件中定义多个独立的输入块,每个块用于配置不同类型的输入。
每个输入块可以包含多个字段,用于定制不同输入类型的配置,如 type、enabled、paths、multiline 等。
使配置更具可读性,因为每个输入类型都有自己的配置块。
示例:
filebeat.inputs:- type: log enabled: true paths: - /var/log/app/*.log- type: syslog enabled: true port: 514 protocol.udp: true
filebeat.prospectors 是旧版配置方式,用于定义输入配置。
所有的输入类型(如日志文件、系统日志、stdin 等)都需要放在同一个部分中。
需要在同一个配置块中定义不同输入类型的路径等细节。
旧版配置方式,不如 filebeat.inputs 配置方式那么灵活和可读性好。
以下是一些常见的 type 值以及它们的含义:
- type: log paths: - /var/log/*.log
- type: stdin
- type: syslog port: 514 protocol.udp: true
- type: filestream enabled: true
- type: httpjson enabled: true urls: - http://example.com/api/data
- type: tcp enabled: true host: "localhost" port: 12345
- type: udp enabled: true host: "localhost" port: 12345
总的来说,filebeat.inputs 提供了更灵活的方式来配置不同类型的输入,更容易组织和管理配置。如果您使用的是较新版本的 Filebeat,推荐使用 filebeat.inputs 配置方式。但对于向后兼容性,旧版的 filebeat.prospectors 仍然可以使用。
filebeat.yml
filebeat.inputs:- type: log enabled: true paths: - /var/log/*.log multiline.pattern: '^\[' multiline.negate: false multiline.match: after tail_files: true fields: app: myapp env: production topicname: my-log-topic- type: log enabled: true paths: - /var/log/messages multiline.pattern: '^\[' multiline.negate: false multiline.match: after tail_files: true fields: app: myapp env: production topicname: my-log-topicprocessors: - add_fields: fields: app: myapp env: production - drop_fields: fields: ["sensitive_data"]output.kafka: hosts: ["local-168-182-110:9092"] #topic: "my-log-topic" # 这里也可以应用上面filebeat.prospectors.fields的值 topic: '%{ [fields][topicname]}' partition.round_robin: reachable_only: false required_acks: 1 compression: gzip max_message_bytes: 1000000
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &# -e 将启动信息输出到屏幕上# filebeat本身运行的日志默认位置${ install_path}/logs/filebeat
要修改filebeat的日子路径,可以添加一下内容在filebeat.yml配置文件:
#logging.level :debug 日志级别path.logs: /var/log/
使用 systemctl 启动 filebeat
# vi /usr/lib/systemd/system/filebeat.service[Unit]Descriptinotallow=filebeat server daemonDocumentatinotallow=/opt/filebeat-7.6.2-linux-x86_64/filebeat -helpWants=network-online.targetAfter=network-online.target [Service]User=rootGroup=rootEnvirnotallow="BEAT_CONFIG_OPTS=-c /opt/filebeat-7.6.2-linux-x86_64/filebeat.yml"ExecStart=/opt/filebeat-7.6.2-linux-x86_64/filebeat $BEAT_CONFIG_OPTSRestart=always [Install]WantedBy=multi-user.target
【温馨提示】记得更换自己的 filebeat 目录。
systemctl 启动 filebeat 服务
#刷新一下配置文件systemctl daemon-reload# 启动systemctl start filebeat # 查看状态systemctl status filebeat# 查看进程ps -ef|grep filebeat# 查看日志vi logs/filebeat
# 设置环境变量export KAFKA_HOME=/opt/docker-compose-kafka/images/kafka_2.12-3.4.1# 查看topic列表${ KAFKA_HOME}/bin/kafka-topics.sh --bootstrap-server local-168-182-110:9092 --list# 查看topic列表详情${ KAFKA_HOME}/bin/kafka-topics.sh --bootstrap-server local-168-182-110:9092 --describe# 指定topic${ KAFKA_HOME}/bin/kafka-topics.sh --bootstrap-server local-168-182-110:9092 --describe --topic my-log-topic# 查看kafka数据${ KAFKA_HOME}/bin/kafka-console-consumer.sh --topic my-log-topic --bootstrap-server local-168-182-110:9092#上述命令会连接到指定的Kafka集群并打印my_topic主题上的所有消息。如果要查看特定数量的最新消息,则应将“--from-beginning”添加到命令中。# 在较高版本的 Kafka 中(例如 Kafka 2.4.x 和更高版本),消费者默认需要明确指定要消费的分区。#以下是查看特定最新消息数量的示例:${ KAFKA_HOME}/bin/kafka-console-consumer.sh --topic my-log-topic --bootstrap-server local-168-182-110:9092 --from-beginning --max-messages 10 --partition 0# 查看kafka数据量,在较高版本的 Kafka 中(例如 Kafka 2.4.x 和更高版本),消费者默认需要明确指定要消费的分区。${ KAFKA_HOME}/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list local-168-182-110:9092 --topic my-log-topic --time -1# 消费数据查看数据,这里指定一个分区${ KAFKA_HOME}/bin/kafka-console-consumer.sh --bootstrap-server local-168-182-110:9092 --topic my-log-topic --partition 0 --offset 100# 也可以通过消费组消费,可以不指定分区${ KAFKA_HOME}/bin/kafka-console-consumer.sh --topic my-log-topic --bootstrap-server local-168-182-110:9092 --from-beginning --group my-group
责任编辑:武晓燕 来源: 大数据与云原生技术分享 轻量级日志系统这将返回主题 <topic_name> 的分区和偏移量信息,您可以根据这些信息计算出数据量。
(责任编辑:探索)
康健国际医疗(03886.HK)公布消息:预计年度综合亏损约2.55亿港元
国家统计局:8月社会消费品零售总额同比增长2.5% 两年平均增长1.5%
全国首座光伏直供换电站在国家能源集团开工 年均可减少污染排放量1730吨
恒信东方(300081.SZ)公布消息:向85名激励对象授予1188万股第二类限制性股票
Windows Update提示错误代码80072efd怎么办?解决方法有哪些?