我使用python-logstash是为了写日志。它提供了添加额外字段的选项,但问题是所有字段都在message
字段下。我想要完成的是在更高层次上添加一个新的字段。
我在logstash.config
(使用logstash.config
插件)中找到了这样做的选项,但是这个解决方案不是一个可伸缩的解决方案(必须为每个机器实例配置)。
类似于:
logger.info('my message')
在基巴纳,我会看到:
{
'@timestamp': ...
...
...
'message': 'my message'
'new_field' : 'new_field_value'
}
我该怎么做?
谢谢。
发布于 2016-09-23 00:57:14
通过阅读python文档,他们引用了“额外”字段,并说他们“向logstash消息中添加额外字段”,这似乎正是您想要的!
# 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)
然后确保在logstash输入块中有"json“编解码器,如下所示:
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"
}
添加的所有额外字段都显示在与消息字段相同的级别上。它们不会添加到“消息”内部对象中。
https://stackoverflow.com/questions/39620302
复制相似问题