lucene 使用Kibana 6.0或7+(v7.0.1)从控制台创建索引模式

nnt7mjpx  于 2022-11-07  发布在  Lucene
关注(0)|答案(5)|浏览(154)

我最近把我的ElasticStack示例从5.5升级到了6.0,这个版本的一些突破性的变化似乎已经损害了我的管道。我有一个脚本,它根据ElasticSearch中的索引,自动为一些类似的索引组创建索引模式。问题是,随着6.0版本的新Map变化,我无法从控制台添加任何新的索引模式。这是我在Python 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
}

如何从控制台添加索引模式以避免这种多Map问题?

ivqmmu1c

ivqmmu1c1#

在版本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"
  }
}'
8ljdwjyq

8ljdwjyq2#

如果您是Kibana7.0.1 / 7+,则可以引用saved_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存储为字母数字值(**例如:**laskl 32 ukdflsdjflskadf-sdf-sdfsaldkjfhsdf-dsfasdf),当使用以下curl命令执行GET操作以查找有关现有索引模式的信息时,很难使用/find/type。

如果您传递了索引模式名称(就像我们上面所做的那样),那么在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时间序列可视化构建器可视化类型)。默认情况下,它使用@timestamp字段,但如果您重新创建索引(而不是将增量信息从数据源发送到目标ElasticSearch索引(例如:JIRA)),并从数据源从头开始一次性发送所有数据,则@timestamp将无法使用可视化的时间跨度/窗口功能( 将时间从过去1周更改为过去1小时或过去6个月 *);在这种情况下,您可以设置一个不同的字段,即sprint_start_date,就像我使用的那样(现在在Kibana Discover数据页中,如果您选择此索引模式,它将使用sprint_start_date(类型:日期)字段。

GET新创建的索引模式的索引模式信息,可以参考:https://www.elastic.co/guide/en/kibana/master/saved-objects-api-get.html--或者运行以下代码,其中(URL路径中的最后一个值是我们之前创建的索引模式的ID值:

curl -X GET "${KIBANA_URL}/api/saved_objects/index-pattern/dummy_index_pattern" | jq


否则(如果您要对通过Kibana的GUI/网页在Page Index Pattern > Create Index Pattern下创建的索引模式执行GET,则必须输入以下内容:

curl -X GET "${KIBANA_URL}/api/saved_objects/index-pattern/jqlaskl32ukdflsdjflskadf-sdf-sdfsaldkjfhsdf-dsfasdf" | jq
lndjwyie

lndjwyie3#

对于带有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标头是必需的,但从安全的Angular 来看,它似乎是无用的。
输出如下:

{"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用户界面
1.打开开发人员控制台,导航到网络选项卡
1.使用UI创建索引模式
1.在开发人员控制台中打开POST请求,查看URL和标头,然后将其重写为cURL

iq3niunx

iq3niunx4#

在Elasticsearch 6.0.0或更高版本中创建的索引只能包含一个Map类型。
在5.x中创建的具有多个Map类型的索引将继续在Elasticsearch 6.x中像以前一样工作。
Map类型将在Elasticsearch 7.0.0中被完全删除。
也许您正在ES 6.0.0中创建一个具有多个doc_types的索引。https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html

mnemlml8

mnemlml85#

使用时间戳批量创建索引模式:

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

相关问题