Kibana: API создания шаблона индекса

Созданный на 29 апр. 2015  ·  21Комментарии  ·  Источник: elastic/kibana

Было бы полезно, если бы у нас был API для настройки начальной страницы «Настройка шаблона индекса», которая будет использоваться инструментами автоматизации или сценариями.

enhancement v5.0.0

Самый полезный комментарий

Для kibana 6.0 с использованием curl и jq:

url="http://localhost:5601"
index_pattern="logstash-*"
time_field="@timestamp"
# Create index pattern and get the created id
# curl -f to fail on error
id=$(curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/saved_objects/index-pattern" \
  -d"{\"attributes\":{\"title\":\"$index_pattern\",\"timeFieldName\":\"$time_field\"}}" \
  | jq -r '.id')
# Create the default index
curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/kibana/settings/defaultIndex" \
  -d"{\"value\":\"$id\"}"

Все 21 Комментарий

Согласен, было бы неплохо иметь. Также было бы здорово перенести синтаксический анализ сопоставления на сторону сервера, чтобы улучшить обработку больших сопоставлений.

Я третий это. Я стучал по запросам cURL, чтобы сделать это в течение последних 2 часов, и у меня ничего нет. Я буду продолжать попытки... но первоначальный метод создания шаблона индекса для программного запуска из других языков был бы чрезвычайно полезен.

да, я тоже с этим сталкивался, мое решение (обходной путь) похоже на ваше, я пишу прямо в индекс .kibana, по сути, в Ansible я закончу что-то вроде этого в задаче после развертывания:

curl -XPUT http://<es node>:9200/.kibana/index-pattern/events-* -d '{"title" : "events-*",  "timeFieldName": "EventTime"}'
curl -XPUT http://<es node>:9200/.kibana/config/4.1.1 -d '{"defaultIndex" : "events-*"}'

Я действительно не хочу писать в этот индекс, но я также не хотел использовать HTTP-потоки Kibana... Поэтому мне интересно делать это более поддерживаемым образом.

Было бы здорово, если бы это было каким-то образом автоматизировано — мы используем Elasticdump для достижения этой цели на данный момент, и это довольно хорошее решение, но оно требует, чтобы индекс сначала создавался «вручную», экспортировался, а затем добавлялся. к нашему марионеточному коду.

Закрытие в пользу #5199

Это было закрыто в пользу 5199, но 5199 было исключено - есть ли шанс вернуть это?

Веб-страница Kibana 5 находится POST

  • http://localhost :5601/es_admin/.kibana/index-pattern/filebeat-*/_create' для создания индекса
  • http://localhost :5601/api/kibana/settings/defaultIndex для установки по умолчанию
    Но для этого требуется заголовок kbn-xsrf.

Я смог добавить индекс в ES 5 с помощью этого POST

curl -XPOST -H 'Content-Type: application/json' \
  'http://localhost:9200/.kibana/index-pattern/filebeat-*' \
  -d'{"title":"filebeat-*","timeFieldName":"@timestamp","notExpandable":true}'

Но я не могу понять, где хранится defaultIndex.

POST на http://localhost :9200/.kibana/config/больше не работает. (Он работал на 4.x ).

Вы можете установить заголовок kbn-xsrf на что угодно, похоже, он не проверяется:

curl ${KIBANASERVER}/api/kibana/settings/defaultIndex \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/plain, */*" \
-H "kbn-xsrf: anything" -H "Connection: keep-alive" \
--data-binary ${YOURDEFAULTINDEX} -w "\n" --compressed 

Хм, я надеялся сделать GET против этого в 5.x.

$ curl http://localhost:9200/api/kibana/settings/defaultIndex
No handler found for uri [/api/kibana/settings/defaultIndex] and method [GET]
$ curl http://localhost:9200/.kibana/config/
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"No endpoint or operation is available at [config]"}],"type":"illegal_argument_exception","reason":"No endpoint or operation is available at [config]"},"status":400}

Похоже, вы отправили свой первый GET на эластичный (порт 9200), а не на Кибану.

Для kibana 6.0 с использованием curl и jq:

url="http://localhost:5601"
index_pattern="logstash-*"
time_field="@timestamp"
# Create index pattern and get the created id
# curl -f to fail on error
id=$(curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/saved_objects/index-pattern" \
  -d"{\"attributes\":{\"title\":\"$index_pattern\",\"timeFieldName\":\"$time_field\"}}" \
  | jq -r '.id')
# Create the default index
curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/kibana/settings/defaultIndex" \
  -d"{\"value\":\"$id\"}"

Спасибо @hobti01 ! Кажется, это также работает для Kibana 5.6.4.

Я обнаружил, что в Kibana 5.0 (и, возможно, также 6.0) вы можете установить конкретный Index pattern ID вместо случайного сгенерированного, поскольку скрипт @hobti01 хранит в id=$(... | jq -r '.id') ; это эквивалентно настройке следующего поля в пользовательском интерфейсе:

screenshot from 2017-12-05 16-11-25

Установка заданного идентификатора особенно удобна для автоматического развертывания Kibana, так как ваши экспортированные информационные панели и т. д. всегда будут ссылаться на фиксированный идентификатор, а не на случайный.

Вы можете сделать это, POST изменив этот идентификатор на /api/saved_objects/index-pattern/THE_ID .

Например:

curl -f -XPOST -H 'Content-Type: application/json' -H 'kbn-xsrf: anything' 'http://localhost:5601/api/saved_objects/index-pattern/logstash-*' '-d{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'

Скрипт @hobti01 настроен на использование фиксированного идентификатора:

#!/usr/bin/env bash
# From https://github.com/elastic/kibana/issues/3709
set -euo pipefail
url="http://localhost:5601"
index_pattern="logstash-*"
id="logstash-*"
time_field="@timestamp"
# Create index pattern
# curl -f to fail on error
curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/saved_objects/index-pattern/$id" \
  -d"{\"attributes\":{\"title\":\"$index_pattern\",\"timeFieldName\":\"$time_field\"}}"
# Make it the default index
curl -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" \
  "$url/api/kibana/settings/defaultIndex" \
  -d"{\"value\":\"$id\"}"

Когда идентификатор уже существует, сценарий завершится ошибкой с curl: (22) The requested URL returned error: 409 Conflict и кодом выхода 22.

@ nh2 вы можете удалить канал к jq при использовании статического идентификатора - спасибо за предложение!

вы можете удалить канал для jq при использовании статического идентификатора

Упс, точно! Отредактировано.

Когда идентификатор уже существует, сценарий завершится с ошибкой curl: (22) The requested URL returned error: 409 Conflict и кодом выхода 22.

Если вы этого не хотите и вместо этого хотите перезаписать поведение, используйте "$url/api/saved_objects/index-pattern/$id?overwrite=true" для первого вызова curl.

Затем вы получите ответы, в которых version подсчитывается каждый раз, когда вы это делаете, например:

{"id":"logstash-*","type":"index-pattern","version":2,"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}
{"id":"logstash-*","type":"index-pattern","version":3,"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}

Я также только что написал инструмент импорта CLI export.json для Kibana: https://github.com/nh2/kibana-importer

Вместе с этим и приведенным выше завитком index-pattern-creation теперь я могу полностью декларативно развернуть Kibana без необходимости загружать в него что-либо вручную.

К вашему сведению, попытка этого против es 6.2.2 не удалась:

/ # curl http://es-api.kube-system.svc.cluster.local:9200
{
  "name" : "Yw3vJ4X",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "HWh0uIo2Q6uL4LOZXnau5Q",
  "version" : {
    "number" : "6.2.2",
    "build_hash" : "10b1edd",
    "build_date" : "2018-02-16T19:01:30.685723Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
/ # curl -f -XPOST -H "Content-Type: application/json" -H "kbn-xsrf: anything" 'http://es-api.kube-system.svc.cluster
.local:9200/api/saved_objects/index-pattern/logstash-*' -d'{"attributes":{"title":"logstash-*","timeFieldName":"<strong i="6">@time</strong>
stamp"}}'
curl: (22) The requested URL returned error: 400 Bad Request

Какие-либо предложения?

@matthewadams похоже, что вы делаете запрос к elasticsearch без использования конечной точки «.kibana». Попробуйте сделать POST непосредственно в kibana.

Если вы предпочитаете метод загрузки информационных панелей и шаблонов индексов из файловой системы (для использования с Chef, Puppet, Salt и т. д.), поручитесь за него: https://github.com/elastic/kibana/issues/2310 .

@sandstrom Если под «поручился», вы имеете в виду, что поставили большой палец вверх по проблеме, я сделал это. :) Приятно знать, что я не единственный.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги