Modelli di etichette e annotazioni - Grafana gestito da Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Modelli di etichette e annotazioni

Questo argomento della documentazione è progettato per le aree di lavoro Grafana che supportano la versione 9.x di Grafana.

Per le aree di lavoro Grafana che supportano la versione 10.x di Grafana, vedere. Funzionamento nella versione 10 di Grafana

Per le aree di lavoro Grafana che supportano la versione 8.x di Grafana, vedere. Funzionamento in Grafana versione 8

In Grafana, crei modelli di etichette e annotazioni proprio come faresti in Prometheus. Se hai già usato Prometheus, dovresti conoscere le variabili $value and, che contengono le etichette e $labels il valore dell'avviso. È possibile utilizzare le stesse variabili in Grafana, anche se l'avviso non utilizza un'origine dati Prometheus. Se non hai mai usato Prometheus prima, non preoccuparti perché ognuna di queste variabili e come modellarle ti verranno spiegate mentre segui il resto di questa pagina.

Il linguaggio di template di Go

I modelli per etichette e annotazioni sono scritti nel linguaggio di template di Go, text/template.

Tag di apertura e chiusura

In text/template, i modelli iniziano {{ e finiscono con }} indipendentemente dal fatto che il modello stampi una variabile o esegua strutture di controllo come le istruzioni if. Questo è diverso da altri linguaggi di template come Jinja, dove la stampa di una variabile utilizza {{ e e le strutture di controllo utilizzano e}}. {% %}

Print (Stampa)

Per stampare il valore di qualcosa usa e. {{ }} È possibile stampare il risultato di una funzione o il valore di una variabile. Ad esempio, per stampare la $labels variabile devi scrivere quanto segue:

{{ $labels }}

Iterate sulle etichette

Per iterare su ogni etichetta $labels puoi usare un. range Qui $k si riferisce al nome e $v al valore dell'etichetta corrente. Ad esempio, se la tua query restituisse un'etichettainstance=test, allora $k lo sarebbe instance e $v lo sarebbetest.

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

Le variabili labels, value e values

La variabile labels

La $labels variabile contiene le etichette della query. Ad esempio, una query che verifica se un'istanza è inattiva potrebbe restituire un'etichetta di istanza con il nome dell'istanza inattiva. Ad esempio, supponiamo di avere una regola di avviso che si attiva quando una delle istanze rimane inattiva per più di 5 minuti. Desideri aggiungere un riepilogo all'avviso che indichi quale istanza è inattiva. Con la $labels variabile, puoi creare un riepilogo che stampa l'etichetta dell'istanza nel riepilogo:

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

Etichette con punti

Se l'etichetta che desideri stampare contiene un punto (punto o punto) nel nome, l'utilizzo dello stesso punto nel modello non funzionerà:

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

Questo perché il modello sta tentando di utilizzare un campo inesistente chiamato name in. $labels.instance Dovresti invece usare la index funzione, che stampa l'etichetta instance.name nella $labels variabile:

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

La variabile value

La $value variabile funziona in modo diverso da Prometheus. In $value Prometheus è presente un numero in virgola mobile contenente il valore dell'espressione, mentre in Grafana è una stringa contenente le etichette e i valori di tutte le espressioni Threshold, Reduce e Math e Classic Conditions per questa regola di avviso. Non contiene i risultati delle interrogazioni, in quanto possono restituire da 10 a 10.000 righe o metriche.

Se dovessi utilizzare la $value variabile nel riepilogo di un avviso:

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

Il riepilogo potrebbe essere simile al seguente:

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

Qui var='B' si fa riferimento all'espressione con RefID B. In Grafana, tutte le interrogazioni e le espressioni sono identificate da un RefID che identifica ogni query ed espressione in una regola di avviso. Analogamente labels={service=api} si riferisce alle etichette e si riferisce al valore. value=6.789

Avrete notato che non esiste un RefID A. Questo perché nella maggior parte delle regole di avviso il RefID A fa riferimento a una query e poiché le query possono restituire molte righe o serie temporali in cui non sono incluse. $value

La variabile values

Se la $value variabile contiene più informazioni del necessario, è possibile invece stampare le etichette e il valore delle singole espressioni utilizzando$values. Al contrario$value, la $values variabile è una tabella di oggetti contenente le etichette e i valori in virgola mobile di ciascuna espressione, indicizzati in base al relativo RefID.

Se dovessi stampare il valore dell'espressione con refID nel riepilogo B dell'avviso:

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

Il riepilogo conterrà solo il valore:

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

Tuttavia, mentre {{ $values.B }} stampa il numero 6.789, in realtà si tratta di una stringa, poiché si stampa l'oggetto, che contiene sia le etichette che il valore per RefID B, non il valore in virgola mobile di B. Per utilizzare il valore a virgola mobile di RefID B è necessario utilizzare il campo da. Value $values.B Se dovessi umanizzare il valore in virgola mobile nel riepilogo di un avviso:

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

Nessun dato, errori di runtime e timeout

Se la query inclusa nella regola di avviso non restituisce dati o fallisce a causa di un errore nell'origine dati o di un timeout, anche tutte le espressioni Threshold, Reduce o Math che utilizzano quella query non restituiranno dati o un errore. Quando ciò accade, queste espressioni saranno assenti da. $values È buona norma verificare che sia presente un RefID prima di utilizzarlo, altrimenti il modello si interromperà nel caso in cui la query non restituisca dati o restituisca un errore. Puoi farlo usando un'istruzione if:

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

Condizioni classiche

Se la regola utilizza le condizioni classiche anziché le espressioni Threshold, Reduce e Math, la $values variabile viene indicizzata sia in base all'ID di riferimento che alla posizione della condizione nella condizione classica. Ad esempio, se hai una condizione classica con RefID B contenente due condizioni, allora $values conterrà due condizioni e. B0 B1

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

Funzioni

Le seguenti funzioni sono disponibili anche quando si espandono etichette e annotazioni:

args

La args funzione traduce un elenco di oggetti in una mappa con le chiavi arg0, arg1 ecc. Questo ha lo scopo di consentire il passaggio di più argomenti ai modelli.

Esempio

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

URL esterno

La externalURL funzione restituisce l'URL esterno del server Grafana come configurato nei file ini.

Esempio

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

GraphLink

La graphLink funzione restituisce il percorso della visualizzazione grafica Esplora nella versione 9 di Grafana per l'espressione e l'origine dati specificate.

Esempio

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

umanizzare

La humanize funzione umanizza i numeri decimali.

Esempio

{{ humanize 1000.0 }}
1k

umanizza 1024

humanize1024Funziona in modo simile humanize ma utilizza 1024 come base anziché 1000.

Esempio

{{ humanize1024 1024.0 }}
1ki

Durata umanizzata

La humanizeDuration funzione umanizza una durata in secondi.

Esempio

{{ humanizeDuration 60.0 }}
1m 0s

Umanizza la percentuale

La humanizePercentage funzione umanizza un valore di rapporto rispetto a una percentuale.

Esempio

{{ humanizePercentage 0.2 }}
20%

Umanizza il timestamp

La humanizeTimestamp funzione umanizza un timestamp Unix.

Esempio

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

partita

La match funzione abbina il testo a un modello di espressione regolare.

Esempio

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

PathPrefix

La pathPrefix funzione restituisce il percorso del server Grafana come configurato nei file ini.

Esempio

{{ pathPrefix }}
/grafana

TableLink

La tableLink funzione restituisce il percorso della vista tabulare Esplora nella versione 9 di Grafana per l'espressione e l'origine dati specificate.

Esempio

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

titolo

La title funzione rende maiuscolo il primo carattere di ogni parola.

Esempio

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

a Lower

La toLower funzione restituisce tutto il testo in lettere minuscole.

Esempio

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

a TOUPPER

La toUpper funzione restituisce tutto il testo in maiuscolo.

Esempio

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

reReplaceAll

La reReplaceAll funzione sostituisce il testo corrispondente all'espressione regolare.

Esempio

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