Расположение пользовательских панелей Kibana в ElasticSearch

Я знаю, что сохраненные информационные панели Kibana (т.е. файл JSON на панели управления) сохраняются в OR, связанном с конкретным экземпляром ElasticSearch. Если бы я должен был сохранить экземпляр Kibana при подключении к одному серверу, на котором размещен ElasticSearch, и я должен был переключить свой сервер ElasticSearch на другой адрес, я потерял бы свою сохраненную панель мониторинга. Но если я вернусь к исходному адресу сервера, я верну сохраненную панель.

Таким образом, мой вопрос заключается в том, где именно в каталоге установки elasticsearch хранятся информационные панели. Я бы предпочел запустить script для автоматической загрузки моих предварительно созданных панелей Kibana, чем принудительно копировать/вставлять JSON через веб-консоль каждый раз, когда я запускаю новый экземпляр ElasticSearch.

Спасибо за помощь.

UPDATE

В соответствии с этим Google Groups post, информационные панели сохраняются в kibana-int _index с _type dashboard и _id что я назвал. Итак, чтобы сохранить мои панели в новые экземпляры ElasticSearch, мне просто нужно выполнить PUT в этом _index через CURL? Есть ли лучший способ сделать это?

Ответы

Ответ 1

Да, панели управления Kibana сохраняются в Elasticsearch под индексом kibana-int (по умолчанию вы можете переопределить это в файле config.js). Если вы хотите переместить свои панели управления Kibana в другой кластер ES, у вас есть два варианта:

  • Экспортировать вручную панели мониторинга. Нажмите Save → Advanced → Export Schema. Вам нужно сохранить файл, а затем в новом Kibana, который вы должны импортировать, нажмите "Загрузить" → "Дополнительно" → "Выбрать файл" и выберите файл, который был выбран. Это боль, потому что вам нужно выполнить эту операцию на панели управления, которую вы хотите перенести.
  • Вы можете использовать утилиту для переноса индекса ES из одного кластера ES в другой. Уже есть некоторые утилиты, которые могут выполнять эту операцию. Поиск в SO, я нашел этот ответ, который предлагает вам использовать Elasticsearch.pm library (Perl: S), чтобы сделать это. Вероятно, таких утилит больше, но я не думаю, что выполнение script, переносящего индекс в другой кластер, является такой трудной задачей.

EDIT:. Для второго варианта вы можете использовать библиотеку python elasticsearch и ее помощник reindex, если вы чувствуете себя более комфортно с Python: https://elasticsearch-py.readthedocs.org/en/latest/helpers.html#elasticsearch.helpers.reindex

Ответ 2

В версии 1.0.0+ из ElasticSearch были доступны доступ к моментальным снимкам и API восстановления:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html

http://chrissimpson.co.uk/elasticsearch-snapshot-restore-api.html

Это позволяет быстро выполнить резервное копирование (моментальный снимок) и восстановить каждый или любой индекс, который находится на любом заданном кластере. Таким образом, вы можете посмотреть обновление до этой версии, так как это даст вам простой вызов API, чтобы сделать снимок индекса "kibana-int" и восстановить этот индекс для любого другого кластера.

Ответ 3

Здесь находится автономный Python script, который может копировать панели управления Kibana от хоста elasticsearch к другому.

#!/bin/env python

"""Migrate all the kibana dashboard from SOURCE_HOST to DEST_HOST.

This script may be run repeatedly, but any dashboard changes on
DEST_HOST will be overwritten if so.

"""

import urllib2, urllib, json


SOURCE_HOST = "your-old-es-host"
DEST_HOST = "your-new-es-host"


def http_post(url, data):
    request = urllib2.Request(url, data)
    return urllib2.urlopen(request).read()


def http_put(url, data):
    opener = urllib2.build_opener(urllib2.HTTPHandler)
    request = urllib2.Request(url, data)
    request.get_method = lambda: 'PUT'
    return opener.open(request).read()


if __name__ == '__main__':
    old_dashboards_url = "http://%s:9200/kibana-int/_search" % SOURCE_HOST

    # All the dashboards (assuming we have less than 9999) from
    # kibana, ignoring those with _type: temp.
    old_dashboards_query = """{
       size: 9999,
       query: { filtered: { filter: { type: { value: "dashboard" } } } } }
    }"""

    old_dashboards_results = json.loads(http_post(old_dashboards_url, old_dashboards_query))
    old_dashboards_raw = old_dashboards_results['hits']['hits']

    old_dashboards = {}
    for doc in old_dashboards_raw:
        old_dashboards[doc['_id']] = doc['_source']

    for id, dashboard in old_dashboards.iteritems():
        put_url = "http://%s:9200/kibana-int/dashboard/%s" % (DEST_HOST, urllib.quote(id))
        print http_put(put_url, json.dumps(dashboard))

Ответ 4

На самом деле, очень легко, Скопируйте две папки:

1) .\elasticsearch\data\nodes\0\indices\.kibana 
2) .\elasticsearch\data\nodes\0\indices\kibana-int

вставьте новый поиск elastics.

Ответ 5

Для kibana 4 я нашел значение индекса по умолчанию в файле config/kibana.yml, и это было ".kibana"

Ниже приведена строка из файла конфигурации kibana.

kibana_index: ".kibana"

И вот запрос, который показал мне требуемые результаты

curl -XGET http://localhost:9200/.kibana/_search?type=dashboard&pretty=1

Ответ 6

Как говорили другие, вы можете найти все объекты, которые Kibana сохраняет в индексе .kibana в elasticsearch.

Самые последние версии Kibana 4 включают функцию экспорта и импорта, которая делает перемещение объектов с одной установки на другую очень простой. Вы можете найти эту функциональность, щелкнув вкладки "настройки", а затем "объекты".

Ответ 7

Автономный Ruby script, который может копировать одну панель мониторинга, ее визуализации и их сохраненные поиски из одного кластера в другой, находится в https://github.com/jim-davis/kibana-helper-scripts. Он слишком большой, чтобы вставить в эту рамку.