遵义网站建设中心,qq刷赞网站推广快速,wordpress哪个版本,网站建设软文模板目录 1 缘由2 编译filebeat3 配置虚拟机访问外网4 编译beats-output-http4.1 使用本地包4.2 发布在线包 5 测试6 beats-output-http的部分解释 1 缘由
官网的filebeat只有以下几种output插件#xff1a;
Elasticsearch ServiceElasticsearchLogstashKafkaRedisFileConsole
… 目录 1 缘由2 编译filebeat3 配置虚拟机访问外网4 编译beats-output-http4.1 使用本地包4.2 发布在线包 5 测试6 beats-output-http的部分解释 1 缘由
官网的filebeat只有以下几种output插件
Elasticsearch ServiceElasticsearchLogstashKafkaRedisFileConsole
由于需要将数据推送到接口需要能够支持类似logstash中的http插件。
2 编译filebeat
依照Beats的文档编译filebeat
mkdir -p ${GOPATH}/src/github.com/elastic
git clone https://github.com/elastic/beats ${GOPATH}/src/github.com/elastic/beats进入到beats根目录执行make mage。
最后进入到filebeat目录执行mage build。
3 配置虚拟机访问外网
在用golang编译时可能需要从外部下载一些包如果使用虚拟机在默认情况下宿主机可以科学上网但是虚拟机不行此时可以使用宿主机作为虚拟机的代理。
宿主机开启代理例如对于Clash来说开启允许局域网和TUN模式在虚拟机中测试是否能够连接宿主机上的端口配置http_proxy和https_proxy环境变量
4 编译beats-output-http
按照文档直接在beats/filebeat/main.go的import部分加上_ github.com/raboof/beats-output-http/http然后重新编译即可。
4.1 使用本地包
在进行编译时发现会报错
http/client.go:82:19: assignment mismatch: 2 variables but transport.TLSDialer returns 1 value应该是libbeat中的代码有变化导致的需要修改代码将beats-output-http克隆到本地后需要在编译时使用本地包可以用两种方式
直接修改go.mod在beats/go.mod中找到beats-output-http所在的行然后在beats/go.mod文件最后增加一行replace github.com/luofengmacheng/beats-output-http v0.0.0-20230524012217-1e747e762355 /root/src/github.com/elastic/beats/libbeat/outputs/http其中模块名和版本与之前找到的beats-output-http的行一致后面的路径就是beats-output-http的路径此处重命名为http。使用go mod edit命令go mod edit -require github.com/luofengmacheng/beats-output-httpv0.0.0-20230524012217-1e747e762355 -replace github.com/luofengmacheng/beats-output-httpv0.0.0-20230524012217-1e747e762355/root/src/github.com/elastic/beats/libbeat/outputs/http
这里需要注意不要删除beats/go.mod的require中的beats-output-http的行否则会报错and is replaced but not required。
然后就可以进入filebeat目录进行编译了。
4.2 发布在线包
当需要对beats-output-http进行bug修复时可以将beats-output-http从原来的仓库fork过来然后进行bug修复。那么在使用beats-output-http时就需要使用新的仓库此时需要进行两个调整
修改beats-output-http/go.mod中的模块名改成新的仓库路径创建tag
然后删除beats/go.mod中原来的模块信息再进行编译。
5 测试
编译完成后会在beats/filebeat目录下生成二进制文件filebeat创建配置文件filebeat.yaml
filebeat.inputs:- type: logenabled: truepaths:- /etc/kubernetes/audit/audit.logoutput:http:hosts: [IP:HOST]测试./filebeat run -c ./filebeat.yaml -e。
6 beats-output-http的部分解释
http的output本身的实现是非常简单的就是将数据推送到某个url主要的工作就是要对接beats的配置和插件管理工作。
第一步让beats知道有这样一个http插件
在libbeat的outputs包中RegisterType()用于注册插件其实就是将插件的名称和构造函数保存起来
// beats-output-http/http/http.go
func init() {outputs.RegisterType(http, MakeHTTP)
}// libbeat/outputs/output_reg.go
// RegisterType registers a new output type.
func RegisterType(name string, f Factory) {if outputReg[name] ! nil {panic(fmt.Errorf(output type %v exists already, name))}outputReg[name] f
}就是将插件的信息保存到内部的outputReg的map中在初始化时就可以调用插件的构造函数。插件的构造函数就是解析配置创建后端的Client对象。
第二步Client的接口实现
filebeat调用构造函数完成初始化后http插件就需要接收数据然后实现具体的业务逻辑。