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 ao Grafana versão 9.x.

Para espaços de trabalho do Grafana que suportam a versão 10.x do Grafana, consulte. Trabalhando na versão 10 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

No Grafana, você cria modelos de rótulos e anotações da mesma forma que faria no Prometheus. Se você já usou o Prometheus antes, deve estar familiarizado com as variáveis $value e, que contêm $labels os rótulos e o valor do alerta. Você pode usar as mesmas variáveis no Grafana, mesmo que o alerta não use uma fonte de dados do Prometheus. Se você nunca usou o Prometheus antes, não se preocupe, pois cada uma dessas variáveis e como modelá-las serão explicadas conforme você segue o restante desta página.

Linguagem de modelagem de Go

Os modelos para rótulos e anotações são escritos na linguagem de modelagem do Go, texto/modelo.

Tags de abertura e fechamento

Em texto/modelo, os modelos começam com {{ e terminam com, }} independentemente de o modelo imprimir uma variável ou executar estruturas de controle, como instruções if. Isso é diferente de outras linguagens de modelagem, como Jinja, em que a impressão de uma variável usa e. {{ }} e as estruturas de controle usam e. {% %}

Print (Imprimir)

Para imprimir o valor de algo, use {{ }} e. Você pode imprimir o resultado de uma função ou o valor de uma variável. Por exemplo, para imprimir a $labels variável, você escreveria o seguinte:

{{ $labels }}

Itere sobre rótulos

Para iterar sobre cada rótulo, $labels você pode usar umrange. Aqui $k se refere ao nome e $v ao valor do rótulo atual. Por exemplo, se sua consulta retornasse um rótuloinstance=test, $k $v seria instance e seriatest.

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

Os rótulos, valores e variáveis de valores

A variável labels

A $labels variável contém os rótulos da consulta. Por exemplo, uma consulta que verifica se uma instância está inativa pode retornar um rótulo de instância com o nome da instância que está inativa. Por exemplo, suponha que você tenha uma regra de alerta que é acionada quando uma de suas instâncias fica inativa por mais de 5 minutos. Você quer adicionar um resumo ao alerta que informa qual instância está inativa. Com a $labels variável, você pode criar um resumo que imprima o rótulo da instância no resumo:

Instance {{ $labels.instance }} has been down for more than 5 minutes

Etiquetas com pontos

Se a etiqueta que você deseja imprimir contiver um ponto (ponto final ou ponto final) em seu nome, usar o mesmo ponto no modelo não funcionará:

Instance {{ $labels.instance.name }} has been down for more than 5 minutes

Isso ocorre porque o modelo está tentando usar um campo não existente chamado name in. $labels.instance Em vez disso, você deve usar a index função, que imprime o rótulo instance.name na $labels variável:

Instance {{ index $labels "instance.name" }} has been down for more than 5 minutes

A variável de valor

A $value variável funciona de forma diferente de Prometheus. No $value Prometheus, há um número de ponto flutuante contendo o valor da expressão, mas no Grafana é uma string contendo os rótulos e valores de todas as expressões Threshold, Reduce e Math e Condições Clássicas dessa regra de alerta. Ele não contém os resultados das consultas, pois elas podem retornar de 10 a 10.000 linhas ou métricas.

Se você fosse usar a $value variável no resumo de um alerta:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $value }})

O resumo pode ser parecido com o seguinte:

api has an over 5% of responses with 5xx errors: [ var='B' labels={service=api} value=6.789 ]

Aqui var='B' se refere à expressão com o RefID B. No Grafana, todas as consultas e expressões são identificadas por um RefID que identifica cada consulta e expressão em uma regra de alerta. Da mesma forma, labels={service=api} se value=6.789 refere aos rótulos e ao valor.

Você pode ter observado que não há RefID A. Isso ocorre porque, na maioria das regras de alerta, a RefID A se refere a uma consulta e, como as consultas podem retornar muitas linhas ou séries temporais, elas não estão incluídas. $value

A variável de valores

Se a $value variável contiver mais informações do que você precisa, você poderá imprimir os rótulos e o valor de expressões individuais usando$values. Ao contrário$value, a $values variável é uma tabela de objetos contendo os rótulos e valores de ponto flutuante de cada expressão, indexados por seu RefID.

Se você imprimisse o valor da expressão com RefID B no resumo do alerta:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ $values.B }}%

O resumo conterá apenas o valor:

api has an over 5% of responses with 5xx errors: 6.789%

No entanto, enquanto {{ $values.B }} imprime o número 6.789, na verdade é uma string, pois você está imprimindo o objeto que contém os rótulos e o valor da RefID B, não o valor de ponto flutuante de B. Para usar o valor de ponto flutuante da RefID B, você deve usar o campo de. Value $values.B Se você fosse humanizar o valor do ponto flutuante no resumo de um alerta:

{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanize $values.B.Value }}%

Sem dados, erros de tempo de execução e tempos limite

Se a consulta em sua regra de alerta não retornar dados ou falhar devido a um erro na fonte de dados ou ao tempo limite, todas as expressões Threshold, Reduce ou Math que usem essa consulta também não retornarão nenhum dado ou um erro. Quando isso acontecer, essa expressão estará ausente de$values. É uma boa prática verificar se um RefID está presente antes de usá-lo, caso contrário, seu modelo será interrompido caso sua consulta não retorne nenhum dado ou um erro. Você pode fazer isso usando uma instrução if:

{{ if $values.B }}{{ $labels.service }} has over 5% of responses with 5xx errors: {{ humanizePercentage $values.B.Value }}{{ end }}

Condições clássicas

Se a regra usar Condições Clássicas em vez das expressões Limite, Redução e Matemática, a $values variável será indexada pela ID de referência e pela posição da condição na Condição clássica. Por exemplo, se você tiver uma Condição Clássica com RefID B contendo duas condições, ela $values conterá duas condições e. B0 B1

The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}

Funções

As seguintes funções também estão disponíveis ao expandir 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.

Exemplo

{{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 conforme configurado no (s) arquivo (s) ini.

Exemplo

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

GraphLink

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

Exemplo

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

Exemplo

{{ humanize 1000.0 }}
1k

humanizar 1024

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

Exemplo

{{ humanize1024 1024.0 }}
1ki

Humanize a duração

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

Exemplo

{{ humanizeDuration 60.0 }}
1m 0s

Porcentagem de humanização

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

Exemplo

{{ humanizePercentage 0.2 }}
20%

Humanize o carimbo de data/hora

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

Exemplo

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

Exemplo

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

Prefixo do caminho

A pathPrefix função retorna o caminho do servidor Grafana conforme configurado no (s) arquivo (s) ini.

Exemplo

{{ 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 9 do Grafana

Exemplo

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

Exemplo

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

para Lower

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

Exemplo

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

para TouPper

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

Exemplo

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

reReplaceAll

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

Exemplo

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