elasticsearch - ElasticsearchTransport 使用 transform 来改变 indexPrefix?
问题描述
更新:我实际上可以使用下面的代码更改 indexPrefix,但_index
用于在 Kibana 中过滤的实际名称来自原始indexPrefix
. indexPrefix
在方法中更改似乎transformer
为时已晚,因为_index
已经使用原始前缀创建了。
我在 nodejs/express 设置中使用winston
andwinston-elasticsearch
并希望使用相同的记录器记录到不同的索引(不同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
.
有谁知道为什么?是否与下面列出的映射模板有关?:
{
"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": {}
}
}
}
}
解决方案
好的,如果有人感兴趣的话。我最终改为制作了一个 loggerFactory。我通过工厂创建了一个使用正确 indexPrefix 播种的记录器 - 这样我最终每个 indexPrefix 我想要一个记录器实例......
推荐阅读
- php - 您好,我刚刚在 php 的正则表达式中发现了整理序列,但它对我不起作用
- git - 切入 ZSH 不会从子外壳中切出 git 输出
- string - 从嵌套元胞数组中删除重复字符串
- c# - WPF C# .NET 4.7.2 / 索引 datagridcolumn 并更改格式
- php - 如何在每个容器(jQuery)中选择 $this 元素?
- pandas - 熊猫对日期类似的字符串进行切片并重新排列为日期格式
- python - 一个应用程序中的不和谐机器人和 websocket 服务器
- python - 在函数内的 for 循环中使用 tqdm
- c++ - C++ Windows 窗体应用程序中的 QueryPerformanceCounter 用法
- r - R新手-有没有办法分离或过滤出单个单元格中列出的项目以进行绘图?