Este repositório foi arquivado em favor de plug-ins integrados disponíveis nas versões Grafana 9+: histórico de status e linha do tempo de estado. Esses plug-ins são usados pela comunidade como substitutos do flant-statusmap. Consulte a edição nº 302 para obter mais informações. Se você acha que este plugin atende às suas necessidades e gostaria de continuar desenvolvendo-o, fique à vontade para fazer um fork. Adoraríamos ver você ir mais longe!
Painel para mostrar status discretos de vários alvos ao longo do tempo.
Execute
docker compose up
e abra http://localhost:3000 no navegador para ver uma demonstração simples.
Tínhamos uma necessidade desesperada de visualizar um conjunto de status de séries temporais ao longo de um período de tempo, para que pudéssemos ver um histórico de alterações no status dos objetos. Como mantemos muitos clusters Kubernetes (e infraestrutura relacionada), nossos principais casos para isso são a visualização de estados de integridade de servidores e pods Kubernetes, bem como verificações de integridade de serviços HTTP. Tentamos vários plug-ins Grafana disponíveis (eles estão listados em Agradecimentos abaixo), mas nenhum deles conseguiu fornecer os recursos e a visualização realmente próximos do que estávamos procurando.
NB: Você pode encontrar mais detalhes sobre nossa jornada de criação do plugin neste post.
Os objetos visualizados com este plugin podem ser diferentes: não apenas componentes de TI (por exemplo, hosts de servidores e pods Kubernetes), mas qualquer coisa que você possa imaginar, como cafeteiras na imagem acima. Esses objetos devem ter status discretos que são conjuntos de valores predefinidos, por exemplo, ok
= 0, off
= 1, fail
= 2, etc.
Para criar gráficos organizados, sua fonte de dados deve retornar dados bons. O plug-in ajusta a variável $__interval
dependendo da largura do bucket nas opções do painel. Suas consultas devem agregar status em $__interval
.
Para fazer com que o modo de múltiplos valores funcione conforme o esperado, você deve definir múltiplas consultas: uma consulta para cada status possível.
O plug-in não agrega dados a tempo, apenas renderiza os dados de entrada como buckets. Por causa disso, os dados devem conter pontos para cada carimbo de data/hora no intervalo de tempo e carimbos de data/hora iguais para cada destino possível (rótulo do eixo y). Essa limitação é abordada pelo problema nº 53.
Para trabalhar com dados do Prometheus você precisará configurar status discretos para seus objetos. Os requisitos para armazenar esses status nas métricas são os seguintes:
0
e 1
;Quando terminar, você pode coletar todos os dados via consulta, por exemplo:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
Se não existisse tal status (
) durante o intervalo da consulta, o Prometheus não retornaria nada. Caso contrário, o valor do status será retornado.
Por exemplo, se você possui 5 tipos de status e uma métrica ( coffee_maker_status
) com 5 valores permitidos ( 0
, 1
, 2
, 3
, 4
), você deve transformar esta métrica usando a seguinte regra:
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
É assim que a métrica coffee_maker_status
com valor 3
será transformada em nova métrica:
coffee_maker_status:discrete{status="3"} 1
Agora, quando o Prometheus tem valores 0
e 1
para cada status, todas essas métricas podem ser agregadas, assim você obterá todos os status disponíveis de seus objetos ao longo do tempo.
Escolha 'Série temporal' para 'Formatar como' e use GROUP BY ($__interval)
na consulta. $tag_
pode ser usado em 'Alias by' para definir rótulos do eixo y.
Exemplo de consulta com agregação em $__interval
é assim (você precisa de uma consulta para cada valor de status possível):
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
coluna metric
é usada como rótulo do eixo y.
Primeiramente deve ser criada uma consulta individual para cada valor de status possível. Cada consulta também deve ter uma legenda semelhante para agrupamento:
Então, o mapeamento de cores para valores de status deve ser definido no modo de cores discretas :
O uso pode usar predefinições para definir as cores de um semáforo ou 8 cores da paleta solarizada:
Nota: Os modos de cores Spectrum e Opacity funcionam da mesma forma que no plugin Heatmap.
A caixa de seleção de vários valores especifica como eles devem ser exibidos:
Os nulos de exibição podem ser tratados como intervalos vazios ou exibidos com a cor do valor 0
.
A largura mínima e o espaçamento são usados para especificar a largura mínima do intervalo e o espaçamento entre os intervalos. O arredondamento pode ser usado para arredondar bordas.
Índice de valores definido como um número positivo para exibir apenas valores de séries temporais especificadas.
A caixa de seleção Mostrar legenda alterna a legenda na parte inferior do painel.
A classificação de linhas pode ser usada para classificar rótulos no eixo Y. Métricas — classifique os rótulos conforme são definidos na guia Métricas. a→z e z→a classificam os rótulos em ordem decrescente ou crescente em ordem natural.
Habilitar paginação alterna os controles de paginação no gráfico.
Linhas por página um número de linhas para exibir no gráfico.
Mostrar dica de ferramenta alterna a exibição da dica de ferramenta ao passar o mouse sobre os buckets.
Congelar ao clicar alterna a dica de ferramenta "congelar" ao clicar. A dica de ferramenta congelada pode ser usada para comparar dados com dicas flutuantes ou para seguir URLs.
Mostrar itens alterna a exibição de itens adicionais na dica de ferramenta.
Itens é uma lista de definições para exibir URLs na dica de ferramenta.
Cada URL possui um modelo, ícone, rótulo e opções de formatação: letras minúsculas e formato de data para variáveis.
Em alguns casos, o painel de status é usado para passar de um painel para outro mais específico, por exemplo, ao realizar uma análise de raiz/causa. Nesses casos, o usuário pode querer reduzir o escopo do intervalo de tempo, mantendo o evento desejado centralizado (para poder analisar os intervalos de tempo anteriores/posteriores). Esses valores são introduzidos por meio de __bucket_from
e __bucket_to
.
__bucket_from
: É o valor de bucket.from
menos o bucket percentual. __bucket_to
: É o valor de bucket.to
mais o bucket percentual.
O primeiro lançamento público deste plugin foi totalmente feito pelos engenheiros da Flant. Toda a ideia veio de Dmitry Stolyarov (@distol), a versão inicial foi escrita por Sergey Gnuskov (@gsmetal) e as alterações finais foram feitas por Ivan Mikheykin (@diafour).
Este plugin é baseado no painel "Heatmap" da Grafana e parcialmente inspirado nas ideias de Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group.