如何使用弹性(ELK)堆栈记录嵌套对象
How to log nested objects with elastic (ELK) stack
我正在尝试通过 NodeJS
将具有嵌套属性的 JSON 值记录到 logzio ELK 堆栈
密码是:
var logger = require('logzio-nodejs').createLogger({
token: config.LOGZIO_API_KEY
});
// sending text
logger.log('This is a log message');
// sending an object
var obj = {
message: 'Some log message',
param1: 'val1',
param2: 'val2'
};
logger.log(obj);
这很好用,但如果我想记录嵌套数据,例如:
// sending an object
var obj = {
message: 'Some log message',
param1: {
a : 'b',
c : 'd'
},
param2: 'val2'
};
这returns一个错误:
{"type":"mapper_parsing_exception","reason":"failed to parse [param1]","caused_by":{"type":"illegal_argument_exception","reason":"unknown property [a]"}}
我可以调整什么来记录这个嵌套对象?
这是因为当您将 param1
记录为字符串时,ES 创建了一个字符串类型的字段。
此后,您尝试将 param1
记录为对象,这与字符串类型冲突。
但是,您绝对可以记录一个嵌套对象,但您必须给它一个已经存在的字段的另一个名称,比如 param3
,这应该有效:
// sending an object
var obj = {
message: 'Some log message',
param3: {
a : 'b',
c : 'd'
},
param2: 'val2'
};
我正在尝试通过 NodeJS
将具有嵌套属性的 JSON 值记录到 logzio ELK 堆栈密码是:
var logger = require('logzio-nodejs').createLogger({
token: config.LOGZIO_API_KEY
});
// sending text
logger.log('This is a log message');
// sending an object
var obj = {
message: 'Some log message',
param1: 'val1',
param2: 'val2'
};
logger.log(obj);
这很好用,但如果我想记录嵌套数据,例如:
// sending an object
var obj = {
message: 'Some log message',
param1: {
a : 'b',
c : 'd'
},
param2: 'val2'
};
这returns一个错误:
{"type":"mapper_parsing_exception","reason":"failed to parse [param1]","caused_by":{"type":"illegal_argument_exception","reason":"unknown property [a]"}}
我可以调整什么来记录这个嵌套对象?
这是因为当您将 param1
记录为字符串时,ES 创建了一个字符串类型的字段。
此后,您尝试将 param1
记录为对象,这与字符串类型冲突。
但是,您绝对可以记录一个嵌套对象,但您必须给它一个已经存在的字段的另一个名称,比如 param3
,这应该有效:
// sending an object
var obj = {
message: 'Some log message',
param3: {
a : 'b',
c : 'd'
},
param2: 'val2'
};