如何向logstash / kibana添加自定义字段?

时间:2016-09-21 15:08:41

标签: python logstash

我正在使用python-logstash来写入logstash。它提供了添加额外字段的选项,但问题是所有字段都在message字段下。我想要完成的是在更高级别添加一个新字段。

我找到了从logstash.config(使用ruby / grok / mutate插件)执行此操作的选项,但此解决方案不是可扩展的(必须为每个机器实例配置)

类似的东西:

logger.info('my message')

在Kibana,我会看到:

{
'@timestamp': ...
...
...
'message': 'my message'
'new_field' : 'new_field_value'
}

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

通过阅读python-logstash文档,他们可以参考" extra"字段并说他们"添加额外字段以记录消息",这看起来就像你想要的那样!

# add extra field to logstash message 
extra = {
    'test_string': 'python version: ' + repr(sys.version_info),
    'test_boolean': True,
    'test_dict': {'a': 1, 'b': 'c'},
    'test_float': 1.23,
    'test_integer': 123,
    'test_list': [1, 2, '3'], 
}
test_logger.info('python-logstash: test extra fields', extra=extra)

然后确保你拥有" json" logstash输入块中的编解码器如下:

input {
  udp {
    port => 5959
    codec => json
  }
}

修改: 我使用示例脚本对此进行了测试,并获得以下Logstash输出:

{
            "host" => "xxx",
            "path" => "pylog.py",
      "test_float" => 1.23,
            "type" => "logstash",
            "tags" => [],
       "test_list" => [
        [0] 1,
        [1] 2,
        [2] "3"
    ],
    "test_boolean" => true,
           "level" => "INFO",
      "stack_info" => nil,
         "message" => "python-logstash: test extra fields",
      "@timestamp" => "2016-09-25T15:23:58.259Z",
       "test_dict" => {
        "a" => 1,
        "b" => "c"
    },
     "test_string" => "python version: sys.version_info(major=3, minor=5, micro=1, releaselevel='final', serial=0)",
        "@version" => "1",
    "test_integer" => 123,
     "logger_name" => "python-logstash-logger"
}

添加的所有额外字段显示在与消息字段相同的级别。它们未添加到“消息”中。内的对象。