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