Modelagem de rótulos e anotações - Amazon Managed Grafana

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Modelagem de rótulos e anotações

Este tópico de documentação foi desenvolvido para espaços de trabalho do Grafana que oferecem suporte à versão 10.x do Grafana.

Para espaços de trabalho do Grafana que suportam a versão 9.x do Grafana, consulte. Trabalhando na versão 9 do Grafana

Para espaços de trabalho do Grafana que suportam a versão 8.x do Grafana, consulte. Trabalhando na versão 8 da Grafana

Você pode usar modelos para incluir dados de consultas e expressões em rótulos e anotações. Por exemplo, talvez você queira definir o rótulo de gravidade de um alerta com base no valor da consulta ou usar o rótulo de instância da consulta em uma anotação resumida para saber qual servidor está tendo alto uso da CPU.

Todos os modelos devem ser escritos em texto/modelo. Independentemente de você estar modelando um rótulo ou uma anotação, você deve escrever cada modelo em linha dentro do rótulo ou anotação que você está criando. Isso significa que você não pode compartilhar modelos entre rótulos e anotações e, em vez disso, precisará copiar os modelos onde quiser usá-los.

Cada modelo é avaliado sempre que a regra de alerta é avaliada e é avaliado para cada alerta separadamente. Por exemplo, se sua regra de alerta tiver uma anotação resumida em modelo e a regra de alerta tiver 10 alertas de disparo, o modelo será executado 10 vezes, uma vez para cada alerta. Você deve tentar evitar ao máximo fazer cálculos caros em seus modelos.

Exemplos

Em vez de escrever um tutorial completo sobre texto/modelo, os exemplos a seguir tentam mostrar os casos de uso mais comuns que vimos para modelos. Você pode usar esses exemplos literalmente ou adaptá-los conforme necessário para seu caso de uso. Para obter mais informações sobre como escrever texto/modelo, consulte a documentação de texto/modelo.

Imprima todas as etiquetas, separadas por vírgula

Para imprimir todas as etiquetas, separadas por vírgula, imprima a $labels variável:

{{ $labels }}

Por exemplo, se recebesse um alerta com as etiquetas alertname=High CPU usageinstance=server1, grafana_folder=CPU alerts isso imprimisse:

alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1
nota

Se você estiver usando condições clássicas, não $labels conterá nenhum rótulo da consulta. Consulte a variável $labels para obter mais informações.

Imprima todas as etiquetas, uma por linha

Para imprimir todas as etiquetas, uma por linha, use range a para iterar sobre cada par chave/valor e imprimi-las individualmente. Aqui $k se refere ao nome e $v ao valor do rótulo atual:

{{ range $k, $v := $labels -}} {{ $k }}={{ $v }} {{ end }}

Por exemplo, se recebesse um alerta com as etiquetas alertname=High CPU usageinstance=server1, grafana_folder=CPU alerts isso imprimisse:

alertname=High CPU usage grafana_folder=CPU alerts instance=server1
nota

Se você estiver usando condições clássicas, não $labels conterá nenhum rótulo da consulta. Consulte a variável $labels para obter mais informações.

Imprima uma etiqueta individual

Para imprimir uma etiqueta individual, use a index função com a $labels variável:

The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes

Por exemplo, se recebesse um alerta com a etiquetainstance=server1, isso imprimiria:

The host server1 has exceeded 80% CPU usage for the last 5 minutes
nota

Se você estiver usando condições clássicas, não $labels conterá nenhum rótulo da consulta. Consulte a variável $labels para obter mais informações.

Imprimir o valor de uma consulta

Para imprimir o valor de uma consulta instantânea, você pode imprimir seu ID de referência usando a index função e a $values variável:

{{ index $values "A" }}

Por exemplo, dada uma consulta instantânea que retorna o valor 81,2345, isso imprimirá:

81.2345

Para imprimir o valor de uma consulta de intervalo, você deve primeiro reduzi-la de uma série temporal para um vetor instantâneo com uma expressão de redução. Em seguida, você pode imprimir o resultado da expressão de redução usando seu ID de referência. Por exemplo, se a expressão de redução pegar a média de A e tiver o ID de referência B, você escreveria:

{{ index $values "B" }}

Imprima o valor humanizado de uma consulta

Para imprimir o valor humanizado de uma consulta instantânea, use a humanize função:

{{ humanize (index $values "A").Value }}

Por exemplo, dada uma consulta instantânea que retorna o valor 81,2345, isso imprimirá:

81.234

Para imprimir o valor humanizado de uma consulta de intervalo, você deve primeiro reduzi-la de uma série temporal para um vetor instantâneo com uma expressão de redução. Em seguida, você pode imprimir o resultado da expressão de redução usando seu ID de referência. Por exemplo, se a expressão de redução pegar a média de A e tiver o ID de referência B, você escreveria:

{{ humanize (index $values "B").Value }}

Imprimir o valor de uma consulta como uma porcentagem

Para imprimir o valor de uma consulta instantânea como uma porcentagem, use a humanizePercentage função:

{{ humanizePercentage (index $values "A").Value }}

Essa função espera que o valor seja um número decimal entre 0 e 1. Se, em vez disso, o valor for um número decimal entre 0 e 100, você poderá dividi-lo por 100 na sua consulta ou usando uma expressão matemática. Se a consulta for uma consulta de intervalo, você deverá primeiro reduzi-la de uma série temporal para um vetor instantâneo com uma expressão de redução.

Definir uma severidade a partir do valor de uma consulta

Para definir um rótulo de severidade a partir do valor de uma consulta, use uma instrução if e a função de comparação maior que. Certifique-se de usar decimais (80.0,,50.0, etc) ao fazer comparações0.0, $values pois texto/modelo não suporta coerção de tipo. Você pode encontrar uma lista de todas as funções de comparação suportadas aqui.

{{ if (gt $values.A.Value 80.0) -}} high {{ else if (gt $values.A.Value 50.0) -}} medium {{ else -}} low {{- end }}

Imprima todas as etiquetas a partir de uma condição clássica

Você não pode usar $labels para imprimir etiquetas da consulta se estiver usando condições clássicas e deve usar $values em vez disso. A razão para isso é que as condições clássicas descartam esses rótulos para impor um comportamento unidimensional (no máximo um alerta por regra de alerta). Se as condições clássicas não descartassem esses rótulos, as consultas que retornassem várias séries temporais fariam com que os alertas oscilassem entre o disparo e a resolução constantemente, pois os rótulos mudariam toda vez que a regra de alerta fosse avaliada.

Em vez disso, a $values variável contém os valores reduzidos de todas as séries temporais para todas as condições que estão sendo acionadas. Por exemplo, se você tiver uma regra de alerta com uma consulta A que retorna duas séries temporais e uma condição B clássica com duas condições, então $values conteria B0B1, B2 B3 e. Se a condição clássica B tivesse apenas uma condição, então $values conteria apenas B0 B1 e.

Para imprimir todas as etiquetas de todas as séries temporais de disparo, use o modelo a seguir (certifique-se de substituir B na expressão regular pela ID de referência da condição clássica, se for diferente):

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Labels }}{{ end }} {{ end }}

Por exemplo, uma condição clássica para duas séries temporais que excedam uma única condição imprimiria:

B0: instance=server1 B1: instance=server2

Se a condição clássica tiver duas ou mais condições e uma série temporal exceder várias condições ao mesmo tempo, seus rótulos serão duplicados para cada condição excedida:

B0: instance=server1 B1: instance=server2 B2: instance=server1 B3: instance=server2

Se precisar imprimir etiquetas exclusivas, considere alterar suas regras de alerta de unidimensionais para multidimensionais. Você pode fazer isso substituindo sua condição clássica por expressões redutoras e matemáticas.

Imprima todos os valores de uma condição clássica

Para imprimir todos os valores de uma condição clássica, pegue o exemplo anterior e $v.Labels substitua por$v.Value:

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Value }}{{ end }} {{ end }}

Por exemplo, uma condição clássica para duas séries temporais que excedam uma única condição imprimiria:

B0: 81.2345 B1: 84.5678

Se a condição clássica tiver duas ou mais condições e uma série temporal exceder várias condições ao mesmo tempo, ela $values conterá os valores de todas as condições:

B0: 81.2345 B1: 92.3456 B2: 84.5678 B3: 95.6789

Variáveis

As variáveis a seguir estão disponíveis para você ao criar modelos de rótulos e anotações:

A variável labels

A $labels variável contém todos os rótulos da consulta. Por exemplo, suponha que você tenha uma consulta que retorne o uso da CPU para todos os seus servidores e tenha uma regra de alerta que é acionada quando algum de seus servidores excede 80% do uso da CPU nos últimos 5 minutos. Você deseja adicionar uma anotação resumida ao alerta que informa qual servidor está experimentando alto uso da CPU. Com a $labels variável, você pode escrever um modelo que imprima uma frase legível por humanos, como:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
nota

Se você estiver usando uma condição clássica, $labels ela não conterá nenhum rótulo da consulta. As condições clássicas descartam esses rótulos para impor um comportamento unidimensional (no máximo um alerta por regra de alerta). Se você quiser usar etiquetas da consulta em seu modelo, siga o exemplo anterior de Imprimir todas as etiquetas a partir de uma condição clássica.

A variável de valor

A $value variável é uma string contendo os rótulos e valores de todas as consultas instantâneas; expressões de limite, redução e matemática e condições clássicas na regra de alerta. Ele não contém os resultados das consultas de intervalo, pois elas podem retornar de 10 a 10.000 linhas ou métricas. Se isso acontecesse, para consultas especialmente grandes, um único alerta poderia usar 10s de MBs de memória e o Grafana ficaria sem memória muito rapidamente.

Para imprimir a $value variável no resumo, você escreveria algo assim:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}

E ficaria mais ou menos assim:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ]

Aqui var='A' se refere à consulta instantânea com o ID de referência A, labels={instance=instance1} refere-se aos rótulos e value=81.234 se refere ao uso médio da CPU nos últimos 5 minutos.

Se você quiser imprimir apenas parte da string em vez da string completa, use a $values variável. Ele contém as mesmas informações que$value, mas em uma tabela estruturada, e é muito mais fácil de usar do que escrever uma expressão regular para corresponder apenas ao texto desejado.

A variável de valores

A $values variável é uma tabela contendo os rótulos e os valores de ponto flutuante de todas as consultas e expressões instantâneas, indexadas por seus IDs de referência.

Para imprimir o valor da consulta instantânea com o ID de referência A:

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}

Por exemplo, com um alerta com os rótulos instance=server1 e uma consulta instantânea com o valor81.2345, isso seria impresso:

CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345

Se a consulta na ID de referência A for uma consulta de intervalo em vez de uma consulta instantânea, adicione uma expressão de redução com a ID de referência B e substitua por (index $values "A")(index $values "B"):

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }}

Funções

As funções a seguir estão disponíveis para você ao criar modelos de rótulos e anotações:

args

A args função traduz uma lista de objetos em um mapa com as teclas arg0, arg1 etc. O objetivo é permitir que vários argumentos sejam passados para os modelos.

{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2

URL externo

A externalURL função retorna a URL externa do servidor Grafana.

{{ externalURL }}
https://example.com/grafana

GraphLink

A graphLink função retorna o caminho para a visualização gráfica da Explore na versão 10 do Grafana expressão e da fonte de dados fornecidas.

{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]

humanizar

A humanize função humaniza os números decimais.

{{ humanize 1000.0 }}
1k

humanizar 1024

humanize1024Funciona de forma semelhantehumanize, mas usa 1024 como base em vez de 1000.

{{ humanize1024 1024.0 }}
1ki

Humanize a duração

A humanizeDuration função humaniza a duração em segundos.

{{ humanizeDuration 60.0 }}
1m 0s

Porcentagem de humanização

A humanizePercentage função humaniza um valor de proporção para uma porcentagem.

{{ humanizePercentage 0.2 }}
20%

Humanize o carimbo de data/hora

A humanizeTimestamp função humaniza um carimbo de data/hora do Unix.

{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC

partida

A match função combina o texto com um padrão de expressão regular.

{{ match "a.*" "abc" }}
true

Prefixo do caminho

A pathPrefix função retorna o caminho do servidor Grafana.

{{ pathPrefix }}
/grafana

Link da tabela

A tableLink função retorna o caminho para a exibição tabular da expressão e fonte de dados fornecidas. Explore na versão 10 do Grafana

{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]

title

A title função coloca em maiúscula o primeiro caractere de cada palavra.

{{ title "hello, world!" }}
Hello, World!

para Lower

A toLower função retorna todo o texto em letras minúsculas.

{{ toLower "Hello, world!" }}
hello, world!

para TouPper

A toUpper função retorna todo o texto em maiúsculas.

{{ toUpper "Hello, world!" }}
HELLO, WORLD!

reReplaceAll

A reReplaceAll função substitui o texto correspondente à expressão regular.

{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080