环境
- win10系统
- filebeat 7.10.0
- CentOS7 集群(虚拟机)
- kafka 0.11
第一步 下载filebeat
下载地址
我下载的是图中圈出的压缩包版本,也有MSI版本供下载。
第二步 配置filebeat
- 将下载的压缩包解压到“C:\Program Files\Filebeat”。
- 修改该目录中的配置文件filebeat.yml,主要修改以下几个地方:
- 添加filebeat要采集的源文件相关信息,主要在inputs中。
# ============================== Filebeat inputs ===============================
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log
# Change to true to enable this input configuration.
enabled: true #这里一定要改成true才会生效
# Paths that should be crawled and fetched. Glob based paths.
paths:
#- /var/log/*.log 这是linux中的路径
#- c:\programdata\elasticsearch\logs\*
- e:\Lab\Logs\test.log #日志文件路径
添加输出信息(kafka),主要在output中。
# ---------------------------- kafka Output----------------------------
output.kafka:
# initial brokers for reading cluster metadata hosts是string数组类型,支持多个kafka实例地址(此处不是配置zookeeper地址)
hosts: ["XXXX:9092"]
# message topic selection + partitioning
#发送到kafka的那个topic,我这里事先在fields中配置了一个kafka_topic字段,下边有写
topic: '%{[fields.kafka_topic]}'
version: 0.11.0.0 #kafka版本
partition.round_robin: #向kafka分区发送的方式(这里是轮询)
reachable_only: false
required_acks: 1 #kafka应答方式
compression: gzip
max_message_bytes: 1000000
自己添加的字段,kafka的topic名称
# ================================== General ===================================
# The name of the shipper that publishes the network data. It can be used to group
# all the transactions sent by a single shipper in the web interface.
#name:
# Optional fields that you can specify to add additional information to the
# output.
fields:
kafka_topic: first #自己定义的字段 表示kafka中的topic 名称为first
配置完以后保存即可。
第三步 开启filebeat
此时部署在linux虚拟机上的kafka集群已启动,不再赘述。
- 以管理员身份打开powershell,进入filebeat安装目录"C:\Program Files\Filebeat",输入以下命令,使用刚修改好的配置文件启动filebeat。
PS C:\Program Files\Filebeat> .\filebeat -e -c filebeat.yml
注意一定要以管理员身份打开。
如果powershell报”系统中禁止执行脚本",就输入以下命令更改执行策略:
PS C:\Program Files\Filebeat> set-ExecutionPolicy RemoteSigned
记得也要在管理员权限下才行。
另外一提,powershell的cmd的cd命令有点区别,当目录名字带空格时,需要将目标地址写进引号里,形成一个参数,否则powershell切换会提示找不到目标位置。
- 如果问题都解决完毕,filebeat正常开启,此时只需要之前在配置文件的inputs中设置的log文件有新增行,filebeat就会把数据发送到Kafka中。
在kafka中事先开启一个kafka的consumer,方便看到filebeat传输的数据。
[root@centos7_1 kafka]# bin/kafka-console-consumer.sh --bootstrap-server CentOS7_1:9092 --topic first
- 此时在”e:\Lab\Logs\test.log“中随便输入一些数据并保存,kafka的消费者就会打印相应数据,数据是json格式的:
{
"@timestamp": "2020-12-01T07:49:19.035Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.10.0"
},
"fields": {
"kafka_topic": "first"
},
"host": {
"name": xxx,
"mac": [
xxx
],
"hostname": xxx,
"architecture": "x86_64",
"os": {
"build": "18363.1198",
"platform": "windows",
"version": "10.0",
"family": "windows",
"name": "Windows 10 Home China",
"kernel": "10.0.18362.1198 (WinBuild.160101.0800)"
},
"id": xx,
"ip": [
xxx
]
},
"agent": {
"ephemeral_id": "8a09326d-8a07-41cc-aba4-6735eec57c63",
"id": "287d0b6a-2dc7-427e-af59-2acea9a2b89e",
"name": "LAPTOP-TP5O2I6E",
"type": "filebeat",
"version": "7.10.0",
"hostname": xxx
},
"ecs": {
"version": "1.6.0"
},
"log": {
"file": {
"path": "e:\\Lab\\Logs\\test.log"
},
"offset": 14
},
"message": "1231323231132",
"input": {
"type": "log"
}
}
message中便是我在日志文件中输入的内容,可以看到已经成功发了过来。
但是,我就随便打了一行,filebeat发过来变成这么多,有很多我不需要的数据,那么是否可以去掉哪些不需要的字段呢?当然可以!
去除filebeat发送数据中不需要的字段
重新回到filebeat.yml文件,修改processors,在这里我们可以对filebeat发送的数据格式做一些处理。
官方介绍
# ================================= Processors =================================
processors:
# 去掉这些自带的处理器
# - add_host_metadata:
# when.not.contains.tags: forwarded
# - add_cloud_metadata: ~
# - add_docker_metadata: ~
# - add_kubernetes_metadata: ~
# 使用drop_fields这个处理器去掉不想要的字段
- drop_fields:
# when: #可以设置条件,这里就不设置了
# condition
# 要去除的字段
fields: ["log","host","input","agent","ecs"]
ignore_missing: false #缺少字段是否报错
修改完成后再次运行filebeat,并在log文件中输入数据并保存,在kafka的消费者可以看到这次收到的数据就清爽了许多:
{
"@timestamp": "2020-12-01T09:11:04.239Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.10.0"
},
"message": "12312321",
"fields": {
"kafka_topic": "first"
}
}
注意:@timestamp
和@metadata
这两个字段是去不掉的。