什么是传递给Codec的`decode`方法的`data`对象?

时间:2017-12-09 23:59:37

标签: ruby logstash logstash-file

我想写一个Codec插件来启用LogStash来解码二进制数据格式。

The official documentation for writing a Codec表明我需要定义一个接受单个参数的decode方法:一个名为data的变量。

我是LogStash和Ruby的新手。我主要使用静态类型语言,我不确定如何更多地了解data变量。我假设它类似于InputStream类型的对象,允许我在数据可用时读取数据,但我不确定。

问题:

  1. data对象是什么类型的?它有什么方法?
  2. Ruby开发人员通常如何调查这样的变量?我不确定在没有编写骨架插件并将data的字符串表示形式转储到STDOUT的情况下,我找不到解决方法。
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

编写input插件的文档提示。来自run() method section

    data = $stdin.sysread(16384)
    @codec.decode(data) do |event|
      decorate(event)
      event.set("host", @host) if !event.include?("host")
      queue << event
    end

data变量是Ruby String,它被用作任意字节的缓冲区。我已经通过创建一个框架插件并在运行时检查该值来验证这一点。

这似乎值得警惕:提供给codec decode方法的字节不能保证是完整的事件。