提供自定义二进制格式以记录

时间:2016-03-21 04:08:45

标签: logstash fluentd

我有一些每月二进制日志文件,我想发送到logstash(或者可能是流利的)。

我遇到的问题是(TTBOMK)bin文件无法通过logstash读取,因此我需要其中一个。

这些选项中哪一个是将自定义bin文件读入logstash的最佳方法?

  • 通过我在nodejs
  • 中获得的脚本读取日志文件
  • 将脚本重写为logstash的插件
  • "翻译"二进制日志文件到可读文本副本
  • 或其他一些我不知道的方式

我已经设置了一个基于nodejs的js脚本,该脚本可以读取二进制文件并创建文档的可读文本版本。它可以作为CLI或http服务运行,只返回设置行号后的行。是否可以直接或间接地将其与logstash集成(这样就不需要我重写代码)。

如果没有,是否将脚本重写为logstash插件值得?

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

PS我在Windows Server上运行,如果它有任何区别

2 个答案:

答案 0 :(得分:2)

你抛出了很多细节,所以我希望我能把它们全部弄清楚。

如果您有http服务,则logstash的http_poller输入可以poll it

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

从logstash角度来看,创建纯文本文件是最简单的想法。 Logstash没有明确告诉你它已经处理了一个文件,但你可以在注册表中查找(在unix中,一个名为" .sincedb *"的文件,通常在/ var / lib中/ logstash,包含inode编号和文件大小偏移量),以查看文件是否已100%处理。

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

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

答案 1 :(得分:1)

最简单的方法是将二进制格式转换为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的日志。