elasticsearch,elastic-stack,Node.js,elasticsearch,Elastic Stack" /> elasticsearch,elastic-stack,Node.js,elasticsearch,Elastic Stack" />

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

Node.js 如何使用弹性(ELK)堆栈记录嵌套对象,node.js,elasticsearch,elastic-stack,Node.js,elasticsearch,Elastic 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 messag

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

令人惊叹的。如果我删除所有
param1
是字符串的索引,它会为我解决这个问题吗?(附:答案是thx!)是的,应该是这样。