Grafana: Soporte para lista de reproducción con variables de plantilla

Creado en 8 sept. 2014  ·  132Comentarios  ·  Fuente: grafana/grafana

Dejame darte un ejemplo simple:
Tenemos un tablero que tiene configurada la variable $ HOST.
Tenemos un gráfico que usa aws. $ HOST.request.count
Al mirar el tablero, podemos seleccionar Host1, Host2, etc., mostrando las métricas apropiadas.
Ahora, sería bueno convertir esto en una lista de reproducción para que cada minuto, grafana muestre las métricas de cada host.

Las cosas se complican un poco más cuando tenemos dos o más filtros. Hay un montón de combinaciones, algunas de las cuales pueden no ser de interés para el observador del tablero.
Por esta razón, sería bueno tener una forma de seleccionar una lista de combinaciones de filtro / variable que sean interesantes para el usuario. Luego, la lista de reproducción pasaría por estas combinaciones y mostraría el tablero con las métricas apropiadas.
También sería bueno poder seleccionar diferentes combinaciones para el rango de tiempo también en una lista de reproducción (por ejemplo, últimas 6 horas, últimas 24 horas, etc.).

aredashboard prioritnice-to-have typfeature-request

Comentario más útil

: pastel: por el quinto aniversario de esta edición.

¿Podemos obtener una actualización?

Todos 132 comentarios

@costimuraru muy buenas sugerencias!

: +1: hará que la función de lista de reproducción sea mucho más útil

: +1: Esta función es necesaria porque no tienes esa pantalla enorme para poner todos tus gráficos allí.

: +1: De hecho, esta función sería excelente para proyectos como el nuestro, donde tenemos muchos paneles que pueden compactarse en una sola pantalla.

De hecho, esto suena muy útil, pero también bastante complejo y requiere mucho tiempo para exponer la configuración de variables y tiempo en la vista de lista de reproducción de inicio (e implementar la lógica para manejar esas configuraciones y variables de configuración, etc.en la carga / ciclo del tablero). Por lo tanto, definitivamente será una característica que también se priorizará en el futuro, pero no algo que se pueda incluir en la v1.8

¡Gracias @torkelo y sigan con el buen trabajo!

: +1: sería genial tener esta función

Mientras esto está en la cola de desarrollo, ¿hay alguna forma de especificar la variable de plantilla en la URL? Al menos podría usar una extensión de navegador para rotar a través de un montón de URL por ahora.

@rishid sí, usando ?var-<variable_name>=value

+1, también estoy muy interesado en esta solicitud de función

+1

+1

+1 Con plantillas, esto es imprescindible.

PR muy pronto ...

@costimuraru He implementado la lista de reproducción para una variable, ahora trabajando en combinaciones de múltiples variables. La implementación debería ser rápida. La selección de un intervalo de tiempo diferente puede ser una característica de actualización además de esto. Para esta iteración, solo estoy haciendo una lista de reproducción de combinaciones de variables de plantilla.

¡Eso es increíble, @utkarshcmu !

Aquí está el PR - # 2841 y algunas capturas de pantalla:

Vaya a "Plantillas" y ahora debería poder ver la nueva pestaña "Lista de reproducción":
screen shot 2015-09-29 at 3 14 13 am

Haga clic en la pestaña Lista de reproducción y debería ver la siguiente pantalla con todas las variables enumeradas.
screen shot 2015-09-29 at 3 14 16 am

Seleccioné 2 de las variables de 3 y hice clic en "Iniciar". (La razón por la que seleccioné 2 es porque quiero reproducir todas las combinaciones de estas 2 variables manteniendo fija la 3ª. Nota: Las variables fijas obtendrán sus valores guardados predeterminados).
screen shot 2015-09-29 at 3 14 22 am

Ahora puede ver que mantuve la primera variable constante y una lista de reproducción comenzará con todas las combinaciones posibles de la segunda y tercera variables.
screen shot 2015-09-29 at 3 14 36 am

Proporcione comentarios y cambios si es necesario.

Impresionante @utkarshcmu

¡Buen trabajo! No estoy seguro de tener la función de lista de reproducción como una pestaña en la configuración de plantillas. Ya existe una vista de lista de reproducción, la creación de una lista de reproducción para un panel con plantilla debería ser parte de esa vista.

De acuerdo con @torkelo , haré que esto sea parte de la vista de la lista de reproducción. Eso tiene más sentido. :)

La lista de reproducción basada en variables de plantilla se puede activar desde la vista de lista de reproducción ahora. Se deben seguir los siguientes pasos para iniciar la lista de reproducción:

Haga clic en Lista de reproducción:
screen shot 2015-09-30 at 10 59 44 am

Verá la siguiente vista de lista de reproducción con una opción adicional para elegir el tipo de lista de reproducción:
screen shot 2015-09-30 at 10 59 50 am
Todo funciona igual para las listas de reproducción basadas en paneles.

Ahora, para la lista de reproducción basada en variables de plantilla, debe seleccionar "variables" en el menú desplegable:
screen shot 2015-09-30 at 11 07 37 am

Luego, buscará el panel para el que necesita ejecutar la lista de reproducción en función de sus variables de plantilla y seleccionarlo:
screen shot 2015-09-30 at 11 00 13 am

Una vez que seleccione el tablero, automáticamente se mostrará la lista de variables de la plantilla:
screen shot 2015-09-30 at 11 00 16 am

Ahora el siguiente paso es seleccionar las variables de la plantilla con las que desea ejecutar la lista de reproducción y hacer clic en Inicio:
screen shot 2015-09-30 at 11 00 44 am

Y aquí tienes la lista de reproducción basada en variables de plantilla:
screen shot 2015-09-30 at 11 00 51 am
screen shot 2015-09-30 at 11 00 58 am

Háganme saber qué piensan acerca de este cambio en la vista de la lista de reproducción.

se ve bien

+1

+1, ¿alguna noticia sobre esta función @utkarshcmu ?

@ evandro-portugal Implementé la función de lista de reproducción para grafana pero no se fusionó antes. Creo que ahora tengo que rehacer un poco el trabajo porque el código ha cambiado mucho.

@utkarshcmu correcto, ¿dónde puedo obtener sus últimos códigos para esto? Me gustaría echar un vistazo e intentar hacer algo por mí, en mi caso es una prioridad alta y solo necesito hacer que las variables cambien la posición al final de cada ciclo, luego podría hacer algo hasta que obtengamos su rama fusionado

@ evandro-portugal
Aquí está el código antiguo:
Ve a mi bifurcación de Grafana - https://github.com/justforkit/grafana
E intente compilar Grafana desde la rama "variable-playlist"

@utkarshcmu , gracias, echaré un vistazo al código, ¿planeas reelaborar el código? De lo contrario, podría compartir mi trabajo si lo soluciono para la rama maestra real de grafana, que estoy usando en este momento. Tendré un par de vacaciones ahora (carnaval aquí) y planeo jugar con eso

@ evandro-portugal Claro, adelante y vuelva a trabajar si quiere. No planeo trabajar en eso al menos durante una semana aquí. Disfruta del Carnaval. :)

@torkelo ¿Se puede fusionar esta función en core grafana? Esta parece ser una mejora muy útil para reproducir el mismo tablero con diferentes variables de plantilla.

Además, si @bergquist / @torkelo están de acuerdo en fusionar esta función, puedo volver a trabajar en el código de mi PR anterior para que sea compatible con el último código de Grafana.

@digrich ¿a qué te refieres fusionado? Esto no es un PR :)

Estaba tratando de referir el antiguo PR de @utkarshcmu (# 2841) pero como mencionó en su último comentario, tiene que volver a trabajar y enviar un nuevo PR.

+1

Hola @torkelo . Mientras espero esta útil función, me gustaría buscar alguna solución.

¿Podría ser posible crear algo como una lista de reproducción basada en un tablero con guiones?

Este panel con script debería poder cargar otros paneles con plantilla y pasar variables de alguna manera, ¿quizás desde la URL?

+1

¿Hay alguna novedad al respecto dado que ha pasado medio año?

No hay noticias :(

¡Parece que necesito tomarme un tiempo para esta solicitud de función!

+1

+1

+1

+1

Dado que puede pasar variables a través de URL, mi solución temporal es esta simple página html de carrusel / rotador de iframe , que yo llamo el carrusel de Grafana Dashboards.

Solo necesita especificar la matriz BASE_URL y dashboards_list , que contiene los paneles que desea mostrar.

Esta es una pregunta que no está relacionada, pero ¿hay alguna manera de tener un botón de host "siguiente" / "anterior" (o una variable con plantilla) en un panel de control?
Cuando quiero desplazarme manualmente por un conjunto completo de hosts, usar el menú desplegable se vuelve muy engorroso.

¿Alguna acción aquí? Todos nuestros paneles tienen plantillas, por lo que sin las funciones / posibilidades de la plantilla para pasar vars, la función de lista de reproducción es en gran medida inutilizable para nosotros.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1, @utkarshcmu ¿

@thattolleyguy - Adelante amigo, ya no estoy trabajando en esto a partir de ahora.

+1
Una sugerencia, ya que los paneles de control son más largos, ¿podemos tener un desplazamiento automático también? De lo contrario, la mayoría de los paneles permanecen ocultos en la lista de reproducción (en la TV)

+1

+1

+1

¿Alguna novedad sobre esta función?

Es bastante sorprendente que un trabajo así se haya ido a la basura.

No he tenido tiempo de trabajar en esto. Tampoco estoy muy familiarizado con el código grafana, así que si alguien más está interesado, no dudes en utilizarlo. Si no, lo intentaré cuando tenga tiempo.

+1

+1

+1

@torkelo ¿ Alguna posibilidad de

@davidkarlsen, no hay una solicitud de extracción para esta función y estamos en versión beta, por lo que es muy poco probable. Las solicitudes de funciones no se implementan a menos que alguien trabaje en ellas y no sepa que nadie esté trabajando en esto.

Ah, fui un poco rápido, parece que https://github.com/grafana/grafana/pull/2841 llegó muy lejos pero luego fue abandonado ;-(

+1

+1

+1

+1

+1

¿Qué pasa con el uso de la cadena de consulta PLUS del panel de control en la lista de reproducción?
Esto agregaría "automáticamente" todas las vars Y el rango de tiempo.

En mi ejemplo esto sería
?orgId=1&var-DATACENTER=dc1&var-FQDN=All&from=now-2d&to=now

lo que pasó ... tomó casi 4 años y la función no agrega código maestro ... eso es tan ridículo

¡Eso es imprescindible!

+1

No entiendo por qué aún no se ha lanzado esa función ...

+1

+1

¿Algún progreso en esta función? Esta es una necesidad. Sin esto, las listas de reproducción son casi tan buenas como inútiles, al menos en mi caso.

También me gustaría ver esta función; actualmente tengo que duplicar paneles para esto

Igual que el anterior, he tenido que duplicar varias pantallas solo para que la lista de reproducción sea utilizable. Esta característica sería genial.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Al ver el interés que tiene esta función, es una pena que no se esté avanzando.
@costimuraru @utkarshcmu , ¿Conoce el estado de esta solicitud? ¿Deberíamos considerar esperar esta función o deberíamos buscar alternativas?

¡Solo intervengo para decir que también nos gustaría que esta función se fusionara!

¡Lo intentaré de nuevo este mes!

Una solución alternativa si necesita mostrar varios paneles con parámetros es crear un archivo html que muestre paneles en iframes y rotarlos con un simple script JS. Esto es lo que uso para rotar los paneles de grafana en mi 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>

Puede establecer una URL de panel específica en el atributo src de iframe.

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

El intervalo de rotación se establece en milis en const interval = 10000 .
Por supuesto, también puede agregar más iframes.

5 años abierto, ¿se publicará este código alguna vez?

Esperaba ver esto en 6, para ser honesto .. :)

Otro +1, ¿alguna actualización sobre esto?

: pastel: por el quinto aniversario de esta edición.

¿Podemos obtener una actualización?

Hola, es una característica muy importante, ¿hay alguna actualización sobre esto?

Estoy bastante seguro de que esto nunca sucederá 😔

Quiero usar grafana para monitorear alrededor de 30 servidores usando una plantilla de tablero.
Sin esto, tengo que cambiar 30 plantillas cada vez que quiero una actualización para mi plantilla.

Esta opción sería muy útil

:) En el mundo de los microservicios, será muy difícil tener un panel por servicio ... esta opción será muy útil y fácil de monitorear nuestros servicios en lugar de tener docenas de paneles solo para poder mostrarlos en la lista de reproducción.

Sería una característica realmente útil.

+1

+1: sería una función útil

+1

+1

+1; ¿Cuál es el estado de esto?

+1

+1

+1

+1

+1

+1
De hecho, esto sería muy útil. Lamentablemente, esta solicitud ya tiene 5 años.

+1

+1 para esto.

También sería bueno si pudiera tener un enlace en el descubrimiento de servicios de Prometheus para que una instancia $ pudiera completarse y expandirse automáticamente en la lista de reproducción. De esa manera, cuando las instancias se encienden / desconectan, se agregan / eliminan automáticamente de la lista de reproducción.

Esta sería una característica muy útil también para el modo quiosco.

+1

¿Alguien puede decirme si se ha agregado esta función?

¿Fue útil esta página
0 / 5 - 0 calificaciones