我有一些每月二进制日志文件,我想发送到logstash(或者可能是流利的)。
我遇到的问题是(TTBOMK)bin文件无法通过logstash读取,因此我需要其中一个。
这些选项中哪一个是将自定义bin文件读入logstash的最佳方法?
我已经设置了一个基于nodejs的js脚本,该脚本可以读取二进制文件并创建文档的可读文本版本。它可以作为CLI或http服务运行,只返回设置行号后的行。是否可以直接或间接地将其与logstash集成(这样就不需要我重写代码)。
如果没有,是否将脚本重写为logstash插件值得?
如果选项1不起作用,选项2将花费太多时间来实现,我考虑生成文本版本。由于生成的文档的大小为几GB,我想删除文件,或者如果已经读取的文件的可能部分。有没有办法从logstash获得有关已阅读内容的反馈?
PS我在Windows Server上运行,如果它有任何区别
答案 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的日志。