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.
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
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/
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:
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.
Hilfreichster Kommentar
Für kibana 6.0 mit curl und jq: