一、前提:
现项目需求,在windows服务器上部署filebeat读取日志文件变更,发送到kafka。变态的是:要读取同一目录下日志文件,往两个不相关的kafka发送变更信息(注意这两个kafka完全不相关,不是同一集群)。怎么搞?网上查了半天资料,有说改filebeat.yml的试了半天没用。最后采用了最笨的方法,复制两份filebeat,采用不同配置。
二、配置
filebeat版本:8.11.3
注意两份filebeat完全放在两个不同的目录下,我这里目录分别为:D:\\jt\\filebeat、D:\\jt\\filebeatxinguan两个目录。
两个filebeat都需要改filebeat.yml、filebeat-server.xml
第一个filebeat配置:
filebeat.yml
filebeat.inputs:
- type: filestream
enabled: true
paths:
- D:\position\*.txt
fields:
code: haiheng # 新增默认参数
output.kafka:
hosts: ["kafka1:9092"]
topic: "topic_position"
filebeat-server.xml
<service>
<id>filebeat-server</id>
<name>filebeat-server</name>
<description>filebeat文件变更捕获</description>
<!-- 可设置环境变量 -->
<env name="HOME" value="%BASE%"/>
<executable>%BASE%\filebeat.exe</executable>
<arguments>-e -c filebeat.yml</arguments>
<!-- <logmode>rotate</logmode> -->
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size-time">
<sizeThreshold>10240</sizeThreshold>
<pattern>yyyyMMdd</pattern>
<autoRollAtTime>00:00:00</autoRollAtTime>
<zipOlderThanNumDays>5</zipOlderThanNumDays>
<zipDateFormat>yyyyMMdd</zipDateFormat>
</log>
</service>
第二个filebeat配置:
filebeat.yml
filebeat.inputs:
- type: filestream
enabled: true
paths:
- D:\position\*.txt
fields:
code: haiheng # 新增默认参数
output.kafka:
hosts: ["kafka2:9092"]
topic: "topic_position"
filebeat-server.xml
<service>
<id>filebeat-server-xinguan</id>
<name>filebeat-server-xinguan</name>
<description>filebeat(新馆)文件变更捕获</description>
<!-- 可设置环境变量 -->
<env name="HOME" value="%BASE%"/>
<executable>%BASE%\filebeat.exe</executable>
<arguments>-e -c filebeat.yml</arguments>
<!-- <logmode>rotate</logmode> -->
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size-time">
<sizeThreshold>10240</sizeThreshold>
<pattern>yyyyMMdd</pattern>
<autoRollAtTime>00:00:00</autoRollAtTime>
<zipOlderThanNumDays>5</zipOlderThanNumDays>
<zipDateFormat>yyyyMMdd</zipDateFormat>
</log>
</service>
改好配置,分别在对应的目录下进入cmd,执行:
filebeat-server.exe install
看到***was installed successfully. 一般来说没啥问题。
接下来打开服务,找到对应的服务右键启动(有点糊,不好截图,手机拍的。。。):

三、查看进程
执行
Get-Process | Where-Object { $_.ProcessName -eq "filebeat" }
可以看到两个进程(有点糊,不好截图,手机拍的。。。):

OK,完活儿。