Kibana: API de création de modèles d'index

Créé le 29 avr. 2015  ·  21Commentaires  ·  Source: elastic/kibana

Il serait utile si nous pouvions avoir une API pour configurer la page initiale "configurer un modèle d'index" à utiliser pour les outils d'automatisation ou les scripts.

enhancement v5.0.0

Commentaire le plus utile

Pour kibana 6.0 utilisant curl et 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\"}"

Tous les 21 commentaires

D'accord, ce serait bien d'avoir. Il serait également génial de déplacer l'analyse du mappage côté serveur pour améliorer la gestion des mappages volumineux.

Je troisième cela. J'ai tapé sur des requêtes cURL pour le faire au cours des 2 dernières heures et je n'ai rien. Je vais continuer à essayer... mais une méthode initiale de création de modèle d'index pour s'exécuter par programmation à partir d'autres langages serait extrêmement bénéfique.

ouais moi aussi j'ai été confronté à cela, ma solution (contournement) est similaire à la vôtre, j'écris directement à l' index .kibana , essentiellement, dans Ansible je finirai par faire quelque chose comme ça dans une tâche post-déploiement :

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-*"}'

Je ne veux pas vraiment écrire dans cet index, mais je ne voulais pas non plus utiliser les flux HTTP Kibana... Je suis donc intéressé à le faire d'une manière plus prise en charge.

Ce serait formidable si cela était automatisé d'une manière ou d'une autre - nous utilisons Elasticdump pour y parvenir pour le moment, et c'est une assez bonne solution, mais cela nécessite que l'index soit d'abord créé "à la main", exporté, puis ajouté à notre code de marionnette.

Clôture en faveur de #5199

Cela a été clôturé en faveur de 5199, mais 5199 a été abandonné - une chance de récupérer cela ?

La page Web de Kibana 5 POST

  • http://localhost :5601/es_admin/.kibana/index-pattern/filebeat-*/_create' pour créer l'index
  • http://localhost :5601/api/kibana/settings/defaultIndex pour définir la valeur par défaut
    Mais il nécessite l'en-tête kbn-xsrf.

J'ai pu ajouter un index à ES 5 avec ce POST

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

Mais je ne peux pas comprendre où le defaultIndex est stocké.

POST vers http://localhost :9200/.kibana/config/ne fonctionne plus. (Cela a fonctionné sur 4.x ).

Vous pouvez définir l'en-tête kbn-xsrf sur n'importe quoi, il ne semble pas être coché :

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 

Hmm, espérait faire un GET contre cela dans 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}

On dirait que vous avez lancé votre premier GET sur elastic (port 9200) et non sur Kibana.

Pour kibana 6.0 utilisant curl et 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\"}"

Merci @hobti01 ! Cela semble également fonctionner pour Kibana 5.6.4

J'ai trouvé que dans Kibana 5.0 (et probablement aussi 6.0), vous pouvez définir un Index pattern ID spécifique au lieu d'en avoir un généré aléatoirement comme le script de @hobti01 stocke dans id=$(... | jq -r '.id') ; cela équivaut à définir le champ suivant dans l'interface utilisateur :

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

La définition d'un ID donné est particulièrement pratique pour les déploiements automatiques de Kibana, car vos tableaux de bord exportés, etc. feront toujours référence à un ID fixe au lieu d'un ID aléatoire.

Vous pouvez le faire en POST envoyant cet ID à /api/saved_objects/index-pattern/THE_ID .

Par example:

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"}}'

Le script de @hobti01 a été ajusté pour utiliser un identifiant fixe :

#!/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\"}"

Lorsque l'ID existe déjà, le script échouera avec curl: (22) The requested URL returned error: 409 Conflict et le code de sortie 22.

@nh2 vous pouvez supprimer le tuyau vers jq lors de l'utilisation d'un identifiant statique - merci pour la suggestion !

vous pouvez supprimer le tuyau vers jq lors de l'utilisation d'un identifiant statique

Oups, c'est vrai ! Édité.

Lorsque l'ID existe déjà, le script échouera avec curl: (22) The requested URL returned error: 409 Conflict et le code de sortie 22.

Si vous ne le souhaitez pas et souhaitez plutôt un comportement d'écrasement, utilisez "$url/api/saved_objects/index-pattern/$id?overwrite=true" pour la première invocation de curl.

Vous obtiendrez alors des réponses où les version comptent chaque fois que vous le faites, comme :

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

Je viens également d'écrire un outil d'importation CLI export.json pour Kibana : https://github.com/nh2/kibana-importer

Avec cela et la boucle de création de modèle d'index ci-dessus, je peux maintenant déployer Kibana de manière entièrement déclarative sans avoir à y charger quoi que ce soit manuellement.

Pour votre information, essayer cela contre es 6.2.2 échoue :

/ # 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

Aucune suggestion?

@matthewadams , il semble que vous fassiez la demande contre elasticsearch sans utiliser le point de terminaison '.kibana'. Essayez de faire le POST directement sur kibana.

Si vous préférez une méthode pour charger les tableaux de bord et les modèles d'index à partir du système de fichiers (à utiliser avec Chef, Puppet, Salt, etc.), veuillez vous en porter garant : https://github.com/elastic/kibana/issues/2310

@sandstrom Si par "garanti", vous voulez dire mettre un pouce levé sur le problème, je l'ai fait. :) Bon à savoir que je ne suis pas le seul.

Cette page vous a été utile?
0 / 5 - 0 notes