将 Logstash 与 Elasticsearch 输出结合使用时,.raw 字段从何而来?

Where do .raw fields come from when using Logstash with Elasticsearch output?

当同时使用 Logstash 和 Elasticsearch 时,带有 .raw 的字段会附加到分析的字段中,因此当使用 Kibana 等工具查询 Elasticsearch 时,可以按原样使用字段的值而无需按词拆分还有什么不是。

我使用所有最新版本构建了 ELK 堆栈的新安装,并注意到我的 .raw 字段不再像在堆栈的旧版本上那样被创建。有很多 folks posting solutions of creating templates on Elasticsearch,但我没能找到很多关于 为什么 这可以解决问题的信息。为了更好地理解更广泛的问题,我提出了这个具体问题:

.raw 字段来自哪里?

我曾假设 Logstash 在插入文档时使用分析后的字符串和原始字符串填充 Elasticsearch,但考虑到修复存在于 Elasticsearch 模板中这一事实,我怀疑我的假设是否正确。

您假设 .raw 字段是 Logstash 创建的默认索引模板中包含的字符串字段动态模板的结果是正确的 IF manage_template: true (它是由默认)。

可以看到 Logstash 创建的默认模板(从 2.1 开始)here。正如您在第 26 行看到的,所有字符串字段(message 除外)都创建了 not_analyzed .raw 子字段。

但是,模板在最新的 Logstash 版本中没有改变,如 template.json change history 中所示,所以要么是您的安装有其他问题,要么是您更改了 Logstash 配置以使用您自己的索引模板(没有 .raw 字段)。

如果您 运行 curl -XGET localhost:9200/_template/logstash* 您应该会看到 Logstash 创建的模板。