Grafana: Unterstützung für Wiedergabelisten mit Vorlagenvariablen

Erstellt am 8. Sept. 2014  ·  132Kommentare  ·  Quelle: grafana/grafana

Lassen Sie mich Ihnen ein einfaches Beispiel geben:
Wir haben ein Dashboard, in dem die Variable $HOST konfiguriert ist.
Wir haben ein Diagramm, das aws.$HOST.request.count verwendet
Beim Betrachten des Dashboards können wir Host1, Host2 usw. auswählen und die entsprechenden Metriken anzeigen.
Nun wäre es schön, dies in eine Playlist zu verwandeln, damit grafana jede Minute die Metriken für jeden Host anzeigt.

Die Dinge werden etwas komplizierter, wenn wir zwei oder mehr Filter haben. Es gibt eine Reihe von Kombinationen, von denen einige für den Dashboard-Beobachter möglicherweise nicht von Interesse sind.
Aus diesem Grund wäre es schön, eine Liste von Filter-/Variablenkombinationen auswählen zu können, die für den Benutzer interessant sind. Die Playlist durchläuft dann diese Kombinationen und zeigt das Dashboard mit den entsprechenden Metriken an.
Schön wäre es auch, in einer Playlist auch verschiedene Kombinationen für den Zeitbereich auswählen zu können (zB letzte 6 Stunden, letzte 24 Stunden usw.).

aredashboard prioritnice-to-have typfeature-request

Hilfreichster Kommentar

:cake: zum 5-jährigen Jubiläum dieser Ausgabe.

Können wir ein Update bekommen?

Alle 132 Kommentare

@costimuraru sehr gute Vorschläge!

:+1: wird die Playlist-Funktion viel nützlicher machen

:+1: Diese Funktion wird benötigt, weil Sie nicht den großen Bildschirm haben, um alle Ihre Grafiken dort abzulegen.

:+1: Tatsächlich wäre diese Funktion großartig für Projekte wie unseres, bei denen wir viele Dashboards haben, die auf einem einzigen Bildschirm komprimiert werden können.

Das hört sich in der Tat sehr nützlich an, ist aber auch ziemlich komplex und zeitaufwändig, um Variablen- und Zeiteinstellungen in der Start-Playlist-Ansicht anzuzeigen (und die Logik zu implementieren, um diese Einstellungen und Setup-Variablen usw. beim Laden/Zyklus des Dashboards zu handhaben). Es wird also definitiv ein Feature sein, das in Zukunft zu priorisieren ist, aber nicht etwas, das für v1.8 eingequetscht werden kann

Danke @torkelo und mach weiter so!

:+1: Wäre toll, diese Funktion zu haben

Während sich dies in der Entwicklerwarteschlange befindet – gibt es trotzdem die Möglichkeit, die Vorlagenvariable in der URL anzugeben? Ich könnte zumindest eine Browsererweiterung verwenden, um vorerst durch eine Reihe von URLs zu rotieren.

@rishid ja, mit ?var-<variable_name>=value

+1, ich interessiere mich auch sehr für diese Funktionsanfrage

+1

+1

+1 Beim Templating ist dies ein Muss.

PR kommt sehr bald...

@costimuraru Ich habe eine Playlist für eine Variable implementiert und arbeite jetzt an Kombinationen mit mehreren Variablen. Die Umsetzung sollte schnell gehen. Die Auswahl eines anderen Zeitraums kann darüber hinaus eine Upgrade-Funktion sein. Für diese Iteration mache ich nur eine Playlist mit Vorlagenvariablenkombinationen.

Das ist großartig, @utkarshcmu !

Hier ist die PR - #2841 und einige Screenshots:

Gehen Sie zu "Templating" und jetzt sollten Sie den brandneuen "Playlist"-Tab sehen können:
screen shot 2015-09-29 at 3 14 13 am

Klicken Sie auf die Registerkarte Wiedergabeliste und Sie sollten den folgenden Bildschirm mit allen aufgelisteten Variablen sehen.
screen shot 2015-09-29 at 3 14 16 am

Ich habe 2 der Variablen aus 3 ausgewählt und auf "Start" geklickt. (Der Grund, warum ich 2 ausgewählt habe, ist, dass ich alle Kombinationen dieser 2 Variablen abspielen möchte, wobei die dritte unverändert bleibt. Bitte beachten: Die festen Variablen erhalten ihre gespeicherten Standardwerte).
screen shot 2015-09-29 at 3 14 22 am

Jetzt können Sie sehen, dass ich die erste Variable konstant gehalten habe und eine Playlist mit allen möglichen Kombinationen der 2. und 3. Variablen beginnt.
screen shot 2015-09-29 at 3 14 36 am

Bitte geben Sie Feedback und Änderungen, falls erforderlich.

Super @utkarshcmu

Gute Arbeit! nicht sicher, ob die Wiedergabelistenfunktion als Registerkarte in den Vorlageneinstellungen enthalten ist. Es gibt bereits eine Playlist-Ansicht. Das Erstellen einer Playlist für ein Dashboard mit Vorlagen sollte Teil dieser Ansicht sein.

In Absprache mit

Playlist basierend auf Template-Variablen kann jetzt aus der Playlist-Ansicht ausgelöst werden. Folgende Schritte sollten befolgt werden, um die Playlist zu starten:

Klicken Sie auf Wiedergabeliste:
screen shot 2015-09-30 at 10 59 44 am

Sie sehen die folgende Playlist-Ansicht mit einer zusätzlichen Option zur Auswahl des Playlist-Typs:
screen shot 2015-09-30 at 10 59 50 am
Bei den auf Dashboards basierenden Playlists funktioniert alles gleich.

Für Playlists basierend auf Vorlagenvariablen müssen Sie nun "Variablen" aus dem Dropdown-Menü auswählen:
screen shot 2015-09-30 at 11 07 37 am

Dann suchen Sie nach einem Dashboard, für das Sie die Wiedergabeliste basierend auf ihren Vorlagenvariablen ausführen müssen, und wählen Sie es aus:
screen shot 2015-09-30 at 11 00 13 am

Sobald Sie das Dashboard auswählen, wird automatisch die Liste der Vorlagenvariablen angezeigt:
screen shot 2015-09-30 at 11 00 16 am

Im nächsten Schritt wählen Sie nun die Vorlagenvariablen aus, mit denen Sie die Playlist ausführen möchten, und klicken auf Start:
screen shot 2015-09-30 at 11 00 44 am

Und los geht's mit der Playlist basierend auf Template-Variablen:
screen shot 2015-09-30 at 11 00 51 am
screen shot 2015-09-30 at 11 00 58 am

Lassen Sie mich wissen, was Sie von dieser Änderung in der Playlist-Ansicht halten.

sieht gut aus

+1

+1, irgendwelche Neuigkeiten zu dieser Funktion @utkarshcmu ?

@evandro-portugal Ich habe die Playlist-Funktion für Grafana implementiert, aber sie wurde nicht früher zusammengeführt. Ich denke, jetzt muss ich einige Arbeiten wiederholen, da sich der Code stark geändert hat.

@utkarshcmu richtig, wo bekomme ich deine letzten Codes dafür? Ich würde gerne mal reinschauen und versuchen, etwas für mich zu tun, in meinem Fall hat es eine hohe Priorität und ich muss nur die Variablen am Ende jedes Zyklus die Position ändern lassen, dann könnte ich etwas tun, bis wir deinen Zweig bekommen zusammengeführt

@evandro-portugal
Hier der alte Code:
Bitte gehen Sie zu meiner Gabel von Grafana - https://github.com/justforkit/grafana
Und versuchen Sie, Grafana aus dem Zweig "Variable Playlist" zu erstellen

@utkarshcmu , danke, ich schaue mir den Code an, hast du vor den Code zu überarbeiten? Ansonsten könnte ich meine Arbeit teilen, wenn ich sie für den eigentlichen Master-Zweig von grafana korrigiere, den ich gerade verwende. Ich habe jetzt ein paar Ferien (Karneval hier) und plane damit zu spielen

@evandro-portugal Klar, mach weiter und überarbeite, wenn du willst. Ich habe nicht vor, hier mindestens eine Woche lang daran zu arbeiten. Genießen Sie Karneval. :)

@torkelo Kann diese Funktion mit Core Grafana zusammengeführt werden? Dies scheint eine sehr nützliche Verbesserung zu sein, um dasselbe Dashboard mit verschiedenen Vorlagenvariablen abzuspielen.

Wenn @bergquist / @torkelo der Zusammenführung dieser Funktion zustimmen, kann ich den Code meiner vorherigen PR überarbeiten, um ihn mit dem neuesten Grafana-Code kompatibel zu machen.

@digrich was meinst du mit zusammengeführt? Das ist keine PR :)

Ich habe versucht, auf den alten PR von @utkarshcmu (#2841) zu verweisen, aber wie er in seinem letzten Kommentar erwähnt hat, muss er überarbeiten und einen neuen PR einreichen.

+1

Hallo @torkelo . Während ich auf diese nützliche Funktion warte, würde ich gerne nach einer Problemumgehung suchen.

Könnte es möglich sein, so etwas wie eine Playlist basierend auf einem geskripteten Dashboard zu erstellen?

Dieses skriptgesteuerte Dashboard sollte in der Lage sein, andere Dashboards mit Vorlagen zu laden und Variablen auf irgendeine Weise zu übergeben, vielleicht von der URL?

+1

Gibt es dazu Neuigkeiten, da es schon ein halbes Jahr her ist?

Keine Neuigkeiten :(

Sieht so aus, als müsste ich mir für diese Funktionsanfrage eine Auszeit nehmen!

+1

+1

+1

+1

Da Sie Variablen per URL übergeben können, ist meine temporäre Lösung diese einfache Iframe-Karussell-/Rotator-HTML-Seite , die ich Grafana Dashboards-Karussell nenne.

Sie müssen nur die Arrays BASE_URL und dashboards_list angeben, die Dashboards enthalten, die Sie anzeigen möchten.

Dies ist eine etwas unabhängige Frage, aber gibt es eine Möglichkeit, einfach eine Schaltfläche "nächster" / "vorheriger" Host (oder eine wirklich vorlagenbasierte Variable) auf einem Dashboard zu haben?
Wenn ich manuell durch eine ganze Reihe von Hosts scrollen möchte, wird die Verwendung des Dropdown-Menüs sehr umständlich.

Irgendwelche Aktionen hier? Alle unsere Dashboards sind vorlagenbasiert - also ohne Vorlagenfunktionen / Möglichkeiten, Vars zu übergeben, ist die Playlist-Funktion für uns weitgehend unbrauchbar.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1, @utkarshcmu Arbeitest du noch daran? Ich werde es versuchen, wenn nicht, aber ich bin ziemlich neu in der Grafana-Entwicklung

@thattolleyguy - derzeit nicht mehr daran.

+1
Ein Vorschlag, da Dashboards länger sind, können wir auch automatisch scrollen. Ansonsten bleiben die meisten Panels in der Playlist (im Fernsehen) ausgeblendet.

+1

+1

+1

Gibt es Neuigkeiten zu dieser Funktion?

Das ist schon erstaunlich, dass so ein Werk im Müll landete.

Ich hatte keine Zeit, daran zu arbeiten. Ich kenne mich auch nicht so gut mit Grafana-Code aus, also wenn jemand anderes interessiert ist, können Sie ihn gerne nehmen. Wenn nicht, versuche ich es, wenn ich Zeit habe.

+1

+1

+1

@torkelo Gibt es eine Chance, dies in die kommende Version zu integrieren? Es wäre super schön, wenn die Teams alle Apps durchlaufen lassen könnten, die sie betreiben.

@davidkarlsen Es gibt keine Pull-Anfrage für diese Funktion und wir befinden uns in der Beta-

Ah - ich war etwas schnell - https://github.com/grafana/grafana/pull/2841 ist weit gekommen, wurde dann aber aufgegeben ;-(

+1

+1

+1

+1

+1

Wie wäre es mit der Verwendung der Dashboard PLUS-Abfragezeichenfolge in der Wiedergabeliste?
Dies würde "automatisch" alle Variablen UND den Zeitbereich hinzufügen.

In meinem Beispiel wäre das
?orgId=1&var-DATACENTER=dc1&var-FQDN=All&from=now-2d&to=now

was ist passiert...es dauert fast 4 Jahre und die Funktion fügt keinen Mastercode hinzu.....das ist so lächerlich

Das ist ein MUSS!

+1

Ich verstehe nicht, warum ein solches Feature immer noch nicht veröffentlicht wurde....

+1

+1

Gibt es Fortschritte bei dieser Funktion? Dies ist ein Muss. Ohne dies sind Playlists, zumindest in meinem Fall, fast nutzlos.

Ich würde diese Funktion auch gerne sehen - derzeit muss ich dafür Dashboards duplizieren

Wie oben musste ich mehrere Bildschirme duplizieren, um die Wiedergabeliste nutzbar zu machen. Diese Funktion wäre toll.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Wenn man bedenkt, wie viel Interesse diese Funktion hat, ist es schade, dass keine Fortschritte gemacht werden.
@cotimuraru @utkarshcmu , Kennen Sie den Status dieser Anfrage? Sollten wir erwägen, auf diese Funktion zu warten, oder sollten wir nach Alternativen suchen?

Ich melde mich nur, um zu sagen, dass wir diese Funktion sehr gerne auch zusammenführen würden!

Ich werde es diesen Monat noch einmal versuchen!

Eine Problemumgehung, wenn Sie mehrere Dashboards mit Parametern anzeigen müssen, besteht darin, eine HTML-Datei zu erstellen, die Dashboards in iframes anzeigt, und sie mit einem einfachen JS-Skript zu drehen. Damit drehe ich Grafana-Dashboards auf meinem Raspi.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Grafana dashboard rotator</title>

    <style>
        #title {
            position: fixed;
            right: 20px;
            top: 10px;
            color: rgba(255, 0, 0, 0.5);
            background-color: rgba(0, 0, 0, 0.7);
            padding: 10px;
            font-weight: bold;
            font-size: 6em;
            font-family: sans-serif;
            margin: 0;
        }

        body,
        html {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            position: relative;
        }

        iframe {
            width: 100%;
            height: 100%;
            border: 0;
        }

        #timer {
            position: fixed;
            bottom: 10px;
            right: 20px;
            color: rgba(255, 0, 0, 0.5);
            background-color: rgba(0, 0, 0, 0.7);
            padding: 10px;
            font-weight: bold;
            font-size: 2em;
            font-family: sans-serif;
            margin: 0;
        }
    </style>
</head>

<body>

    <h1 id="title"></h1>
    <iframe x-name="SLA PROD EU" src="https://mygrafana.example.com/services-availability?orgId=1&var-ds=Graphite-EU&var-env=prod-eu&var-package=cds-red-bull-high-touch&var-service=All&refresh=30s&from=now-1h&to=now"></iframe>
    <iframe x-name="SLA PROD US" src="https://mygrafana.example.com/services-availability?services-availability?from=now-1h&orgId=1&refresh=30s&to=now&var-ds=Graphite&var-env=prod&var-package=cds-cds&var-service=All"></iframe>
    <iframe x-name="REQUESTS EU" src="https://mygrafana.example.com/services-details?orgId=1&from=now-24h&to=now&var-ds=Graphite-EU&var-env=prod-eu&var-service=All&refresh=30s"></iframe>

    <small id="timer"></small>
    <!-- ROUND ROBIN SCRIPT -->
    <script>

        ; (function (globals) {

            //UMD
            if (typeof define !== 'undefined' && define.amd) { //require.js / AMD
                define([], function () {
                    return rr
                })
            } else if (typeof module !== 'undefined' && module.exports) { //CommonJS
                module.exports = rr
            } else { //script / browser
                globals.rr = rr
            }

            function rr(arr, lastIndex) {
                if (!Array.isArray(arr)) throw new Error("Input is not an array.")
                if (arr.length === 0) return null

                if (arr._rr == null) {
                    arr._rr = 0
                    return arr[0]
                }

                if (arr.length === 1)
                    return arr[0]

                if (typeof lastIndex == 'number')
                    arr._rr = lastIndex

                //is outside of range?
                if (arr._rr >= arr.length - 1 || arr._rr < 0) {
                    arr._rr = 0
                    return arr[0]
                } else {
                    arr._rr += 1
                    return arr[arr._rr]
                }
            }

            rr.splice = function (arr, idx, len) {
                if (!Array.isArray(arr)) throw new Error("Input is not an array.")
                if (arr.length === 0) return

                arr.splice(idx, len);

                if (arr._rr == null) {
                    arr._rr = 0
                    return;
                }

                if (arr._rr >= idx)
                    arr._rr -= 1
            }

            rr.spliceCurrent = function (arr, len) {
                rr.splice(arr, arr._rr, len)
            }

        })(this);
    </script>


    <!-- ROTATOR -->
    <script>
        const interval = 10000; //dashboard switch interval
        const initializingTime = 60000; //initializing time
        const iframes = document.getElementsByTagName('iframe')
        const arr = [...iframes];
        let last = null;

        let count = initializingTime / 1000;
        document.getElementById('title').innerText = `Initializing... (${count}s)`

        const initializingTimer = setInterval(() => {
            count = count > 0 ? count -= 1 : 0;
            document.getElementById('title').innerText = `Initializing... (${count}s)`
        }, 1000)


        let switcherTimer;
        const switcher = () => {
            if (switcherTimer) {
                clearInterval(switcherTimer);
            }

            let count = interval / 1000;
            switcherTimer = setInterval(() => {
                count = count > 0 ? count -= 1 : 0;
                document.getElementById('timer').innerText = `(${count}s)`
            }, 1000)

            const curr = rr(arr)
            curr.scrollIntoView();
            document.getElementById('title').innerText = `${curr.attributes['x-name'].value} (${arr._rr + 1}/${arr.length})`
        }

        setTimeout(() => {
            clearInterval(initializingTimer);

            document.getElementById('title').innerText = `${arr[0].attributes['x-name'].value} (1/${arr.length}) `

            switcher();
            setInterval(switcher, interval)

        }, initializingTime /*give dashboards some time to load*/)

    </script>


    <script>
        //Interval to refresh whole page once per 2 hours. To prevent memory leaks.
        setInterval(() => {
            window.location.reload()
        }, 7200000)
    </script>

</body>

</html>

Sie können eine bestimmte Dashboard-URL im src-Attribut von iframe festlegen.

    <iframe x-name="SLA PROD EU" src="https://mygrafana.example.com/services-availability?orgId=1&var-ds=Graphite-EU&var-env=prod-eu&var-package=cds-red-bull-high-touch&var-service=All&refresh=30s&from=now-1h&to=now"></iframe>

Das Rotationsintervall wird in Milis in const interval = 10000 .
Natürlich können Sie auch weitere iframes hinzufügen.

5 Jahre offen, wird dieser Code jemals veröffentlicht?

Ich hatte gehofft, dies in 6 zu sehen, um ehrlich zu sein.. :)

Noch ein +1, gibt es hierzu ein Update?

:cake: zum 5-jährigen Jubiläum dieser Ausgabe.

Können wir ein Update bekommen?

Hallo, es ist ein sehr wichtiges Feature, gibt es dazu irgendwelche Updates?

Ich bin mir ziemlich sicher, dass das nie passieren wird

Ich möchte grafana verwenden, um etwa 30 Server mit einer Dahboard-Vorlage zu überwachen.
Ohne diese muss ich jedes Mal 30 Vorlagen ändern, wenn ich ein Update für meine Vorlage möchte.

Diese Option wäre sehr nützlich

:) In der Microservice-Welt wird es so schwer sein, ein Dashboard pro Service zu haben.

Wäre wirklich eine nützliche Funktion.

+1

+1 - Wäre eine nützliche Funktion

+1

+1

+1; wie ist der Stand dazu?

+1

+1

+1

+1

+1

+1
Dies wäre in der Tat sehr nützlich.. traurig, dass diese Anfrage schon 5 Jahre alt ist

+1

+1 dafür.

Es wäre auch gut, wenn Sie einen Hook in die Diensterkennung von Prometheus haben könnten, damit eine $-Instanz automatisch in der Wiedergabeliste gefüllt und erweitert werden könnte. Auf diese Weise werden Instanzen, wenn sie ein-/ausgeschaltet werden, automatisch zur Playlist hinzugefügt bzw. daraus entfernt.

Dies wäre auch für den Kiosk-Modus sehr praktisch.

+1

Kann mir jemand sagen, ob diese Funktion hinzugefügt wurde?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

royemmerich picture royemmerich  ·  3Kommentare

KlavsKlavsen picture KlavsKlavsen  ·  3Kommentare

sslupsky picture sslupsky  ·  3Kommentare

SATHVIKRAJU picture SATHVIKRAJU  ·  3Kommentare

Minims picture Minims  ·  3Kommentare