我最近将我的ElasticStack实例从5.5升级到6.0,看来这个版本的一些重大变化已经损害了我的管道。我有一个脚本,根据ElasticSearch中的索引,为一些类似索引的组自动创建索引模式。问题是,随着6.0版本的新映射更改,我无法从控制台添加任何新的索引模式。这是我使用的请求并在5.5中正常工作:
curl -XPOST "http://localhost:9200/.kibana/index-pattern" -H 'Content- Type: application/json' -d'
{
"title" : "index_name",
"timeFieldName" : "execution_time"
}'
这是我现在在6.0中从ElasticSearch获得的回复:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [.kibana] as the final mapping would have more than 1 type: [index-pattern, doc]"
}
],
"type": "illegal_argument_exception",
"reason": "Rejecting mapping update to [.kibana] as the final mapping would have more than 1 type: [index-pattern, doc]"
},
"status": 400
}
如何从控制台添加索引模式,避免出现这种多重映射问题?
答案 0 :(得分:4)
版本6.0.0中的URL已更改,这是新URL:
http://localhost:9200/.kibana/doc/doc:index-pattern:my-index-pattern-name
此CURL应该适合您:
curl -XPOST "http://localhost:9200/.kibana/doc/index-pattern:my-index-pattern-name" -H 'Content-Type: application/json' -d'
{
"type" : "index-pattern",
"index-pattern" : {
"title": "my-index-pattern-name*",
"timeFieldName": "execution_time"
}
}'
答案 1 :(得分:0)
在Elasticsearch 6.0.0或更高版本中创建的索引可能只包含单个映射类型。
在5.x中使用多种映射类型创建的索引将继续像以前一样在Elasticsearch 6.x中运行。
将在Elasticsearch 7.0.0中完全删除映射类型。
也许您正在ES 6.0.0中创建一个包含多个doc_types的索引。 https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
答案 2 :(得分:0)
如果您是Kibana 7.0.1 / 7 + ,则可以引用save_objects API,例如: 请参阅:https://www.elastic.co/guide/en/kibana/master/saved-objects-api.html(查找获取,创建,删除等)。
在这种情况下,我们将使用:https://www.elastic.co/guide/en/kibana/master/saved-objects-api-create.html
$ curl -X POST -u $user:$pass -H "Content-Type: application/json" -H "kbn-xsrf:true" "${KIBANA_URL}/api/saved_objects/index-pattern/dummy_index_pattern" -d '{ "attributes": { "title":"index_name*", "timeFieldName":"sprint_start_date"}}' -w "\n" | jq
和
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 327 100 250 100 77 543 167 --:--:-- --:--:-- --:--:-- 543
{
"type": "index-pattern",
"id": "dummy_index_pattern",
"attributes": {
"title": "index_name*",
"timeFieldName": "sprint_start_date"
},
"references": [],
"migrationVersion": {
"index-pattern": "6.5.0"
},
"updated_at": "2020-02-25T22:56:44.531Z",
"version": "Wzg5NCwxNV0="
}
将$KIBANA_URL
设置为:http://my-elk-stack.devops.local:5601
如果尚未安装jq
,请从命令中删除| jq
(如上所列)。
PS :使用KIBANA的GUI创建index-pattern
时,Kibana将其索引ID
存储为字母数字值( 例如: laskl32ukdflsdjflskadf-sdf-sdfsaldkjfhsdf-dsfasdf ),在执行GET
操作来查找时很难使用/查找/键入使用以下curl命令有关现有索引模式的信息。
如果您传递了索引模式名称(就像我们上面所做的那样),那么在Kibana / Elasticsearch中,它将通过您为REST调用指定的名称来讲述索引模式的ID
(例如: ... / api / saved_objects / index-pattern / dummy_index_pattern “)
此处: dummy_index_pattern 将成为ID
(仅当您将鼠标悬停在Kibana GUI中的索引模式名称上时才可见)和
它的索引名称为:index_name*
(即,当您单击Kibana Home > Gear icon > Index Patterns
并在右侧看到索引模式时,GUI中列出的内容)。
注意:timeFieldName是 非常重要 。这是用于查找时间序列事件的字段(尤其是TSVB时间序列Visual Builder可视化类型)。默认情况下,它使用@timestamp
字段,但是每次重新创建索引(而不是从数据源(例如JIRA)将增量信息发送到目标Elasticsearch索引的增量信息)并一次发送所有数据时来自数据源,那么@timestamp
将无法使用Visualization的时间跨度/窗口功能(,您可以将时间从过去1周更改为过去1小时或过去6个月);在这种情况下,您可以像我以前那样设置其他字段,即sprint_start_date
(现在在Kibana Discover数据页面中,如果选择此索引模式,它将使用sprint_start_date
(类型:日期)字段,用于事件。
要获取有关新创建的索引模式的索引模式信息,可以参考:https://www.elastic.co/guide/en/kibana/master/saved-objects-api-get.html-或运行以下命令,其中(URL路径中的最后一个值是{我们先前创建的索引模式的{1}}值:
ID
或
否则(如果要对通过Kibana的GUI /网页在页面curl -X GET "${KIBANA_URL}/api/saved_objects/index-pattern/dummy_index_pattern" | jq
下创建的索引模式执行GET
,则必须输入以下内容:
Index Pattern > Create Index Pattern
答案 3 :(得分:0)
批量创建带有时间戳的索引模式:
cat index_svc.txt
my-index1
my-index2
my-index3
my-index4
my-index5
my-index6
cat index_svc.txt | while read index; do
echo -ne "create index-pattern ${index} \t"
curl -XPOST "http://10.0.1.44:9200/.kibana/doc/index-pattern:${index}" -H 'Content-Type: application/json' -d "{\"type\":\"index-pattern\",\"index-pattern\":{\"title\":\"${index}2020*\",\"timeFieldName\":\"@timestamp\"}}"
echo
done
答案 4 :(得分:0)
对于带有Open Distro安全插件的Kibana 7.7.0(准确地说是amazon/opendistro-for-elasticsearch-kibana:1.8.0
Docker映像),这对我有用:
curl -X POST \
-u USERNAME:PASSWORD \
KIBANA_HOST/api/saved_objects/index-pattern \
-H "kbn-version: 7.7.0" \
-H "kbn-xsrf: true" \
-H "content-type: application/json; charset=utf-8" \
-d '{"attributes":{"title":"INDEX-PATTERN*","timeFieldName":"@timestamp","fields":"[]"}}'
请注意,kbn-xsrf
标头是必需的,但从安全角度来看似乎没用。
输出就像:
{"type":"index-pattern","id":"UUID","attributes":{"title":"INDEX-PATTERN*","timeFieldName":"@timestamp","fields":"[]"},"references":[],"migrationVersion":{"index-pattern":"7.6.0"},"updated_at":"TIMESTAMP","version":"VERSION"}
我不知道为什么migrationVersion.index-pattern
是“ 7.6.0”。
对于其他Kibana版本,您应该能够: