如何用弹性(ELK)堆栈记录嵌套对象



我试图通过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'
};

返回一个错误:

{"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'
};

相关内容

  • 没有找到相关文章

最新更新