我正在Kibana上创建一个Winston-elasticsearch记录器,我需要在其中保存应用程序中发生的所有事情(请求,api,...)。我使用this(https://github.com/vanthome/winston-elasticsearch)定义了一个json映射模板。还有一个converter.js文件,我在其中定义了一个Transformer函数,将winston提供的日志数据转换为更适合在ES中建立索引的消息结构。
然后我使用winston-elasticsearch创建新的Es实例:
exports.mappingTemplate = require('../../../index-template-mapping.json');
const TransportersElastic = new Elasticsearch({
index: 'soapserver',
level: 'info',
indexPrefix: 'logs',
transformer: transformer,
ensureMappingTemplate: true,
mappingTemplate: mappingTemplate,
flushInterval: 2000,
waitForActiveShards: 1,
handleExceptions: false,...
但是我不断收到类型为'mapper_parsing_exception'的Elasticsearch索引错误,原因如下:无法解析类型为[text]的字段[fields.result.status]'
illegal_argument_exception'原因:“无法解析类型为[long]的字段[fields.rows.tmcode]” 这里是converter.js:
exports.mappingTemplate = require('../../../index-template-mapping.json');
exports.transformer = (logData) => {
const transformed = {};
transformed['@timestamp'] = new Date().toISOString();
transformed.source_host = os.hostname();
transformed.message = logData.message;
if (typeof transformed.message === 'object') {
transformed.message = JSON.stringify(transformed.message);
我需要帮助,建议如何解决这些错误并成功完成映射。
这是index-mapping-template.json
{
"mapping": {
"_doc": {
"properties": {
"@timestamp": {
"type": "date"
},
"fields": {
"ignore_malformed": true,
"dynamic": "true",
"properties": {}
},
"message": {
"type": "text"
},
"severity": {
"type": "keyword"
}
}
}
}
}