【问题标题】:feed a custom binary format to logstash将自定义二进制格式提供给 logstash
【发布时间】:2016-03-21 04:08:44
【问题描述】:

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

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

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

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

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

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

如果选项 1 不起作用,并且选项 2 会花费太多时间来实施,我正在考虑生成文本版本。由于生成的文档大小为几 GB,我想删除这些文件,或者如果可能的话,删除已经读取的文件部分。有什么方法可以从 logstash 获得关于已阅读内容的反馈?

PS 我在 Windows Server 上运行,如果有什么不同的话

【问题讨论】:

    标签: logstash fluentd


    【解决方案1】:

    你抛出了很多细节,所以希望我把它们都说清楚了。

    如果你有一个 http 服务,logstash 有一个 http_poller 输入,可以poll it

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-05
        • 2012-03-09
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 2019-12-25
        • 1970-01-01
        • 2021-01-19
        相关资源
        最近更新 更多