Kibana: API zum Erstellen von Indexmustern

Erstellt am 29. Apr. 2015  ·  21Kommentare  ·  Quelle: elastic/kibana

Es wäre hilfreich, wenn wir eine API haben könnten, um die Anfangsseite „Konfiguriere ein Indexmuster“ zu konfigurieren, die von Automatisierungstools oder Skripten verwendet werden soll.

enhancement v5.0.0

Hilfreichster Kommentar

Für kibana 6.0 mit curl und 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\"}"

Alle 21 Kommentare

Einverstanden, das wäre schön zu haben. Es wäre auch großartig, das Mapping-Parsing auf die Serverseite zu verlagern, um die Handhabung großer Mappings zu verbessern.

Ich dritte dies. Ich habe in den letzten 2 Stunden auf cURL-Anfragen gehämmert, um dies zu tun, und ich habe nichts. Ich werde es weiter versuchen ... aber eine anfängliche Indexmuster-Erstellungsmethode, die programmgesteuert von anderen Sprachen aus ausgeführt werden kann, wäre äußerst vorteilhaft.

Ja, ich war auch damit konfrontiert, meine Lösung (Workaround) ähnelt Ihrer, ich schreibe direkt in den .kibana-Index, im Wesentlichen werde ich in Ansible in einer Post-Deployment-Aufgabe so etwas tun:

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

Ich möchte nicht wirklich in diesen Index schreiben, aber ich wollte auch nicht die Kibana-HTTP-Flows verwenden ... Daher bin ich daran interessiert, dies auf eine besser unterstützte Weise zu tun.

Es wäre großartig, wenn dies auf irgendeine Weise automatisiert werden würde - wir verwenden im Moment Elasticdump , um dies zu erreichen, und es ist eine ziemlich gute Lösung, aber es erfordert, dass der Index zuerst "von Hand" erstellt, exportiert und dann hinzugefügt wird zu unserem Puppet-Code.

Schluss zugunsten von #5199

Dies wurde zugunsten von 5199 geschlossen, aber 5199 wurde fallen gelassen - gibt es eine Chance, dies zurückzubekommen?

Die Kibana 5-Webseite ist POST zu erreichen

  • http://localhost :5601/es_admin/.kibana/index-pattern/filebeat-*/_create“, um den Index zu erstellen
  • http://localhost :5601/api/kibana/settings/defaultIndex zum Festlegen des Standardwerts
    Aber es erfordert den kbn-xsrf-Header.

Ich konnte mit diesem POST Index zu ES 5 hinzufügen

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

Aber ich kann nicht herausfinden, wo der defaultIndex gespeichert ist.

POST an http://localhost :9200/.kibana/config/funktioniert nicht mehr. (Es funktionierte auf 4.x ).

Sie können den Header kbn-xsrf auf alles setzen, er scheint nicht überprüft zu werden:

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, hatte gehofft, in 5.x ein GET dagegen zu machen.

$ 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}

Sieht so aus, als hätten Sie Ihr erstes GET auf Elastic (Port 9200) und nicht auf Kibana abgefeuert.

Für kibana 6.0 mit curl und 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\"}"

Danke @hobti01 ! Das scheint auch für Kibana 5.6.4 zu funktionieren

Ich habe festgestellt, dass Sie in Kibana 5.0 (und wahrscheinlich auch 6.0) ein bestimmtes Index pattern ID anstelle eines zufällig generierten festlegen können, da die Skriptspeicher von @hobti01 in id=$(... | jq -r '.id') ; das entspricht dem Festlegen des folgenden Felds in der Benutzeroberfläche:

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

Das Festlegen einer bestimmten ID ist besonders praktisch für automatische Kibana-Bereitstellungen, da Ihre exportierten Dashboards usw. dann immer auf eine feste ID statt auf eine zufällige verweisen.

Sie können dies tun, indem Sie POST diese ID an /api/saved_objects/index-pattern/THE_ID .

Beispielsweise:

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

Das Skript von @hobti01 wurde angepasst, um eine feste ID zu verwenden:

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

Wenn die ID bereits vorhanden ist, schlägt das Skript mit curl: (22) The requested URL returned error: 409 Conflict und Exit-Code 22 fehl.

@nh2 Sie können die Pipe zu jq entfernen, wenn Sie eine statische ID verwenden - danke für den Vorschlag!

Sie können die Pipe zu jq entfernen, wenn Sie eine statische ID verwenden

Ups, richtig! Bearbeitet.

Wenn die ID bereits vorhanden ist, schlägt das Skript mit curl: (22) The requested URL returned error: 409 Conflict und Exit-Code 22 fehl.

Wenn Sie das nicht möchten und stattdessen ein Überschreibverhalten wünschen, verwenden Sie "$url/api/saved_objects/index-pattern/$id?overwrite=true" für den ersten Curl-Aufruf.

Sie erhalten dann Antworten, bei denen die version jedes Mal hochgezählt werden, wenn Sie es tun, wie zum Beispiel:

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

Ich habe auch gerade ein export.json CLI-Importer-Tool für Kibana geschrieben: https://github.com/nh2/kibana-importer

Zusammen mit diesem und dem obigen Indexmuster-Curl kann ich Kibana jetzt vollständig deklarativ bereitstellen, ohne etwas manuell hineinladen zu müssen.

FYI, der Versuch, dies gegen es 6.2.2 zu versuchen, schlägt fehl:

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

Irgendwelche Vorschläge?

@matthewadams es sieht so aus, als würden Sie die Anfrage gegen Elasticsearch stellen, ohne den Endpunkt „.kibana“ zu verwenden. Versuchen Sie, den POST direkt an kibana zu senden.

Wenn Sie eine Methode zum Laden von Dashboards und Indexmustern aus dem Dateisystem bevorzugen (zur Verwendung mit Chef, Puppet, Salt usw.), bürgen Sie bitte dafür: https://github.com/elastic/kibana/issues/2310

@sandstrom Wenn Sie mit "verbürgt" meinen, dass Sie dem Problem einen Daumen hoch geben möchten, habe ich das getan. :) Gut zu wissen, dass ich nicht der Einzige bin.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen