elasticsearchtransport使用transform来更改indexprefix?

ws51t4hk  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(408)

更新:我实际上可以使用下面的代码更改indexprefix,但是 _index 在kibana中用于过滤的从原始 indexPrefix . 它似乎改变了世界 indexPrefixtransformer 方法太晚了,因为 _index 已使用原始前缀创建。
我在用 winston 以及 winston-elasticsearch 在nodejs/express设置中,并希望使用相同的记录器记录到不同的索引(不同的 indexPrefix )

const logger = winston.createLogger({
  transports
});

传输是不同传输的数组。其中一个是 ElasticsearchTransport 包含一些参数,比如 indexPrefix 以及 level 在其他中。通过传入 transformer 方法作为参数。

new winstonElastic.ElasticsearchTransport({
      level: logLevel,
      indexPrefix: getIndex(),
      messageType: 'log',
      ensureMappingTemplate: true,
      mappingTemplate: indexTemplateMapping,
      transformer: (logData: any) => {
        const transformed: any = {};
        transformed['@timestamp'] = logData.timestamp ? logData.timestamp : new Date().toISOString();
        transformed.message = logData.message;
        transformed.level = parseWinstonLevel(logData.level);
        transformed.fields = _.extend({}, staticMeta, logData.meta);
        transformed.indexPrefix = getIndex(logData.indexPrefix);
        return transformed;
      },

每当记录器写入新条目时,就会调用transformer方法,我可以通过设置如下属性来验证它是否工作 message . 它还会覆盖 level 无论当前日志级别是什么。因为某些原因,它在这片土地上不起作用 indexPrefix -即使它发生了变化,也不会覆盖初始值 indexPrefix . 我甚至尝试删除初始值,但是日志记录失败,因为从未设置初始值 indexPrefix .
有人知道为什么吗?是否与下面列出的Map模板有关

{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "index": {
      "refresh_interval": "5s"
    }
  },
  "mappings": {
    "properties": {
      "@timestamp": { "type": "date" },
      "@version": { "type": "keyword" },
      "message": { "type": "text" },
      "severity": { "type": "keyword" },
      "fields": {
        "dynamic": true,
        "properties": {}
      }
    }
  }
}
vlju58qv

vlju58qv1#

好吧,如果有人被询问。结果我改成了一家伐木厂。我通过工厂创建了一个以正确的indexprefix作为种子的记录器-这样我就可以为每个indexprefix创建一个记录器示例。。。

相关问题