gpt4 book ai didi

elasticsearch - 未应用自定义索引模板

转载 作者:行者123 更新时间:2023-11-29 02:55:58 24 4
gpt4 key购买 nike

我有一个项目,我要分析和可视化访问日志数据。我使用 Logstash 将数据发送到 Elasticsearch,然后使用 Kibana 可视化一些东西。
在我发现我需要 Path Hierarchy Analyzer 来显示我想要的内容之前,一切都运行良好。我现在有一个自定义模板 (JSON) 并更改了我的 Logstash 配置的输出部分。但是当我索引数据时,我的模板没有被应用。

(Elasticseach 和 Logstash 版本 5.2,无法更新,因为那是我工作的地方使用的版本)。

我的 JSON 文件有效。就输入和过滤器而言,我的 Logstash 配置也很好。我想我在输出中犯了一个错误。

我已经尝试将 manage_template 设置为 false。为此,我还尝试了 template_overwrite => "false"。

我尝试先创建索引 (Kibana Dev Tools),然后再填充它。我创建了索引模板,然后创建了索引。这样我的模板就被应用了,当我创建索引模式时,一切似乎都是正确的。然后我索引了我的一个日志文件。我最终遇到了 Courier Fetch 错误。 http://localhost:9200/_all/_mapping?pretty=1向我展示了在索引我的数据时使用的是默认模板而不是我的自定义模板。与添加自定义模板之前没有什么不同。

我在网上搜索并阅读了我在 stackoverflow 和 elastic 论坛上可以找到的关于未应用自定义模板的所有内容。我尝试了那里提供的所有解决方案,这就是为什么我最终选择在本地保存的自定义模板并在我的 logstash 输出中提供路径的原因。但我现在完全没有想法。

这是我的 logstash 配置的输出:

output {

elasticsearch {

hosts => ["localhost:9200"]
template => "/etc/logstash/conf.d/template.json"
index => "beam-%{+YYYY.MM.dd}"
manage_template => "true"
template_overwrite => "true"
document_type => "beamlogs"
}

stdout {
codec => rubydebug
}

}

这是我的自定义模板:

{
"template": "beam_custom",
"index_patterns": "beam-*",
"order" : 5,
"settings": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"custom_path_tree": {
"tokenizer": "custom_hierarchy"
},
"custom_path_tree_reversed": {
"tokenizer": "custom_hierarchy_reversed"
}
},
"tokenizer": {
"custom_hierarchy": {
"type": "path_hierarchy",
"delimiter": "/"
},
"custom_hierarchy_reversed": {
"type": "path_hierarchy",
"delimiter": "/",
"reverse": "true"
}
}
}
},
"mappings": {
"beamlogs": {
"properties": {
"object": {
"type": "text",
"fields": {
"tree": {
"type": "text",
"analyzer": "custom_path_tree"
},
"tree_reversed": {
"type": "text",
"analyzer": "custom_path_tree_reversed"
}
}
},
"referral": {
"type": "text",
"fields": {
"tree": {
"type": "text",
"analyzer": "custom_path_tree"
},
"tree_reversed": {
"type": "text",
"analyzer": "custom_path_tree_reversed"
}
}
},
"@timestamp" : {
"type" : "date"
},
"action" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"datetime" : {
"type" : "date",
"format": "time_no_millis",
"fields" : {
"keyword" : {
"type": "keyword"
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"info" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"message" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"page" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"path" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"result" : {
"type" : "long"
},
"s_direct" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"s_limit" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"s_mobile" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"s_terms" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"size" : {
"type" : "long"
},
"sort" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
}
}
}
}

索引我的数据后,这是我用 http://localhost:9200/_all/_mapping?pretty=1 得到的一部分

"datetime" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"object" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},

日期时间不应该有文本类型。但更糟糕的是,甚至没有创建像 objet.tree 这样的字段。

我真的不关心 datetime 的错误映射,但我需要让 Path Hierarchy Analyzer 正常工作。我只是不知道该怎么办了。


所以。我刚刚尝试在 Kibana 中创建索引模板。

PUT _template/beam_custom
/followed by what is in my template.json

然后我检查了模板是否已创建。

GET _template/beam_custom

输出是这样的:

    {
"beam_custom": {
"order": 100,
"template": "beam_custom",
"settings": {
"index": {
"analysis": {
"analyzer": {
"custom_path_tree_reversed": {
"tokenizer": "custom_hierarchy_reversed"
},
"custom_path_tree": {
"tokenizer": "custom_hierarchy"
}
},
"tokenizer": {
"custom_hierarchy": {
"type": "path_hierarchy",
"delimiter": "/"
},
...

所以我想创建模板是可行的。

然后我创建了一个索引

    PUT beam-2019-07-15

但是当我检查索引时,我得到了这个:

    {
"beam-2019.07.15": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1563044670605",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "rGzplctSQDmrI_NSlt47hQ",
"version": {
"created": "5061699"
},
"provided_name": "beam-2019.07.15"
}
}
}
}

索引模式不应该已经被识别了吗?我认为这是问题的核心。我以为我的模板会被使用,输出应该是这样的:

{
"beam-2019.07.15": {
"aliases": {},
"mappings": {
"logs": {
"properties": {
"@timestamp": {
"type": "date"
},
"action": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},...

为什么它不能识别模式?

最佳答案

所以,我发现了错误。

当我查找如何构建自己的模板时,我有时会查看当前版本的文档。但在 5.2. 中,“index_patterns =>”不存在。

"template": "beam_custom",
"index_patterns": "beam-*",

当然,这行不通。

相反,我删除了“index_patterns”行并在模板参数中定义了我的模式。

"template": ["beam-*"],
//rest

这解决了问题。之后,我的模式被识别出来了。

然而,我现在面临着一个不同的问题。 Path Hierarchy Analyzer 工作不正常。 object.tree 和我想要的其他字段没有被创建。

GET beam-*/_search
{
"query": {
"term": {
"object.tree": "/belletristik/"
}
}
}

虽然我应该有几百次点击,但一无所获。查看我的数据,我的路径没有分析字段。有什么想法吗?

关于elasticsearch - 未应用自定义索引模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com