将自定义二进制格式提供给 logstash
feed a custom binary format to logstash
我有一些每月要发送到 logstash(或可能是 fluentd)的二进制日志文件。
我遇到的问题是 (TTBOMK) bin 文件无法被 logstash 读取,所以我需要其中之一。
以下哪个选项是将自定义 bin 文件读入 logstash 的最佳方式?
- 通过我在 nodejs 中的脚本读取日志文件
- 将脚本重写为 logstash 的插件
- "translate" 二进制日志文件到可读文本副本
- 或者我不知道的其他方式
我已经设置了一个基于 nodejs 的 js 脚本,它可以读取二进制文件并创建文档的可读文本版本。它可以是 运行 作为 CLI 或 http 服务,并且 return 仅在设置的行号之后的行。是否可以直接或间接将其与 logstash 集成(这样就不需要我重写代码)。
如果不是,是否值得将脚本重写为 logstash 插件?
如果选项 1 行不通,而选项 2 会花费太多时间来实施,我正在考虑生成文本版本。由于生成的文档有几 GB 的大小,我想删除这些文件,或者如果可能的话,删除文件中已经阅读过的部分。有什么方法可以从 logstash 获得关于已读内容的反馈吗?
PS 我正在 运行 宁在 Windows 服务器上,如果有什么不同的话
最简单的方法是将二进制格式转换为 json 并将其提供给 logstash。通过文件或其他机制。主要是因为当你在 logstash 中抛出 json 时,过滤器的配置非常简单:
filter {
if [type] == "my_json_type" {
json {
source => "message"
}
}
}
这将为您将 json 文档分解为字段,包括嵌套在 json 中的文档。如果我们讨论的是大量内容,我建议通过套接字而不是文件来提供它,因为当文件为 "done with" 时,开箱即用不支持任何类型的通知。因此您的输入定义可能如下所示:
tcp {
port => 4567
type => "my_json_type"
}
这将在端口 4567 上打开一个侦听套接字,并将接收到的每一行都视为行,并且过滤器将进一步将其适当地处理为 json 文档。然后在您的 node.js 中,您可以处理已经提供给 logstash 的日志。
你漏掉了很多细节,所以希望我把它们都弄清楚了。
如果您有 http 服务,logstash 有一个 http_poller 输入可以 poll it。
我不建议为 logstash 编写插件。该生态系统中的事情继续迅速变化。
从 logstash 的角度来看,创建纯文本文件是最简单的想法。 Logstash 不会明确告诉你它已经处理了一个文件,但你可以在注册表中查找它(在 unix 中,一个名为“.sincedb*”的文件,通常在 /var/lib/logstash 中,其中包含索引节点号和文件大小偏移量)以查看文件是否已 100% 处理。
有很多其他方法可以将输入馈送到 logstash,包括 tcp/ucp 输入或代理(rabbit、redis 等),它们可能适合您的工作流程。
当然,所有这些可能都有 Windows 相关的注意事项。
我有一些每月要发送到 logstash(或可能是 fluentd)的二进制日志文件。
我遇到的问题是 (TTBOMK) bin 文件无法被 logstash 读取,所以我需要其中之一。
以下哪个选项是将自定义 bin 文件读入 logstash 的最佳方式?
- 通过我在 nodejs 中的脚本读取日志文件
- 将脚本重写为 logstash 的插件
- "translate" 二进制日志文件到可读文本副本
- 或者我不知道的其他方式
我已经设置了一个基于 nodejs 的 js 脚本,它可以读取二进制文件并创建文档的可读文本版本。它可以是 运行 作为 CLI 或 http 服务,并且 return 仅在设置的行号之后的行。是否可以直接或间接将其与 logstash 集成(这样就不需要我重写代码)。
如果不是,是否值得将脚本重写为 logstash 插件?
如果选项 1 行不通,而选项 2 会花费太多时间来实施,我正在考虑生成文本版本。由于生成的文档有几 GB 的大小,我想删除这些文件,或者如果可能的话,删除文件中已经阅读过的部分。有什么方法可以从 logstash 获得关于已读内容的反馈吗?
PS 我正在 运行 宁在 Windows 服务器上,如果有什么不同的话
最简单的方法是将二进制格式转换为 json 并将其提供给 logstash。通过文件或其他机制。主要是因为当你在 logstash 中抛出 json 时,过滤器的配置非常简单:
filter {
if [type] == "my_json_type" {
json {
source => "message"
}
}
}
这将为您将 json 文档分解为字段,包括嵌套在 json 中的文档。如果我们讨论的是大量内容,我建议通过套接字而不是文件来提供它,因为当文件为 "done with" 时,开箱即用不支持任何类型的通知。因此您的输入定义可能如下所示:
tcp {
port => 4567
type => "my_json_type"
}
这将在端口 4567 上打开一个侦听套接字,并将接收到的每一行都视为行,并且过滤器将进一步将其适当地处理为 json 文档。然后在您的 node.js 中,您可以处理已经提供给 logstash 的日志。
你漏掉了很多细节,所以希望我把它们都弄清楚了。
如果您有 http 服务,logstash 有一个 http_poller 输入可以 poll it。
我不建议为 logstash 编写插件。该生态系统中的事情继续迅速变化。
从 logstash 的角度来看,创建纯文本文件是最简单的想法。 Logstash 不会明确告诉你它已经处理了一个文件,但你可以在注册表中查找它(在 unix 中,一个名为“.sincedb*”的文件,通常在 /var/lib/logstash 中,其中包含索引节点号和文件大小偏移量)以查看文件是否已 100% 处理。
有很多其他方法可以将输入馈送到 logstash,包括 tcp/ucp 输入或代理(rabbit、redis 等),它们可能适合您的工作流程。
当然,所有这些可能都有 Windows 相关的注意事项。