{"id":8028,"date":"2025-05-22T09:32:23","date_gmt":"2025-05-22T07:32:23","guid":{"rendered":"https:\/\/swissmakers.ch\/?p=8028"},"modified":"2025-06-01T18:38:08","modified_gmt":"2025-06-01T16:38:08","slug":"flexibly-generate-kibana-dashboards-part-3-3","status":"publish","type":"post","link":"https:\/\/swissmakers.ch\/en\/flexibel-kibana-dashboards-generieren-teil-3-3\/","title":{"rendered":"Generate Kibana dashboards flexibly - Part 3\/3"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Dashboard mit Elastic-Beispieldaten<\/h2>\n\n\n\n<p>Elastic bietet Beispieldaten, die unter \u2039Integrations \u2192 Sample data \u2192 Other sample data sets\u203a installiert werden k\u00f6nnen. Im folgenden Beispiel werden die Beispiele aus \u00abSample eCommerce orders\u00bb verwendet. Mit diesen Daten kann das Beispiel nachvollzogen werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dashboard als Vorlage<\/h3>\n\n\n\n<p>Daten aus dem eCommerce-Beispiel sind im Dashboard in einem Tag-cloud-, einem Liniengrafik-, zwei Balkendiagramm- und zwei Gauge-Panels (Pegeldiagramme) dargestellt worden. Die Gauge-Panels zeigen via Filter die Daten einzelner Kunden aus der eCommerce-Datei. Das Tag-cloud-Panel mit 25 Tags und das Panel mit der Liniengrafik sind als \u00abLegacy \u2192 Aggregation based\u00bb Panels erstellt und dann in Kibana-Lens-Panels konvertiert worden, die anderen Panels sind direkt mit Kibana-Lens definiert\u00a0worden. Das Dashboard sieht wie folgt aus:<\/p>\n\n\n<style>.wp-block-kadence-image.kb-image8028_9d9d75-d7:not(.kb-specificity-added):not(.kb-extra-specificity-added){margin-bottom:1.5em;}.kb-image8028_9d9d75-d7 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image8028_9d9d75-d7 size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"843\" src=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-1024x843.png\" alt=\"\" class=\"kb-img wp-image-8031\" srcset=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-1024x843.png 1024w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-300x247.png 300w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-768x633.png 768w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-1536x1265.png 1536w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5-15x12.png 15w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-5.png 1610w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Dieses Beispiel-Dashboard ist dann in die Datei blog_beispiel5.ndjson exportiert worden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inputdatei mit Variablen<\/h3>\n\n\n\n<p>In der Inputdatei blog_beispiel5_vars.json werden vorerst wieder einige Variablen definiert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">{\n    \"tag_cloud\": {\n        \"title\": \"Kunden mit gr\u00f6sstem Umsatz\",\n        \"anzahl\": 30\n    },\n    \"area\": {\n        \"title\": \"Durchschnittlicher Preis der Bestellungen \u00fcber die Zeit\"\n    },\n    \"bars_stacked\": {\n        \"title\": \"Totale Kosten der Bestellungen nach Kunde \u00fcber die Zeit\"\n    },\n    \"bars\": {\n        \"title\": \"Totaler Umsatz pro Kunde\"\n    },\n    \"gauge\": {\n        \"hoehe\": 10,\n        \"breite\": 8\n    },\n    \"dashboard_title\": \"generiertes_dashboard_blog_beispiel5\"\n}<\/code><\/pre>\n\n\n\n<p>Es wird wiederum ein Titel f\u00fcr das Dashboard definiert. F\u00fcr die ersten 4 Grafiken werden nur andere Titel gesetzt und f\u00fcr die Tag-cloud die Anzahl Tags ge\u00e4ndert und die Gr\u00f6sse der Gauge-Panel wird angegeben. Das sind alles nur triviale Anpassungen, die aber zeigen, wie ein solches Dashboard mit Variablen angepasst und neu generiert werden kann. Bei Bedarf l\u00e4sst sich das dann weiter ausbauen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Einf\u00fcgen von jinja2 Elementen<\/h3>\n\n\n\n<p>Die Datei blog_beispiel5.j2 ist wiederum erst umgeformt worden, damit sie einfacher angepasst werden kann. F\u00fcr das Tag-cloud-Panel wird der Titel und die Anzahl Tags wie folgt eingef\u00fcgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">        \"panelsJSON\": \"[{\\\"type\\\":\\\"lens\\\",\n---------&gt;\\\"gridData\\\":{\\\"x\\\":0,\n---------&gt;\\\"y\\\":0,\n---------&gt;\\\"w\\\":24,\n---------&gt;\\\"h\\\":15,\n---------&gt;\\\"i\\\":\\\"7338d1e1-501e-4084-8d8a-5b7593a87e66\\\"},\n---------&gt;\\\"panelIndex\\\":\\\"7338d1e1-501e-4084-8d8a-5b7593a87e66\\\",\n---------&gt;\\\"embeddableConfig\\\":{\\\"attributes\\\":{\\\"title\\\":\\\"{{ tag_cloud.title }}\\\",\n---------&gt;\\\"visualizationType\\\":\\\"lnsTagcloud\\\",\n---------&gt;\\\"type\\\":\\\"lens\\\",\n---------&gt;\\\"references\\\":[{\\\"type\\\":\\\"index-pattern\\\",\n---------&gt;\\\"id\\\":\\\"ff959d40-b880-11e8-a6d9-e546fe2bba5f\\\",\n---------&gt;\\\"name\\\":\\\"indexpattern-datasource-layer-83a576c3-0e7c-4f46-8284-f87ab836f522\\\"}],\n---------&gt;\\\"state\\\":{\\\"visualization\\\":{\\\"layerId\\\":\\\"83a576c3-0e7c-4f46-8284-f87ab836f522\\\",\n---------&gt;\\\"tagAccessor\\\":\\\"8ff218c8-cd38-42a9-90bf-06ba8c0543a1\\\",\n---------&gt;\\\"valueAccessor\\\":\\\"d0227fac-22a7-4277-aa2e-cabe22f58736\\\",\n---------&gt;\\\"maxFontSize\\\":72,\n---------&gt;\\\"minFontSize\\\":18,\n---------&gt;\\\"orientation\\\":\\\"single\\\",\n---------&gt;\\\"showLabel\\\":true,\n---------&gt;\\\"colorMapping\\\":{\\\"assignments\\\":[],\n---------&gt;\\\"specialAssignments\\\":[{\\\"rule\\\":{\\\"type\\\":\\\"other\\\"},\n---------&gt;\\\"color\\\":{\\\"type\\\":\\\"loop\\\"},\n---------&gt;\\\"touched\\\":false}],\n---------&gt;\\\"paletteId\\\":\\\"eui_amsterdam_color_blind\\\",\n---------&gt;\\\"colorMode\\\":{\\\"type\\\":\\\"categorical\\\"}},\n---------&gt;\\\"layerType\\\":\\\"data\\\",\n---------&gt;\\\"palette\\\":{\\\"name\\\":\\\"default\\\",\n---------&gt;\\\"type\\\":\\\"palette\\\"}},\n---------&gt;\\\"query\\\":{\\\"query\\\":\\\"\\\",\n---------&gt;\\\"language\\\":\\\"kuery\\\"},\n---------&gt;\\\"filters\\\":[],\n---------&gt;\\\"datasourceStates\\\":{\\\"formBased\\\":{\\\"layers\\\":{\\\"83a576c3-0e7c-4f46-8284-f87ab836f522\\\":{\\\"ignoreGlobalFilters\\\":false,\n---------&gt;\\\"columns\\\":{\\\"8ff218c8-cd38-42a9-90bf-06ba8c0543a1\\\":{\\\"label\\\":\\\"customer_full_name.keyword: Descending\\\",\n---------&gt;\\\"dataType\\\":\\\"string\\\",\n---------&gt;\\\"operationType\\\":\\\"terms\\\",\n---------&gt;\\\"scale\\\":\\\"ordinal\\\",\n---------&gt;\\\"sourceField\\\":\\\"customer_full_name.keyword\\\",\n---------&gt;\\\"isBucketed\\\":true,\n---------&gt;\\\"params\\\":{\\\"size\\\":{{ tag_cloud.anzahl }},\n---------&gt;\\\"orderBy\\\":{\\\"type\\\":\\\"column\\\",<\/code><\/pre>\n\n\n\n<p>Die Id des Dashboards wird wiederum gel\u00f6scht, damit Kibana beim Import eine neue, eindeutige Dashboard-Id generiert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">&nbsp; &nbsp; \"created_at\": \"2024-12-11T16:21:16.255Z\",\n<s>&nbsp; &nbsp; \"id\": \"24248d69-cca9-4e52-be60-bd2fa96d24ac\",<\/s><\/code><\/pre>\n\n\n\n<p>Das mit dem Template und der obigen Inputdatei generierte Dashboard sieht dann wie folgt aus, wobei das Tag-cloud-Panel nun 30 Tags darstellt und die Titel der Panels angepasst sind (im Screenshot rot umrahmt):<\/p>\n\n\n<style>.wp-block-kadence-image.kb-image8028_12e833-64:not(.kb-specificity-added):not(.kb-extra-specificity-added){margin-bottom:1.5em;}.kb-image8028_12e833-64 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image8028_12e833-64 size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1610\" height=\"1250\" src=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6.png\" alt=\"\" class=\"kb-img wp-image-8032\" srcset=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6.png 1610w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6-300x233.png 300w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6-1024x795.png 1024w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6-768x596.png 768w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6-1536x1193.png 1536w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-6-15x12.png 15w\" sizes=\"auto, (max-width: 1610px) 100vw, 1610px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Inputdatei f\u00fcr eine flexible Anzahl Gauge-Panels<\/h3>\n\n\n\n<p>Um das Beispiel 5 etwas interessanter zu machen, wird die Inputdatei mit Variablen f\u00fcr mehrere Gauge-Panels erg\u00e4nzt. Diese sollen wie im fr\u00fcheren Beispiel die Markdown-Panels in Reihen und Spalten angeordnet werden und sie sollen Angaben f\u00fcr verschiedene Kunden aus den eCommerce-Beispieldaten anzeigen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">\n    \"tag_cloud\": {\n        \"title\": \"Kunden mit gr\u00f6sstem Umsatz\",\n        \"anzahl\": 30\n    },\n    \"area\": {\n        \"title\": \"Durchschnittlicher Preis der Bestellungen \u00fcber die Zeit\"\n    },\n    \"bars_stacked\": {\n        \"title\": \"Totale Kosten der Bestellungen nach Kunde \u00fcber die Zeit\"\n    },\n    \"bars\": {\n        \"title\": \"Totaler Umsatz pro Kunde\"\n    },\n    \"gauge\": {\n        \"hoehe\": 10,\n        \"breite\": 8,\n        \"spalten\": 6,\n        \"anzahl\": 20\n    },\n    \"namen\": [\n        \"Wagdi Shaw\",\n        \"Elyssa Summers\",\n        \"Abd Shaw\",\n        \"Elyssa Hart\",\n        \"Abd Graham\",\n        \"Wilhemina St. Strickland\",\n        \"Tariq Rivera\",\n        \"Rabbia Al Baker\",\n        \"Elyssa Martin\",\n        \"Elyssa Lewis\",\n        \"Elyssa Daniels\",\n        \/\/ etc. ...\n        \"Elyssa Hale\",\n        \"Abd Burton\",\n        \"Sultan Al Marshall\",\n        \"Betty Morrison\",\n        \"Mary Hampton\",\n        \"Elyssa Rowe\",\n        \"Elyssa Austin\"\n    ],\n    \"dashboard_title\": \"generiertes_dashboard_blog_beispiel5\"\n}<\/code><\/pre>\n\n\n\n<p>Das Array mit den Namen von Kunden aus eCommerce kann f\u00fcr die Filter und Beschriftungen der Gauge-Panels verwendet werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data-View-Ids<\/h3>\n\n\n\n<p><strong>DataView-Ids<\/strong> werden in Kibana f\u00fcr Referenzen auf die Daten verwendet. In den ndjson-Dateien wird noch der fr\u00fchere Name <strong>Indexpattern<\/strong> verwendet. Die DataView-Ids sind in der ndjson-Vorlage meist schon vorhanden und sie k\u00f6nnen einfach weiter verwendet werden. Ansonsten findet man die DataView-Ids unter \u00abStack Management\u2192DataViews\u00bb. Dort w\u00e4hlt man die DataView aus, klickt auf \u00abEdit\u00bb und \u00abShow advanced settings\u00bb und bekommt dann die DataView-Id angezeigt. Die Id ist zudem Teil der Url:<\/p>\n\n\n<style>.wp-block-kadence-image.kb-image8028_31ee37-4f:not(.kb-specificity-added):not(.kb-extra-specificity-added){margin-bottom:1.5em;}.kb-image8028_31ee37-4f .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image8028_31ee37-4f size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" src=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-1024x543.png\" alt=\"\" class=\"kb-img wp-image-8033\" srcset=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-1024x543.png 1024w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-300x159.png 300w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-768x407.png 768w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-1536x814.png 1536w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7-18x10.png 18w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-7.png 1596w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Referenzen und Panel-Ids<\/h3>\n\n\n\n<p>Anders als bei den Beispielen mit den Markdown-Panels werden in Beispiel 5 in Elastic gespeicherte Daten verwendet, auf die aus dem Dashboard zugegriffen wird. Dazu werden im Dashboard gegen Ende der ndjson-Datei Referenzen und Ids definiert und z.B. in den Gauge-Panels wird im Array \u00abreferences\u00bb darauf referenziert.<\/p>\n\n\n\n<p>Etwas Dokumentation dazu findet man unter den folgenden Links:<\/p>\n\n\n<div class=\"gb-container gb-container-98ffa615 gb-accordion\">\n<div class=\"gb-container gb-container-24506069 gb-accordion__item gb-accordion__item-open\" data-transition=\"slide\">\n\n<button class=\"gb-button gb-button-1f70243d gb-accordion__toggle gb-block-is-current\" id=\"gb-accordion-toggle-1f70243d\"><span class=\"gb-button-text\"><a href=\"https:\/\/github.com\/elastic\/kibana\/blob\/main\/x-pack\/plugins\/lens\/readme.md#references\" target=\"_blank\" rel=\"noopener\"><strong>Github<\/strong><\/a><\/span><span class=\"gb-icon\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 448 512\" width=\"1em\" height=\"1em\" aria-hidden=\"true\" role=\"img\" class=\"gb-accordion__icon\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\" fill=\"currentColor\"><\/path><\/svg><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 448 512\" width=\"1em\" height=\"1em\" aria-hidden=\"true\" role=\"img\" class=\"gb-accordion__icon-open\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\" fill=\"currentColor\"><\/path><\/svg><\/span><\/button>\n\n\n<div id=\"gb-accordion-content-8d6969b4\" class=\"gb-accordion__content\"><div class=\"gb-container gb-container-8d6969b4\">\n\n<p><strong>References<\/strong><\/p>\n\n\n\n<p><a><\/a>References (references) are regular saved object references forming a graph of saved objects which depend on each other. For the Lens case, these references can be annotation groups or data views (called type: &#171;index-pattern&#187; in code), referencing permanent data views which are used in the current Lens visualization. Often there is just a single data view in use, but it&#8217;s possible to use multiple data views for multiple layers in a Lens xy chart. The <strong>id<\/strong> of a reference needs to be the saved object id of the referenced data view (see the &#171;Handling data views&#187; section below). The <strong>name<\/strong> of the reference is comprised out of multiple parts used to map the data view to the correct layer : indexpattern-datasource-layer-&lt;id of the layer&gt;. Even if multiple layers are using the same data view, there has to be one reference per layer (all pointing to the same data view id). References array can be empty in case of adhoc dataviews (see section below).<\/p>\n\n<\/div><\/div>\n<\/div>\n\n<div class=\"gb-container gb-container-56166aad gb-accordion__item\" data-transition=\"slide\">\n\n<button class=\"gb-button gb-button-09d1275d gb-accordion__toggle\" id=\"gb-accordion-toggle-09d1275d\"><span class=\"gb-button-text\"><a href=\"https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/v8\/operation\/operation-createsavedobject#operation-createsavedobject-body-application-json-elastic-api-version-2023-10-31-references\" target=\"_blank\" rel=\"noopener\"><strong>Elastic Doku<\/strong><\/a><\/span><span class=\"gb-icon\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 448 512\" width=\"1em\" height=\"1em\" aria-hidden=\"true\" role=\"img\" class=\"gb-accordion__icon\"><path d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\" fill=\"currentColor\"><\/path><\/svg><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 448 512\" width=\"1em\" height=\"1em\" aria-hidden=\"true\" role=\"img\" class=\"gb-accordion__icon-open\"><path d=\"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\" fill=\"currentColor\"><\/path><\/svg><\/span><\/button>\n\n\n<div id=\"gb-accordion-content-14ef3376\" class=\"gb-accordion__content\"><div class=\"gb-container gb-container-14ef3376\">\n\n<p><a href=\"https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/v8\/operation\/operation-createsavedobject#operation-createsavedobject-body-application-json-elastic-api-version-2023-10-31-references\" target=\"_blank\" rel=\"noopener\"><strong>references <\/strong><\/a><strong>array<\/strong><\/p>\n\n\n\n<p>Objects with name, id, and type properties that describe the other saved objects that this object references. Use <strong>name<\/strong> in attributes to refer to the other saved object, but never the <strong>id<\/strong>, which can update automatically during migrations or import and export.<\/p>\n\n<\/div><\/div>\n<\/div>\n<\/div>\n\n\n<p>In der exportierten Dashboardvorlage sieht die Definition der Referenzen beispielsweise wie folgt aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">    \"references\": [\n        {\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"7338d1e1-501e-4084-8d8a-5b7593a87e66:indexpattern-datasource-layer-83a576c3-0e7c-4f46-8284-f87ab836f522\",\n            \"type\": \"index-pattern\"\n        },\n\/\/\u2026 \u2026\n        {\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"1400e794-2571-4b4a-b78b-2d5aab20263b:indexpattern-datasource-layer-38148eb9-48c3-40ac-8090-011abf2cdefe\",\n            \"type\": \"index-pattern\"\n        },\n        {\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"1400e794-2571-4b4a-b78b-2d5aab20263b:08984911-134f-4ff2-8c1d-bf86d034351c\",\n            \"type\": \"index-pattern\"\n        }\n    ],<\/code><\/pre>\n\n\n\n<p>Die Eintr\u00e4ge mit<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">\"name\": \"<strong>1400e794-2571-4b4a-b78b-2d5aab20263b<\/strong><\/code><\/pre>\n\n\n\n<p>sind jene, die im einen Gauge-Panel referenziert werden. Dort kommt der \u00ab<strong>name<\/strong>\u00bb als \u00ab<strong>panelIndex<\/strong>\u00bb und als Komponente \u00ab<strong>i<\/strong>\u00bb in \u00abgridData\u00bb vor. So kann man diese Eintr\u00e4ge im Referenz-Array finden. Die \u00fcbrigen Eintr\u00e4ge dort geh\u00f6ren zu den anderen Panels. \u00abid\u00bb ist \u00fcberall die DataView-Id f\u00fcr die eCommerce-Beispieldaten, auf die von allen Panels aus referenziert wird.<\/p>\n\n\n\n<p>Wenn im Dashboard mehrere Gauge-Panels definiert werden sollen, so m\u00fcssen diese alle einen eindeutigen Panel-Index haben. F\u00fcr das Format der Panel-Indices gelten offenbar keine grossen Vorgaben, so dass man ziemlich frei ist bei der Wahl eindeutiger Werte. Die Panel-Indices m\u00fcssen bei den Gauge-Paneldefinitionen und \u00fcbereinstimmend im Array mit den Referenzen definiert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Einf\u00fcgen von jinja2 Elementen<\/h3>\n\n\n\n<p>Die Definitionen der Gauge-Panels werden in einer Schleife generiert wie in beispiel4.j2 jene f\u00fcr die Markdown-Panels. Als Panelindex wird einfach \u00abgauge_panel_nr<em>i<\/em>\u00bb definiert, wobei \u00abi\u00bb eine Laufnummer ist. So k\u00f6nnen die Indices einfach f\u00fcr die Panels und die Referenzen in zwei unabh\u00e4ngigen Schleifen generiert werden.<\/p>\n\n\n\n<p>Die wichtigsten jinja2-Elemente bei der Definition der Gauge-Panels in blog_beisiel5.j2 sind dann:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">---------&gt;{% set global = namespace(row = 0) %}{% for i in range(0, gauge.anzahl) %}{\\\"type\\\":\\\"lens\\\",\n---------&gt;\\\"gridData\\\":{\\\"x\\\":{{ (i) % gauge.spalten * gauge.breite }},\n---------&gt;\\\"y\\\":{{ 30 + gauge.hoehe * global.row }}{% if (i + 1) % gauge.spalten == 0 %}{% set global.row = global.row + 1 %}{% endif %},\n---------&gt;\\\"w\\\":{{ gauge.breite }},\n---------&gt;\\\"h\\\":{{ gauge.hoehe }},\n---------&gt;\\\"i\\\":\\\"gauge_panel_nr{{ i }}\\\"},\n---------&gt;\\\"panelIndex\\\":\\\"gauge_panel_nr{{ i }}\\\",\n---------&gt;\\\"embeddableConfig\\\":{\\\"attributes\\\":{\\\"title\\\":\\\"Gauge visualization\\\",\n---------&gt;\\\"visualizationType\\\":\\\"lnsGauge\\\",\n---------&gt;\\\"type\\\":\\\"lens\\\",\n---------&gt;\\\"references\\\":[{\\\"type\\\":\\\"index-pattern\\\",\n---------&gt;\\\"id\\\":\\\"ff959d40-b880-11e8-a6d9-e546fe2bba5f\\\",\n---------&gt;\\\"name\\\":\\\"indexpattern-datasource-layer-38148eb9-48c3-40ac-8090-011abf2cdefe\\\"}],\n---------&gt;\\\"state\\\":{\\\"visualization\\\":{\\\"shape\\\":\\\"arc\\\",\n---------&gt;\\\"layerId\\\":\\\"38148eb9-48c3-40ac-8090-011abf2cdefe\\\",\n---------&gt;\\\"layerType\\\":\\\"data\\\",\n---------&gt;\\\"ticksPosition\\\":\\\"auto\\\",\n---------&gt;\\\"labelMajorMode\\\":\\\"auto\\\",\n---------&gt;\\\"metricAccessor\\\":\\\"e4f872bd-8510-456b-ac48-8da24c92b19d\\\",\n---------&gt;\\\"colorMode\\\":\\\"palette\\\",\n---------&gt;\\\"percentageMode\\\":false,\n---------&gt;\\\"palette\\\":{\\\"name\\\":\\\"custom\\\",\n---------&gt;\\\"params\\\":{\\\"maxSteps\\\":5,\n---------&gt;\\\"name\\\":\\\"custom\\\",\n---------&gt;\\\"progression\\\":\\\"fixed\\\",\n---------&gt;\\\"rangeMax\\\":100,\n---------&gt;\\\"rangeMin\\\":0,\n---------&gt;\\\"rangeType\\\":\\\"number\\\",\n---------&gt;\\\"reverse\\\":false,\n---------&gt;\\\"continuity\\\":\\\"none\\\",\n---------&gt;\\\"colorStops\\\":[{\\\"color\\\":\\\"#A50026\\\",\n---------&gt;\\\"stop\\\":0},\n---------&gt;{\\\"color\\\":\\\"#FEFEBD\\\",\n---------&gt;\\\"stop\\\":50},\n---------&gt;{\\\"color\\\":\\\"#006837\\\",\n---------&gt;\\\"stop\\\":75}],\n---------&gt;\\\"stops\\\":[{\\\"color\\\":\\\"#A50026\\\",\n---------&gt;\\\"stop\\\":50},\n---------&gt;{\\\"color\\\":\\\"#FEFEBD\\\",\n---------&gt;\\\"stop\\\":75},\n---------&gt;{\\\"color\\\":\\\"#006837\\\",\n---------&gt;\\\"stop\\\":100}],\n---------&gt;\\\"steps\\\":5},\n---------&gt;\\\"type\\\":\\\"palette\\\"},\n---------&gt;\\\"minAccessor\\\":\\\"4399d773-95c6-4ecb-bc1b-a26a9d9f0d09\\\",\n---------&gt;\\\"maxAccessor\\\":\\\"9a3f8db0-a822-4627-9906-8fab5bf235df\\\",\n---------&gt;\\\"labelMinor\\\":\\\"{{ namen[i] }}\\\"},\n---------&gt;\\\"query\\\":{\\\"query\\\":\\\"customer_full_name.keyword : \\\\\\\"{{ namen[i] }}\\\\\\\"  \\\",\n---------&gt;\\\"language\\\":\\\"kuery\\\"},\n---------&gt;\\\"filters\\\":[{\\\"meta\\\":{\\\"alias\\\":null,\n---------&gt;\\\"disabled\\\":false,\n---------&gt;\\\"index\\\":\\\"5c0dea8b-d51a-4f34-8240-520a78d12164\\\",\n---------&gt;\\\"key\\\":\\\"products.taxless_price\\\",\n---------&gt;\\\"negate\\\":false,\n---------&gt;\\\"type\\\":\\\"exists\\\",\n---------&gt;\\\"value\\\":\\\"exists\\\"},\n---------&gt;\\\"query\\\":{\\\"exists\\\":{\\\"field\\\":\\\"products.taxless_price\\\"}},\n\/\/\u2026 ...\n---------&gt;\\\"enhancements\\\":{},\n---------&gt;\\\"hidePanelTitles\\\":true},\n---------&gt;\\\"title\\\":\\\"Gauge visualization\\\"}{% if loop.index != loop.length %},{% endif %}{% endfor %}]\",<\/code><\/pre>\n\n\n\n<p>Am Anfang und Ende stehen die Angaben f\u00fcr die Schleife, wobei am Ende wieder gepr\u00fcft werden muss, ob ein Komma n\u00f6tig ist oder ob das letzte Element des Arrays erreicht ist. Das uns die Berechnung der Position der Panels ist analog Beispiel 4 gemacht.<\/p>\n\n\n\n<p>Weiter wird noch der Name aus dem Array mit den Kundennamen als Label definiert und in der Filterabfrage angegeben.<\/p>\n\n\n\n<p>Wichtig sind die zwei Definitionen f\u00fcr die Panelindices.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">---------&gt;\\\"i\\\":\\\"gauge_panel_nr{{ i }}\\\"},\n---------&gt;\\\"panelIndex\\\":\\\"gauge_panel_nr{{ i }}\\\",<\/code><\/pre>\n\n\n\n<p>Zudem m\u00fcssen weiter unten die Referenzen f\u00fcr alle Gauge-Panels in einer Schleife generiert werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">        {\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"51c3912f-6d82-4be5-82e4-31a6549d9df4:indexpattern-datasource-layer-446d03ef-469d-419a-90ab-40632cd777f5\",\n            \"type\": \"index-pattern\"\n        },\n        {% for i in range(0, gauge.anzahl) %}{\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"gauge_panel_nr{{ i }}:indexpattern-datasource-layer-38148eb9-48c3-40ac-8090-011abf2cdefe\",\n            \"type\": \"index-pattern\"\n        },{% endfor %}\n        {\n            \"id\": \"ff959d40-b880-11e8-a6d9-e546fe2bba5f\",\n            \"name\": \"gauge_panel_nr0:08984911-134f-4ff2-8c1d-bf86d034351c\",\n            \"type\": \"index-pattern\"\n        }<\/code><\/pre>\n\n\n\n<p>Der Befehl<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">jinjanate blog_beispiel5.j2 blog_beispiel5_vars.json -o generiertes_dashboard_blog_beispiel5.ndjson<\/code><\/pre>\n\n\n\n<p>generiert nun folgendes Dashboard, in dem die Gauge-Panels wiederholt werden und regelm\u00e4ssig in 6 Spalten angeordnet sind:<\/p>\n\n\n<style>.wp-block-kadence-image.kb-image8028_789b28-3e:not(.kb-specificity-added):not(.kb-extra-specificity-added){margin-bottom:1.5em;}.kb-image8028_789b28-3e .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image8028_789b28-3e size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"1024\" src=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8-891x1024.png\" alt=\"\" class=\"kb-img wp-image-8034\" srcset=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8-891x1024.png 891w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8-261x300.png 261w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8-768x882.png 768w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8-10x12.png 10w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-8.png 966w\" sizes=\"auto, (max-width: 891px) 100vw, 891px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Variante mit Gauge-Panels zu verschiedenen Metriken<\/h3>\n\n\n\n<p>Als weitere Variante von Beispiel 5 habe ich Gauge-Panels zu zwei Metriken generiert und die Grenzen f\u00fcr die Farben sowie die Maximalwerte in den Gauge-Panels \u00fcber Variablen in der Inputdatei definiert. Wenn nur eine Metrik angegeben wird, kann damit auch das vorherige Dashboard generiert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Inputdatei mit zwei Metriken f\u00fcr die Gauge-Panels<\/h3>\n\n\n\n<p>Der folgende Teil der Inputdatei ist angepasst worden, wobei f\u00fcr die Angaben jeweils Arrays verwendet worden sind.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">    \"gauge\": {\n        \"hoehe\": 10,\n        \"breite\": 8,\n        \"spalten\": 6,\n        \"anzahl\": 18,\n        \"query_fields\": [\n            \"products.taxless_price\",\n            \"products.quantity\"\n        ],\n        \"range_max\" : [500, 12],\n        \"color_start\" : [[0, 100, 300],\n                                        [0,3,6]],\n        \"color_stop\" : [[100, 300, 500],\n                                       [3,6,12]]\n    },\n    \"namen\": [\n        \"Wagdi Shaw\",\n        \"Elyssa Summers\",<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Einf\u00fcgen von jinja2 Elementen<\/h3>\n\n\n\n<p>Hier sind nun zwei verschachtelte Schleifen n\u00f6tig, eine \u00fcber die Metriken und innerhalb dieser Schleife jeweils eine \u00fcber die Anzahl gew\u00fcnschter Gauge-Panels.<\/p>\n\n\n\n<p>Als Hilfestellung hier noch die wichtigen Teile der json-Datei vor der Umformatierung in blog_beispiel5.j2:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\" class=\"language-json\">---------&gt;{% set global = namespace(row = 0) %}{% for field in gauge.query_fields %}{% set outer_loop = loop %}{% for i in range(0, gauge.anzahl) %}{\\\"type\\\":\\\"lens\\\",\n---------&gt;\\\"gridData\\\":{\\\"x\\\":{{ (i + ( outer_loop.index0 * gauge.anzahl ) ) % gauge.spalten * gauge.breite }},\n---------&gt;\\\"y\\\":{{ 30 + gauge.hoehe * global.row }}{% if (i + 1 + ( outer_loop.index0 * gauge.anzahl ) ) % gauge.spalten == 0 %}{% set global.row = global.row + 1 %}{% endif %},\n---------&gt;\\\"w\\\":{{ gauge.breite }},\n---------&gt;\\\"h\\\":{{ gauge.hoehe }},\n---------&gt;\\\"i\\\":\\\"gauge_panel_nr{{ i + ( outer_loop.index0 * gauge.anzahl ) }}\\\"},\n---------&gt;\\\"panelIndex\\\":\\\"gauge_panel_nr{{ i + ( outer_loop.index0 * gauge.anzahl ) }}\\\",\n---------&gt;\\\"embeddableConfig\\\":{\\\"attributes\\\":{\\\"title\\\":\\\"Gauge visualization\\\",\n\/\/\u2026 \u2026\n---------&gt;\\\"rangeMax\\\":{{ gauge.range_max[outer_loop.index0] }},\n---------&gt;\\\"rangeMin\\\":0,\n---------&gt;\\\"rangeType\\\":\\\"number\\\",\n---------&gt;\\\"reverse\\\":false,\n---------&gt;\\\"continuity\\\":\\\"none\\\",\n---------&gt;\\\"colorStops\\\":[{\\\"color\\\":\\\"#A50026\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_start[outer_loop.index0][0] }}},\n---------&gt;{\\\"color\\\":\\\"#FEFEBD\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_start[outer_loop.index0][1] }}},\n---------&gt;{\\\"color\\\":\\\"#006837\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_start[outer_loop.index0][2] }}}],\n---------&gt;\\\"stops\\\":[{\\\"color\\\":\\\"#A50026\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_stop[outer_loop.index0][0] }}},\n---------&gt;{\\\"color\\\":\\\"#FEFEBD\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_stop[outer_loop.index0][1] }}},\n---------&gt;{\\\"color\\\":\\\"#006837\\\",\n---------&gt;\\\"stop\\\":{{ gauge.color_stop[outer_loop.index0][2] }}}],\n---------&gt;\\\"steps\\\":5},\n\/\/\u2026 \u2026\n---------&gt;\\\"9a3f8db0-a822-4627-9906-8fab5bf235df\\\":{\\\"label\\\":\\\"Static value: {{ gauge.range_max[outer_loop.index0] }}\\\",\n---------&gt;\\\"dataType\\\":\\\"number\\\",\n---------&gt;\\\"operationType\\\":\\\"static_value\\\",\n---------&gt;\\\"isStaticValue\\\":true,\n---------&gt;\\\"isBucketed\\\":false,\n---------&gt;\\\"scale\\\":\\\"ratio\\\",\n---------&gt;\\\"params\\\":{\\\"value\\\":\\\"{{ gauge.range_max[outer_loop.index0] }}\\\"},\n\/\/\u2026 \u2026\n---------&gt;\\\"title\\\":\\\"Gauge visualization\\\"}{% if outer_loop.index != outer_loop.length or loop.index != loop.length %},{% endif %}{% endfor %}{% endfor %}]\",<\/code><\/pre>\n\n\n\n<p>Das generierte Dashboard mit den Gauge-Panels zu den zwei verschiedenen Metriken sieht dann wie folgt aus:<\/p>\n\n\n<style>.wp-block-kadence-image.kb-image8028_3fb11a-bd:not(.kb-specificity-added):not(.kb-extra-specificity-added){margin-bottom:1.5em;}.kb-image8028_3fb11a-bd .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<figure class=\"wp-block-kadence-image kb-image8028_3fb11a-bd size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"1464\" src=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9.png\" alt=\"\" class=\"kb-img wp-image-8035\" srcset=\"https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9.png 896w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9-184x300.png 184w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9-627x1024.png 627w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9-768x1255.png 768w, https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/05\/Blog-Kibana-9-7x12.png 7w\" sizes=\"auto, (max-width: 896px) 100vw, 896px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Weitere Ideen<\/h2>\n\n\n\n<p>Es geht in dieser Blogreihe darum, das Prinzip zur Generierung von Dashboards mit jinja2-Templates vorzustellen. Analog k\u00f6nnen viele weitere Ideen zur Automatisierung umgesetzt werden und zwar auch in anderen Bereichen.<\/p>\n\n\n\n<p>Mit Shell-Skripts oder Skripts in anderen Skriptsprachen kann die Automatisierung erweitert werden. Beispielsweise k\u00f6nnen in einem Skript mehrere Dashboards generiert oder in einer Schleife k\u00f6nnen Dashboards f\u00fcr verschiedene Umgebungen oder Kunden generiert werden.<\/p>\n\n\n\n<p>Es k\u00f6nnen auch mehrere Dashboards in eine einzelne ndjson-Datei geschrieben werden.<\/p>\n\n\n\n<p>Der Import von Dashboards in Kibana per REST-Schnittstelle kann ebenfalls nach der Generierung von Dashboards in dasselbe Skript eingef\u00fcgt werden. Die Dokumentation dazu findet man hier:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/operation\/operation-importsavedobjectsdefault\" target=\"_blank\" rel=\"noopener\">https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/operation\/operation-importsavedobjectsdefault<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/operation\/operation-resolveimporterrors\" target=\"_blank\" rel=\"noopener\">https:\/\/www.elastic.co\/docs\/api\/doc\/kibana\/operation\/operation-resolveimporterrors<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Mit den vorgestellten Ideen und Werkzeugen lassen sich Kibana-Dashboards flexibel generieren. Leider fehlt eine Referenzdokumentation f\u00fcr das Format der beim Export und Import von Dashboards und weiteren gespeicherten Objekten verwendeten ndjson-Dateien. So braucht es manchmal etwas Fantasie und Tests f\u00fcr die konkrete Umsetzung. Das Vorgehen lohnt sich aber schnell, wenn mehrere \u00e4hnliche Dashboards gebraucht werden.<\/p>\n\n\n\n<p>Dasselbe Vorgehen zur Automatisierung kann nicht nur im Elastic Stack sondern mit vielen anderen Softwarepaketen verwendet werden.<\/p>\n\n\n\n<p>Melden Sie sich ohne zu z\u00f6gern f\u00fcr ein <a href=\"https:\/\/swissmakers.ch\/kontakt\/\">kostenloses Beratungsgespr\u00e4ch<\/a> bei Swissmakers, um zu erfahren, wie wir Sie in den Bereichen Automatisierung und Elastic unterst\u00fctzen k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dashboard with Elastic sample data Elastic offers sample data that can be viewed under 'Integrations \u2192 Sample data \u2192 Other sample ... <\/p>\n<p class=\"read-more-container\"><a title=\"Generate Kibana dashboards flexibly - Part 3\/3\" class=\"read-more button\" href=\"https:\/\/swissmakers.ch\/en\/flexibel-kibana-dashboards-generieren-teil-3-3\/#more-8028\" aria-label=\"Read more about Generate Kibana dashboards flexibly - Part 3\/3\">Read more<\/a><\/p>","protected":false},"author":9,"featured_media":7868,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","footnotes":""},"categories":[55,69,70,71,16],"tags":[],"class_list":["post-8028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-automatisierung","category-elastic","category-kibana","category-monitoring","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50"],"taxonomy_info":{"category":[{"value":55,"label":"Linux"},{"value":69,"label":"Automatisierung"},{"value":70,"label":"Elastic"},{"value":71,"label":"Kibana"},{"value":16,"label":"Monitoring"}]},"featured_image_src_large":["https:\/\/swissmakers.ch\/wp-content\/uploads\/2025\/02\/Bild-Kibana-Dashboards-1200x600-1-1024x512.png",1024,512,true],"author_info":{"display_name":"Matthias Dillier","author_link":"https:\/\/swissmakers.ch\/en\/author\/matthias\/"},"comment_info":0,"category_info":[{"term_id":55,"name":"Linux","slug":"linux","term_group":0,"term_taxonomy_id":55,"taxonomy":"category","description":"","parent":0,"count":10,"filter":"raw","cat_ID":55,"category_count":10,"category_description":"","cat_name":"Linux","category_nicename":"linux","category_parent":0},{"term_id":69,"name":"Automatisierung","slug":"automatisierung","term_group":0,"term_taxonomy_id":69,"taxonomy":"category","description":"","parent":0,"count":3,"filter":"raw","cat_ID":69,"category_count":3,"category_description":"","cat_name":"Automatisierung","category_nicename":"automatisierung","category_parent":0},{"term_id":70,"name":"Elastic","slug":"elastic","term_group":0,"term_taxonomy_id":70,"taxonomy":"category","description":"","parent":16,"count":3,"filter":"raw","cat_ID":70,"category_count":3,"category_description":"","cat_name":"Elastic","category_nicename":"elastic","category_parent":16},{"term_id":71,"name":"Kibana","slug":"kibana","term_group":0,"term_taxonomy_id":71,"taxonomy":"category","description":"","parent":16,"count":3,"filter":"raw","cat_ID":71,"category_count":3,"category_description":"","cat_name":"Kibana","category_nicename":"kibana","category_parent":16},{"term_id":16,"name":"Monitoring","slug":"monitoring","term_group":0,"term_taxonomy_id":16,"taxonomy":"category","description":"","parent":0,"count":8,"filter":"raw","cat_ID":16,"category_count":8,"category_description":"","cat_name":"Monitoring","category_nicename":"monitoring","category_parent":0}],"tag_info":false,"_links":{"self":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/8028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/comments?post=8028"}],"version-history":[{"count":17,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/8028\/revisions"}],"predecessor-version":[{"id":8054,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/8028\/revisions\/8054"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/media\/7868"}],"wp:attachment":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/media?parent=8028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/categories?post=8028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/tags?post=8028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}