Kibana: إنشاء نمط الفهرس API

تم إنشاؤها على ٢٩ أبريل ٢٠١٥  ·  21تعليقات  ·  مصدر: elastic/kibana

سيكون من المفيد أن يكون لدينا واجهة برمجة تطبيقات لتهيئة صفحة "تكوين نمط الفهرس" الأولية لاستخدامها بواسطة أدوات التشغيل الآلي أو البرامج النصية.

enhancement v5.0.0

التعليق الأكثر فائدة

بالنسبة لـ kibana 6.0 باستخدام curl و 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\"}"

ال 21 كومينتر

متفق عليه ، سيكون من الجيد الحصول عليه. سيكون من الرائع أيضًا نقل تحليل الخرائط إلى جانب الخادم لتحسين معالجة التعيينات الكبيرة.

أنا ثالث هذا. لقد كنت أضغط على طلبات cURL للقيام بذلك خلال الساعتين الماضيتين ولم أحصل على شيء. سأستمر في المحاولة ... ولكن طريقة إنشاء نموذج الفهرس الأولية للتشغيل برمجيًا من لغات أخرى ستكون مفيدة للغاية.

نعم ، لقد واجهت هذا أيضًا ، الحل (الحل البديل) يشبه حلك ، أنا أكتب مباشرة إلى فهرس kibana.

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

لا أريد حقًا أن أكتب إلى هذا الفهرس ، لكنني أيضًا لم أرغب في استخدام تدفقات Kibana HTTP ... لذلك أنا مهتم بعمل هذا بطريقة أكثر دعمًا.

سيكون من الرائع أن تتم أتمتة ذلك بطريقة ما - نحن نستخدم Elasticdump لتحقيق ذلك في الوقت الحالي ، وهو حل جيد إلى حد ما ، لكنه يتطلب إنشاء الفهرس أولاً "يدويًا" وتصديره ثم إضافته إلى رمز الدمية لدينا.

إغلاق لصالح # 5199

تم إغلاق هذا لصالح 5199 ، ولكن تم إسقاط 5199 - هل هناك فرصة لاستعادة هذا؟

قيمة صفحة ويب Kibana 5 هي POST ing to

  • http: // localhost : 5601 / es_admin / .kibana / index-pattern / filebeat - * / _ إنشاء 'لإنشاء الفهرس
  • http: // localhost : 5601 / api / kibana / settings / defaultIndex لتعيين الافتراضي
    لكنه يتطلب رأس kbn-xsrf.

تمكنت من إضافة فهرس إلى ES 5 باستخدام هذا POST

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

لكن لا يمكنني معرفة مكان تخزين الفهرس الافتراضي.

POST ing إلى http: // localhost : 9200 / .kibana / config /لم يعد يعمل. ( عملت على 4.x ).

يمكنك تعيين رأس kbn-xsrf لأي شيء ، يبدو أنه لا يتم التحقق منه:

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 

حسنًا ، كان يأمل في القيام بعمل ضد هذا في 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}

يبدو أنك أطلقت أول GET على مطاط (المنفذ 9200) وليس في Kibana.

بالنسبة لـ kibana 6.0 باستخدام curl و 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\"}"

شكرا @ hobti01 ! يبدو أن هذا يعمل أيضًا مع Kibana 5.6.4

لقد اكتشفت أنه في Kibana 5.0 (وربما 6.0 أيضًا) ، يمكنك تعيين Index pattern ID محددًا بدلاً من إنشاء واحد عشوائيًا كمخازن نصية @ hobti01 في id=$(... | jq -r '.id') ؛ وهو ما يعادل إعداد الحقل التالي في واجهة المستخدم:

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

يعد تعيين معرف معين مناسبًا بشكل خاص لعمليات النشر التلقائية لـ Kibana ، حيث ستشير لوحات المعلومات التي تم تصديرها وما إلى ذلك دائمًا إلى معرف ثابت بدلاً من معرف عشوائي.

يمكنك القيام بذلك عن طريق POST ing هذا المعرف إلى /api/saved_objects/index-pattern/THE_ID .

فمثلا:

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

تم تعديل البرنامج النصي @ hobti01 لاستخدام معرّف ثابت:

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

عندما يكون المعرف موجودًا بالفعل ، سيفشل البرنامج النصي مع curl: (22) The requested URL returned error: 409 Conflict وكود الخروج 22.

@ nh2 يمكنك إزالة الأنبوب إلى jq عند استخدام معرف ثابت - شكرًا على الاقتراح!

يمكنك إزالة الأنبوب إلى jq عند استخدام معرف ثابت

عفوًا ، صحيح! تم تحريره.

عندما يكون المعرف موجودًا بالفعل ، سيفشل البرنامج النصي مع curl: (22) The requested URL returned error: 409 Conflict وكود الخروج 22.

إذا كنت لا تريد ذلك ، وتريد سلوك الكتابة بدلاً من ذلك ، فاستخدم "$url/api/saved_objects/index-pattern/$id?overwrite=true" لاستدعاء curl الأول.

ستحصل بعد ذلك على ردود حيث يتم version في كل مرة تفعل ذلك ، مثل:

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

لقد كتبت للتو أداة استيراد CLI export.json لـ Kibana: https://github.com/nh2/kibana-importer

جنبًا إلى جنب مع هذا و curl إنشاء نمط الفهرس أعلاه ، يمكنني الآن نشر Kibana بطريقة تعريفية بالكامل دون الحاجة إلى تحميل أي شيء يدويًا فيه.

لمعلوماتك ، فشلت محاولة ذلك مقابل es 6.2.2:

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

أي اقتراحات؟

matthewadams ، يبدو أنك تقدم طلبًا ضد elasticsearch دون استخدام نقطة النهاية ".kibana". حاول جعل POST مباشرة إلى kibana.

إذا كنت تفضل طريقة لتحميل لوحات المعلومات وأنماط الفهرس من نظام الملفات (للاستخدام مع Chef ، و Puppet ، و Salt ، وما إلى ذلك) ، فيرجى تأكيد ذلك: https://github.com/elastic/kibana/issues/2310

sandstrom إذا كنت تقصد بعبارة "vouched" ، فأنا أقصد ذلك. :) من الجيد معرفة أنني لست الوحيد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات