1

我有将数据发送到 logstash 的 Elastic Beats(如 metricbeat 和 auditbeat)。出于测试目的,我想模拟一些从节拍到 logstash 输入的数据。

我在beats(yaml配置文件)中使用logstash输出插件:

output.logstash:
  enabled: true
  hosts: ["127.0.0.1:5044"]

和 logstash 中的 beats 输入插件(.conf 管道配置文件):

input {
    beats {
        port => "5044"
    }
}

我天真地假设beats通过HTTP请求与logstash通信,所以我使用Postman向logstash发出POST请求,但我得到了一个InvalidFrameProtocolException: logstash中beats协议的无效版本错误。

我试图用wireshark检查数据包以查看原始数据包的格式,但我只能看到TCP数据包,没有HTTP协议。我想这些插件不通过 HTTP 请求进行通信。

有更多专业知识的人可以对此发表评论吗?有没有办法通过邮递员模拟节拍输出数据到logstash?

4

1 回答 1

0

感谢@leandrojmp,我知道beats和logstash是通过lumberjack协议而不是HTTP进行通信的。

我最终使用了 http logstash 输入插件,这样我就可以通过邮递员模拟我的节拍事件。虽然我没有修改我原来的管道配置文件,但是我使用了logstash的能力来加载几个管道配置文件。因此,我使用我的 http 插件和一些过滤器创建了另一个 logstash 管道配置文件,以删除 http 特定数据,如“header”字段:

input {
    stdin { }
    http {
        port => "8081"
    }
}

filter {
    mutate {
        remove_field => ["headers"]
    }
}

然后,当我想启动 logstash 进行测试时,我可以加载这两个文件,方法是将它们放在同一目录中:

bin/logstash -f logstash.d/*.conf

或者当我不测试时只是原始配置文件:

bin/logstash -f logstash.d/pipeline.conf
于 2020-09-11T17:48:10.293 回答