web-dev-qa-db-fra.com

Emplacement des tableaux de bord Kibana personnalisés dans ElasticSearch

Je sais pertinemment que les tableaux de bord Kibana enregistrés (c'est-à-dire le fichier JSON du tableau de bord) sont enregistrés dans OR associé à une instance particulière de ElasticSearch. Si je sauvegardais mon instance Kibana lorsqu’il était connecté à un serveur hébergeant ElasticSearch et si je changeais de serveur ElasticSearch pour une autre adresse, je perdrais mon tableau de bord enregistré. Mais si je devais revenir à l'adresse du serveur d'origine, je récupérerais le tableau de bord enregistré.

Ma question est donc de savoir où exactement dans le répertoire d'installation elasticsearch se trouvent les tableaux de bord enregistrés. Je préférerais pouvoir exécuter un script pour charger automatiquement mes tableaux de bord Kibana pré-créés plutôt que de devoir copier/coller JSON via la console Web chaque fois que je démarre une nouvelle instance ElasticSearch.

Merci pour l'aide.

METTRE À JOUR

Selon ce messages Google Groupes , les tableaux de bord sont enregistrés dans le kibana-int_index avec un _type de dashboard et un _id de ce que j'ai nommé le. Donc, pour enregistrer mes tableaux de bord dans de nouvelles instances ElasticSearch, dois-je simplement exécuter un PUT dans cet index via CURL? Y a-t-il une meilleure manière de faire cela?

22
ecbrodie

Oui, les tableaux de bord Kibana sont enregistrés dans Elasticsearch sous l'index kibana-int (par défaut, vous pouvez le remplacer dans le fichier config.js). Si vous souhaitez déplacer vos tableaux de bord Kibana vers un autre cluster ES, vous avez deux options:

  1. Exportez manuellement les tableaux de bord. Cliquez sur Enregistrer -> Avancé -> Exporter le schéma. Vous devez enregistrer le fichier, puis l'importer dans le nouveau Kibana. Cliquez sur Charger -> Avancé -> Choisir un fichier et choisissez le fichier sélectionné. Cela pose un problème, car vous devez effectuer cette opération pour chaque tableau de bord que vous souhaitez migrer.
  2. Vous pouvez utiliser un utilitaire pour migrer un index ES d'un cluster ES à un autre. Certains utilitaires peuvent déjà effectuer cette opération. En cherchant dans SO, j'ai trouvé cette réponse qui vous suggère d'utiliser la bibliothèque Elasticsearch.pm (Perl: S) pour le faire. Il y a probablement plus d'utilitaires comme celui-ci, mais je ne pense pas que faire un script qui migre un index vers un autre cluster soit une tâche aussi difficile.

EDIT: Pour la deuxième option, vous pouvez utiliser la bibliothèque python elasticsearch et son aide reindex, si vous vous sentez plus à l'aise avec Python: https://elasticsearch-py.readthedocs.org/en/latest/helpers .html # elasticsearch.helpers.reindex

18
Pigueiras

En fait, très facile, Copiez deux dossiers: 

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

coller dans le nouvel elasticsearch.

6
dehamuhtar

Dans la version 1.0.0+ de ElasticSearch, les API de capture instantanée et de restauration sont disponibles:

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

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

Cela vous permet de sauvegarder rapidement (instantané) et de restaurer tous les index, ou tous les index, appartenant à un cluster donné. Ainsi, vous voudrez peut-être envisager de mettre à niveau cette version, car cela vous donnera un simple appel d'API pour prendre un instantané de l'index "kibana-int" et restaurer cet index sur un autre cluster.

4
rabson85

Voici un script Python autonome permettant de copier des tableaux de bord Kibana d'elasticsearch Host vers un autre.

#!/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 __== '__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
Wilfred Hughes

Pour kibana 4, j'ai trouvé la valeur d'index par défaut dans le fichier config/kibana.yml et il s'agissait de ".kibana"

Voici la ligne du fichier de configuration kibana.

kibana_index: ".kibana"

Et voici la requête qui m'a affiché les résultats requis

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

3
bhavay garg

Comme d'autres l'ont déjà dit, tous les objets sauvegardés par Kibana sont répertoriés dans l'index .kibana dans elasticsearch. 

Les versions les plus récentes de Kibana 4 incluent une fonction d'exportation et d'importation qui facilite le déplacement d'objets d'une installation à une autre. Vous pouvez trouver cette fonctionnalité en cliquant sur les onglets "paramètres", puis "objets".

2
Spencer Alger

Un script Ruby autonome capable de copier un tableau de bord unique, ses visualisations et leurs recherches stockées d'un cluster à l'autre se trouve à https://github.com/jim-davis/kibana-helper-scripts . C'est un peu trop gros pour être collé dans cette case.

0
Jim Davis