Au fil des flows

30jan/157

Importer et exporter vos tableaux de bords de Kibana en ligne de commande

Posted by Fabien Arcellier

Kibana est une console visuelle extraordinaire. En quelques heures, vous pouvez créer un tableau de bord pour l'analyse de vos données. Lorsque j'expérimente, j'efface souvent le contenu du noeud elasticsearch pour relancer les imports logstash.
Cette opération efface tous les tableaux de bords personnalisés.

Kibana stocke la configuration de ces tableaux de bord directement sous forme de document dans Elasticsearch dans l'index kibana-int. Voici quelques requetes pour les manipuler.

Requete elasticsearch pour manipuler vos tableaux de bord

Requete avec curl pour voir l'ensemble des dashboards de Kibana :

curl http://localhost:9200/_search?q=dashboard:*&pretty

Requete avec curl pour exporter / sauvegarder un dashboard appellé "Custom"

curl http://localhost:9200/kibana-int/dashboard/Custom/_source > Custom.json

Requete avec curl pour supprimer le dashboard "Custom" :

curl -XDelete http://localhost:9200/kibana-int/dashboard/Custom

Requete avec curl pour creer un dashboard depuis le fichier json :

curl -XPOST --data-binary @Custom.json http://localhost:9200/kibana-int/dashboard/Custom

Exporter et importer vos tableaux de bords avec un script

Voici un script python pour l'exportation :

# python export-kibana-dashboards.py http://localhost:9200 > data/dashboards.json

import sys, urllib, json

if len(sys.argv) < 2 :
    print("usage :  python export-kibana-dashboards.py http://localhost:9200 > file.json")
    exit()

elasticsearch_url = sys.argv[1]
query_url = elasticsearch_url + "/_search?q=dashboard:*"
response = urllib.urlopen(query_url)
data = json.loads(response.read())
dashboards = data['hits']['hits']

print(json.dumps(dashboards, sort_keys=True, indent=4))

Voici le script pour réimporter votre fichier json

# python import-kibana-dashboards.py http://localhost:9200 < file.json

import sys, httplib, urllib2, json

if len(sys.argv) < 2 :
    print("usage :  python import-kibana-dashboards.py http://localhost:9200 < file.json")
    exit()

elasticsearch_url = sys.argv[1]
post_dashboard_url = elasticsearch_url + "/kibana-int/dashboard"

json_dashboards = sys.stdin.read()
dashboards = json.loads(json_dashboards)

for dashboard in dashboards:
    try:
        print("Importation de %s" % dashboard["_id"])
        data = json.dumps(dashboard['_source'])

        url = post_dashboard_url + "/" + urllib2.quote(dashboard["_id"])
        req = urllib2.Request(url, data)
        req.add_header('Content-Length', str(len(data)))
        req.add_header('Content-Type', 'application/octet-stream')
        res = urllib2.urlopen(req)
        print(res)
    except  httplib.BadStatusLine as e:
        print(e)
Remplis sous: Non classé 7 Commentaires