使用Kibana 6.0

时间:2017-11-21 10:02:56

标签: elasticsearch lucene request kibana

我最近将我的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
}

如何从控制台添加索引模式,避免出现这种多重映射问题?

5 个答案:

答案 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版本,您应该能够:

  1. 在浏览器中打开Kibana UI
  2. 打开开发者控制台,导航至“网络”标签
  3. 使用UI创建索引模式
  4. 在Developers控制台中打开POST请求,查看URL和标头,然后将其重写为cURL