将自定义二进制格式馈送到logstash

将自定义二进制格式馈送到logstash,logstash,fluentd,Logstash,Fluentd,我有一些每月的二进制日志文件要发送到logstash(或者可能是fluentd) 我遇到的问题是(TTBOMK)bin文件不能被logstash读取,所以我需要使用其中一个 以下哪个选项是将自定义bin文件读入logstash的最佳方式 通过nodejs中的脚本读取日志文件 将脚本作为插件重写为logstash 将二进制日志文件“翻译”为可读文本副本 或者其他我不知道的方式 我已经设置了一个基于nodejs的js脚本,它可以读取二进制文件并创建文档的可读文本版本。它可以作为CLI或http服

我有一些每月的二进制日志文件要发送到logstash(或者可能是fluentd)

我遇到的问题是(TTBOMK)bin文件不能被logstash读取,所以我需要使用其中一个

以下哪个选项是将自定义bin文件读入logstash的最佳方式

  • 通过nodejs中的脚本读取日志文件
  • 将脚本作为插件重写为logstash
  • 将二进制日志文件“翻译”为可读文本副本
  • 或者其他我不知道的方式
我已经设置了一个基于nodejs的js脚本,它可以读取二进制文件并创建文档的可读文本版本。它可以作为CLI或http服务运行,并且只返回设置行号后的行。是否可以直接或间接地将其与logstash集成(这样就不需要我重写代码)

如果不是,那么将脚本作为日志存储插件重新编写是否值得

如果选项1不起作用,而选项2需要花费太多的时间来实现,我正在考虑生成文本版本。由于生成的文档的大小为几GB,我想删除文件,或者如果可能的话,删除文件中已经读取的部分。有没有办法从logstash获得关于已读取内容的反馈已经读过了吗


PS我在Windows Server上运行,如果有任何不同

最简单的方法是将二进制格式转换为json并将其提供给logstash。可以通过文件或其他机制。主要是因为在logstash中抛出json时,过滤器的配置非常简单:

filter {
    if [type] == "my_json_type" {
        json {
            source => "message"
        }
    }
}
这将为您将json文档分解为多个字段,包括嵌套在json中的文档。如果我们谈论的是大量内容,我建议通过套接字而不是文件来提供这些内容,因为开箱即用不支持在文件“完成”时发出任何通知。因此,您的输入定义可能如下所示:

tcp {
    port => 4567
    type => "my_json_type"
}

它将在端口4567上打开一个侦听套接字,并将收到的每一行作为行处理,然后过滤器将其作为json文档进行适当处理。然后在你的node.js中,你可以处理你已经提供给logstash的日志。

你抛出了很多详细信息,希望我能把它们都弄清楚

如果你有一个http服务,logstash有一个http轮询器输入,可以

我不建议为logstash编写插件。在这个生态系统中,情况会继续快速变化

从logstash的角度来看,创建纯文本文件是最简单的方法。logstash不会明确地告诉您它已经处理了一个文件,但是您可以在注册表中查找它(在unix中,一个名为“.sincedb*”的文件,通常在/var/lib/logstash中,它包含索引节点号和文件大小偏移量)查看文件是否已100%处理

有很多其他方法可以将输入提供给logstash,包括tcp/ucp输入或代理(rabbit、redis等),它们可能适合您的工作流

当然,所有这些可能都有与Windows相关的警告