Grafana: Suporte para playlist com variáveis ​​de modelo

Criado em 8 set. 2014  ·  132Comentários  ·  Fonte: grafana/grafana

Deixe-me dar um exemplo simples:
Temos um painel com a variável $ HOST configurada.
Temos um gráfico que usa aws. $ HOST.request.count
Ao olhar para o painel, podemos selecionar Host1, Host2 etc, exibindo as métricas apropriadas.
Agora, seria bom transformar isso em uma lista de reprodução para que a cada minuto, grafana exiba as métricas para cada host.

As coisas ficam um pouco mais complicadas quando temos dois ou mais filtros. Existem várias combinações, algumas das quais podem não ser do interesse do observador do painel.
Por esse motivo, seria bom ter uma maneira de selecionar uma lista de combinações de filtro / variável que sejam interessantes para o usuário. A lista de reprodução percorreria essas combinações e exibia o painel com as métricas apropriadas.
Também seria bom possibilitar a seleção de diferentes combinações para o intervalo de tempo em uma lista de reprodução (por exemplo, últimas 6 horas, últimas 24 horas e assim por diante).

aredashboard prioritnice-to-have typfeature-request

Comentários muito úteis

: cake: para o aniversário de 5 anos desta edição.

Podemos obter uma atualização?

Todos 132 comentários

@costimuraru sugestões muito boas!

: +1: tornará o recurso da lista de reprodução muito mais útil

: +1: Este recurso é necessário porque você não tem uma tela enorme para colocar todos os seus gráficos lá.

: +1: Na verdade, este recurso seria ótimo para projetos como o nosso, onde temos muitos painéis que podem ser compactados em uma única tela.

Isso realmente parece muito útil, mas também muito complexo e demorado para expor as configurações de variável e tempo na visualização da lista de reprodução inicial (e implementar a lógica para lidar com essas configurações e variáveis ​​de configuração, etc. no carregamento / ciclo do painel). Portanto, será definitivamente um recurso que também será priorizado no futuro, mas não algo que possa ser espremido para a v1.8

Obrigado @torkelo e continue com o bom trabalho!

: +1: Seria ótimo ter este recurso

Enquanto isso está na fila dev - há alguma maneira de especificar a variável de modelo na url? Eu poderia pelo menos usar uma extensão do navegador para girar por um monte de urls por enquanto.

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

+1, também estou muito interessado nesta solicitação de recurso

+1

+1

+1 Com modelos, isso é uma obrigação.

PR em breve ...

@costimuraru Implementei a lista de reprodução para uma variável, agora trabalhando em combinações de várias variáveis. A implementação deve ser rápida. A seleção de um intervalo de tempo diferente pode ser um recurso de atualização além disso. Para esta iteração, estou apenas fazendo uma lista de reprodução de combinações de variáveis ​​de modelo.

Isso é incrível, @utkarshcmu !

Aqui está o PR - # 2841 e algumas capturas de tela:

Vá para "Modelos" e agora você verá a nova guia "Lista de reprodução":
screen shot 2015-09-29 at 3 14 13 am

Clique na aba Playlist e você deverá ver a seguinte tela com todas as variáveis ​​listadas.
screen shot 2015-09-29 at 3 14 16 am

Selecionei 2 das variáveis ​​de 3 e cliquei em "Iniciar". (A razão pela qual selecionei 2 é porque quero jogar todas as combinações dessas 2 variáveis ​​mantendo a terceira fixa. Observação: as variáveis ​​fixas obterão seus valores padrão salvos).
screen shot 2015-09-29 at 3 14 22 am

Agora você pode ver que mantive a primeira variável constante e uma lista de reprodução começará com todas as combinações possíveis das 2ª e 3ª variáveis.
screen shot 2015-09-29 at 3 14 36 am

Forneça feedback e alterações, se necessário.

Incrível @utkarshcmu

Bom trabalho! não tenho certeza sobre ter o recurso de lista de reprodução como uma guia nas configurações de modelos. Já existe uma visualização da lista de reprodução. Construir uma lista de reprodução para um painel modelo deve fazer parte dessa visualização.

De acordo com @torkelo , farei isso parte da visualização da lista de reprodução. Isso faz mais sentido. :)

A lista de reprodução baseada em variáveis ​​de modelo pode ser acionada a partir da visualização da lista de reprodução agora. As seguintes etapas devem ser seguidas para iniciar a lista de reprodução:

Clique na lista de reprodução:
screen shot 2015-09-30 at 10 59 44 am

Você verá a seguinte exibição de lista de reprodução com uma opção adicional de escolher o tipo de lista de reprodução:
screen shot 2015-09-30 at 10 59 50 am
Tudo funciona da mesma forma para as listas de reprodução baseadas em painéis.

Agora, para a lista de reprodução baseada em variáveis ​​de modelo, você precisa selecionar "variáveis" no menu suspenso:
screen shot 2015-09-30 at 11 07 37 am

Em seguida, você irá pesquisar o painel para o qual precisa executar a lista de reprodução com base em suas variáveis ​​de modelo e selecioná-lo:
screen shot 2015-09-30 at 11 00 13 am

Depois de selecionar o painel, automaticamente a lista de variáveis ​​de modelo será mostrada:
screen shot 2015-09-30 at 11 00 16 am

Agora, a próxima etapa é selecionar as variáveis ​​de modelo com as quais deseja executar a lista de reprodução e clicar em Iniciar:
screen shot 2015-09-30 at 11 00 44 am

E aqui está a lista de reprodução baseada em variáveis ​​de modelo:
screen shot 2015-09-30 at 11 00 51 am
screen shot 2015-09-30 at 11 00 58 am

Deixe-me saber o que vocês pensam sobre essa mudança na visualização da lista de reprodução.

parece bom

+1

+1, alguma notícia sobre esse recurso @utkarshcmu ?

@evandro-portugal Implementei o recurso de lista de reprodução para grafana, mas não foi mesclado antes. Acho que agora tenho que refazer algum trabalho porque o código mudou muito.

@utkarshcmu certo, onde posso obter seus últimos códigos para isso? Eu gostaria de dar uma olhada e tentar fazer algo para mim, no meu caso é uma prioridade alta e eu só preciso fazer as variáveis ​​mudarem de posição no final de cada ciclo, então eu poderia fazer algo até pegarmos seu galho fundido

@ evandro-portugal
Aqui está o código antigo:
Por favor, vá para o meu fork do Grafana - https://github.com/justforkit/grafana
E tente construir o Grafana a partir do ramo "lista de reprodução variável"

@utkarshcmu , obrigado, vou dar uma olhada no código, você planeja retrabalhar o código? Caso contrário, eu poderia compartilhar meu trabalho se o corrigir para o verdadeiro ramo mestre de grafana, que estou usando agora. Terei alguns feriados agora (carnaval aqui) e pretendo brincar com isso

@evandro-portugal Claro, vá em frente e retrabalhe se quiser. Não estou planejando trabalhar nisso pelo menos por uma semana aqui. Aproveite o Carnaval. :)

@torkelo Este recurso pode ser mesclado no núcleo grafana? Este parece ser um aprimoramento muito útil para reproduzir o mesmo painel com diferentes variáveis ​​de modelo.

Além disso, se @bergquist / @torkelo concordar em mesclar esse recurso, posso retrabalhar no código do meu PR anterior para torná-lo compatível com o código Grafana mais recente.

@digrich, o que você quer dizer com mesclado? Este não é um PR :)

Eu estava tentando me referir ao antigo PR de @utkarshcmu (# 2841), mas como ele mencionou em seu último comentário, ele precisa refazer e enviar um novo PR.

+1

Olá, @torkelo . Enquanto espero por este recurso útil, gostaria de procurar uma solução alternativa.

Seria possível construir algo como uma lista de reprodução baseada em um painel com script?

Este painel de script deve ser capaz de carregar outros painéis de modelo e passar variáveis ​​de alguma forma, talvez da url?

+1

Alguma notícia disso já que já se passou meio ano?

Sem notícias :(

Parece que preciso de algum tempo para esta solicitação de recurso!

+1

+1

+1

+1

Como você pode passar variáveis ​​via URL, minha solução temporária é esta página html de carrossel / rotador iframe simples , que eu chamo de carrossel Grafana Dashboards.

Você só precisa especificar a matriz BASE_URL e dashboards_list , que contém os painéis que deseja exibir.

Esta é uma questão um pouco não relacionada, mas há uma maneira de ter apenas um botão de host "próximo" / "anterior" (ou variável realmente modelada) em um painel?
Quando desejo rolar manualmente por um conjunto completo de hosts, o menu suspenso torna-se muito complicado.

Alguma ação aqui? Todos os nossos painéis são modelados - portanto, sem os recursos / possibilidades de modelo para passar os vars, o recurso de lista de reprodução é amplamente inutilizável para nós.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1, @utkarshcmu Você ainda está trabalhando nisso? Vou tentar se não, mas sou muito novo no desenvolvimento de grafana

@thattolleyguy - Vá em frente, amigo, não estou mais trabalhando nisso agora.

+1
Uma sugestão como os painéis são mais longos, podemos ter rolagem automática também. Caso contrário, a maioria dos painéis permanece oculta na lista de reprodução (na TV)

+1

+1

+1

Alguma notícia sobre esse recurso?

É incrível que tal trabalho tenha ido para o lixo.

Não tive tempo de trabalhar nisso. Eu também não estou muito familiarizado com o código grafana, então se alguém estiver interessado, fique à vontade para pegá-lo. Se não, vou tentar quando tiver tempo.

+1

+1

+1

@torkelo Alguma chance de colocar isso no próximo lançamento? Seria muito bom poder deixar as equipes girarem em todos os aplicativos que operam.

@davidkarlsen, não há solicitação de pull para esse recurso e estamos em beta, então isso é muito improvável. As solicitações de recursos não são implementadas a menos que alguém trabalhe nelas e não esteja ciente de que alguém esteja trabalhando nisso.

Ah - fui um pouco rápido - parece que https://github.com/grafana/grafana/pull/2841 foi longe, mas depois foi abandonado ;-(

+1

+1

+1

+1

+1

que tal usar a string de consulta MAIS do painel na lista de reprodução?
Isso adicionaria "automaticamente" todos os vars E o intervalo de tempo.

No meu exemplo, isso seria
?orgId=1&var-DATACENTER=dc1&var-FQDN=All&from=now-2d&to=now

o que aconteceu ... demorou quase 4 anos e o recurso não adicionar código mestre ... isso é tão ridículo

Isso é OBRIGATÓRIO!

+1

Não entendo porque tal recurso ainda não foi lançado ....

+1

+1

Algum progresso neste recurso? Este é um must-have. Sem isso, as listas de reprodução são quase tão boas quanto inúteis, pelo menos no meu caso.

Eu também gostaria de ver este recurso - atualmente estou tendo que duplicar painéis para este

Da mesma forma que acima, tive que duplicar várias telas apenas para tornar a lista de reprodução utilizável. Esse recurso seria ótimo.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Vendo o quanto esse recurso tem interesse, é uma pena que não haja nenhum progresso sendo feito.
@costimuraru @utkarshcmu , Você sabe o status desta solicitação? Devemos pensar em esperar por esse recurso ou devemos procurar alternativas?

Estou apenas entrando na conversa para dizer que também gostaríamos de mesclar esse recurso!

Vou tentar novamente este mês!

Uma solução alternativa se você precisar exibir vários painéis com parâmetros é criar um arquivo html exibindo painéis em iframes e girá-los com um script JS simples. Isso é o que eu uso para girar painéis de grafana em meu 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>

Você pode definir url de painel específico no atributo src do 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>

O intervalo de rotação é definido em milis em const interval = 10000 .
Claro, você também pode adicionar mais iframes.

5 anos abertos, este código algum dia será lançado?

Esperava ver isso em 6, para ser honesto .. :)

Outro +1, alguma atualização sobre isso?

: cake: para o aniversário de 5 anos desta edição.

Podemos obter uma atualização?

Olá, é um recurso muito importante. Há alguma atualização sobre isso?

Tenho certeza de que isso nunca vai acontecer 😔

Eu quero usar o grafana para monitorar cerca de 30 servidores usando um modelo dahboard.
Sem isso, eu tenho que mudar 30 modelos toda vez que eu quiser uma atualização para o meu modelo.

Esta opção seria muito útil

:) No mundo dos microsserviços, será tão difícil ter um painel por serviço .. esta opção será muito útil e fácil de monitorar nossos serviços ao invés de ter dezenas de painéis apenas para poder mostrá-los na lista de reprodução.

Seria um recurso realmente útil.

+1

+1 - seria um recurso útil

+1

+1

+1; qual é o status disso?

+1

+1

+1

+1

+1

+1
Isso seria muito útil, de fato .. infelizmente, esse pedido já tem 5 anos

+1

1 para isso.

Também seria bom se você pudesse ter um gancho na descoberta de serviço do Prometheus para que uma instância $ pudesse ser preenchida e expandida automaticamente na lista de reprodução. Dessa forma, quando as instâncias ficam on / off-line, elas são adicionadas / removidas automaticamente da lista de reprodução.

Este seria um recurso muito útil também para o modo Quiosque.

+1

Alguém saberia me dizer se esse recurso foi adicionado?

Esta página foi útil?
0 / 5 - 0 avaliações