Creación de plantillas de etiquetas y anotaciones - Amazon Managed Grafana

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de plantillas de etiquetas y anotaciones

Este tema de documentación está diseñado para los espacios de trabajo de Grafana que admiten la versión 9.x de Grafana.

Para ver los espacios de trabajo de Grafana que admiten la versión 10.x de Grafana, consulte. Trabajando en Grafana versión 10

Para ver los espacios de trabajo de Grafana que admiten la versión 8.x de Grafana, consulte. Trabajando en Grafana versión 8

En Grafana, puedes crear plantillas de etiquetas y anotaciones como lo harías en Prometheus. Si ha utilizado Prometheus anteriormente, debe estar familiarizado con las variables $value y, que contienen $labels las etiquetas y el valor de la alerta. Puedes usar las mismas variables en Grafana, incluso si la alerta no usa una fuente de datos de Prometheus. Si no ha utilizado Prometheus antes, no se preocupe, ya que cada una de estas variables y cómo modelarlas se explicarán a medida que siga el resto de esta página.

El lenguaje de plantillas de Go

Las plantillas para etiquetas y anotaciones están escritas en el lenguaje de plantillas de Go, texto/plantilla.

Abrir y cerrar etiquetas

En el caso del texto/plantilla, las plantillas comienzan por {{ y terminan por, }} independientemente de si la plantilla imprime una variable o ejecuta estructuras de control, como las sentencias if. Esto es diferente de otros lenguajes de creación de plantillas, como Jinja, donde la impresión de una variable usa {{ y las estructuras de control usan }} y. {% %}

Print (Imprimir)

Para imprimir el valor de algo, usa {{ y. }} Puede imprimir el resultado de una función o el valor de una variable. Por ejemplo, para imprimir la $labels variable, escribiría lo siguiente:

{{ $labels }}

Repite sobre las etiquetas

Para iterar sobre cada etiqueta, $labels puede usar un. range Aquí $k se refiere al nombre y $v al valor de la etiqueta actual. Por ejemplo, si su consulta devolviera una etiquetainstance=test, entonces $k $v sería instance y seríatest.

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

Las etiquetas, el valor y las variables de valores

La variable de etiquetas

La $labels variable contiene las etiquetas de la consulta. Por ejemplo, una consulta que compruebe si una instancia está inactiva podría devolver una etiqueta de instancia con el nombre de la instancia inactiva. Por ejemplo, supongamos que tienes una regla de alerta que se activa cuando una de tus instancias ha estado inactiva durante más de 5 minutos. Desea añadir un resumen a la alerta que le indique qué instancia está inactiva. Con la $labels variable, puedes crear un resumen que imprima la etiqueta de la instancia en el resumen:

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

Etiquetas con puntos

Si la etiqueta que quieres imprimir contiene un punto (punto o punto) en su nombre, usar el mismo punto en la plantilla no funcionará:

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

Esto se debe a que la plantilla intenta utilizar un campo inexistente llamado name in$labels.instance. En su lugar, debe usar la index función, que imprime la etiqueta instance.name en la $labels variable:

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

La variable de valor

La $value variable funciona de forma diferente a Prometheus. En $value Prometheus es un número de punto flotante que contiene el valor de la expresión, pero en Grafana es una cadena que contiene las etiquetas y los valores de todas las expresiones Threshold, Reduce y Math, y las condiciones clásicas para esta regla de alerta. No contiene los resultados de las consultas, ya que pueden arrojar entre 10 y 10 000 filas o métricas.

Si utilizara la $value variable en el resumen de una alerta:

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

El resumen podría tener un aspecto similar al siguiente:

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

Aquí var='B' se refiere a la expresión con el RefID B. En Grafana, todas las consultas y expresiones se identifican mediante un RefID que identifica cada consulta y expresión en una regla de alerta. Del mismo modo, labels={service=api} se refiere a las etiquetas y value=6.789 hace referencia al valor.

Puede que haya observado que no hay ningún RefID A. Esto se debe a que en la mayoría de las reglas de alerta el RefID A se refiere a una consulta y, dado que las consultas pueden devolver muchas filas o series temporales, no están incluidas en ellas. $value

La variable de valores

Si la $value variable contiene más información de la que necesita, puede imprimir las etiquetas y el valor de las expresiones individuales utilizando$values. A diferencia de esto$value, la $values variable es una tabla de objetos que contiene las etiquetas y los valores de punto flotante de cada expresión, indexados por su RefID.

Si tuviera que imprimir el valor de la expresión con RefID B en el resumen de la alerta:

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

El resumen contendrá solo el valor:

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

Sin embargo, si bien {{ $values.B }} imprime el número 6.789, en realidad se trata de una cadena, ya que se imprime el objeto que contiene las etiquetas y el valor de RefID B, no el valor de coma flotante de B. Para utilizar el valor de coma flotante de RefID B, debe utilizar el Value campo de. $values.B Si tuviera que humanizar el valor de coma flotante en el resumen de una alerta:

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

Sin datos, errores de tiempo de ejecución y tiempos de espera

Si la consulta de la regla de alerta no devuelve datos o se produce un error debido a un error en la fuente de datos o a un tiempo de espera, cualquier expresión de Threshold, Reduce o Math que utilice esa consulta tampoco devolverá ningún dato o mostrará un error. Cuando esto suceda, estas expresiones no aparecerán en. $values Se recomienda comprobar que haya un RefID antes de usarlo, ya que, de lo contrario, la plantilla se estropeará si la consulta no devuelve ningún dato o se produce un error. Puedes hacerlo usando una sentencia if:

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

Condiciones clásicas

Si la regla usa condiciones clásicas en lugar de expresiones Threshold, Reduce y Math, la $values variable se indexa según el identificador de referencia y la posición de la condición en la condición clásica. Por ejemplo, si tiene una condición clásica en la que el RefID B contiene dos condiciones, $values contendrá dos condiciones B0 y. B1

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

Funciones

Las siguientes funciones también están disponibles al expandir etiquetas y anotaciones:

args

La args función traduce una lista de objetos a un mapa con las claves arg0, arg1, etc. El objetivo es permitir que se pasen varios argumentos a las plantillas.

Ejemplo

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

URL externa

La externalURL función devuelve la URL externa del servidor Grafana tal como está configurada en los archivos ini.

Ejemplo

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

GraphLink

La graphLink función devuelve la ruta a la vista gráfica Explora en Grafana versión 9 para la expresión y la fuente de datos dadas.

Ejemplo

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

humanizar

La humanize función humaniza los números decimales.

Ejemplo

{{ humanize 1000.0 }}
1k

humaniza 1024

humanize1024Funciona de manera similarhumanize, pero usa 1024 como base en lugar de 1000.

Ejemplo

{{ humanize1024 1024.0 }}
1ki

Humaniza la duración

La humanizeDuration función humaniza una duración en segundos.

Ejemplo

{{ humanizeDuration 60.0 }}
1m 0s

Humaniza el porcentaje

La humanizePercentage función humaniza un valor de proporción a un porcentaje.

Ejemplo

{{ humanizePercentage 0.2 }}
20%

Humaniza la marca de tiempo

La humanizeTimestamp función humaniza una marca de tiempo de Unix.

Ejemplo

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

partido

La match función compara el texto con un patrón de expresión regular.

Ejemplo

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

Prefijo de ruta

La pathPrefix función devuelve la ruta del servidor Grafana tal como está configurada en los archivos ini.

Ejemplo

{{ pathPrefix }}
/grafana

Enlace de tabla

La tableLink función devuelve la ruta a la vista tabular Explora en Grafana versión 9 para la expresión y la fuente de datos determinadas.

Ejemplo

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

title

La title función pone en mayúscula el primer carácter de cada palabra.

Ejemplo

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

A Lower

La toLower función devuelve todo el texto en minúsculas.

Ejemplo

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

a Toupper

La toUpper función devuelve todo el texto en mayúsculas.

Ejemplo

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

reReplaceAll

La reReplaceAll función reemplaza el texto que coincide con la expresión regular.

Ejemplo

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