Было бы полезно, если бы у нас был API для настройки начальной страницы «Настройка шаблона индекса», которая будет использоваться инструментами автоматизации или сценариями.
Согласен, было бы неплохо иметь. Также было бы здорово перенести синтаксический анализ сопоставления на сторону сервера, чтобы улучшить обработку больших сопоставлений.
Я третий это. Я стучал по запросам 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
Я смог добавить индекс в 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/
Вы можете установить заголовок 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')
; это эквивалентно настройке следующего поля в пользовательском интерфейсе:
Установка заданного идентификатора особенно удобна для автоматического развертывания 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 Если под «поручился», вы имеете в виду, что поставили большой палец вверх по проблеме, я сделал это. :) Приятно знать, что я не единственный.
Самый полезный комментарий
Для kibana 6.0 с использованием curl и jq: