Uso del lenguaje de plantillas de Go - 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.

Uso del lenguaje de plantillas de Go

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

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

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

Las plantillas de notificaciones se escriben en el lenguaje de plantillas de Go, texto/plantilla.

Esta sección proporciona una descripción general del lenguaje de plantillas de Go y las plantillas de escritura en texto/plantilla.

Punto

En el texto/plantilla hay un cursor especial llamado punto y se escribe como. . Puede pensar en este cursor como una variable cuyo valor cambia según el lugar de la plantilla en el que se utilice. Por ejemplo, al principio de una plantilla de notificación . se refiere al ExtendedData objeto, que contiene varios campos, entre los que se incluyen Alerts StatusGroupLabels,CommonLabels, CommonAnnotations yExternalURL. Sin embargo, el punto puede hacer referencia a otra cosa cuando se usa en una range lista, cuando se usa dentro de una with o cuando se escriben plantillas de funciones para usarlas en otras plantillas. Puede ver ejemplos de esto en Crear plantillas de notificaciones y todos los datos y funciones deReferencia de la 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 valor de un punto, un campo de punto, el resultado de una función y el valor de una variable. Por ejemplo, para imprimir el Alerts campo al que hace referencia el punto, ExtendedData escribiría lo siguiente:

{{ .Alerts }}

Repite las alertas

Para imprimir solo las etiquetas de cada alerta, en lugar de toda la información sobre la alerta, puedes usar range a para iterar las alertas en: ExtendedData

{{ range .Alerts }} {{ .Labels }} {{ end }}

Dentro del rango, el punto ya no se refiere aExtendedData, sino a unAlert. Puede utilizar {{ .Labels }} para imprimir las etiquetas de cada alerta. Esto funciona porque {{ range .Alerts }} cambia un punto para hacer referencia a la alerta actual de la lista de alertas. Cuando el rango termina, el punto se restablece al valor que tenía antes del inicio del rango, que en este ejemplo esExtendedData:

{{ range .Alerts }} {{ .Labels }} {{ end }} {{/* does not work, .Labels does not exist here */}} {{ .Labels }} {{/* works, cursor was reset */}} {{ .Status }}

Repite sobre anotaciones y etiquetas

Vamos a escribir una plantilla para imprimir las etiquetas de cada alerta en el formato The name of the label is $name, and the value is $value que $value contenga el nombre $name y el valor de cada etiqueta.

Como en el ejemplo anterior, utilice un rango para recorrer las alertas de forma que el punto haga referencia a la alerta actual de la lista de alertas y, a continuación, utilice un segundo rango en las etiquetas ordenadas para que el punto se actualice por segunda vez para hacer referencia a la etiqueta actual. .Alerts Dentro del segundo rango, utilice .Name e .Value imprima el nombre y el valor de cada etiqueta:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} The name of the label is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ range .Annotations.SortedPairs }} The name of the annotation is {{ .Name }}, and the value is {{ .Value }} {{ end }} {{ end }}

Las funciones de índice

Para imprimir una anotación o etiqueta específica, utilice la index función.

{{ range .Alerts }} The name of the alert is {{ index .Labels "alertname" }} {{ end }}

Si: declaraciones

Puede usar las instrucciones if en las plantillas. Por ejemplo, para imprimir There are no alerts si no hay alertas, .Alerts escribiría lo siguiente:

{{ if .Alerts }} There are alerts {{ else }} There are no alerts {{ end }}

Con

Con es similar a las declaraciones if, sin embargo, a diferencia de las declaraciones if, with las actualizaciones puntean para referirse al valor de with:

{{ with .Alerts }} There are {{ len . }} alert(s) {{ else }} There are no alerts {{ end }}

Variables

Las variables del texto/plantilla deben crearse dentro de la plantilla. Por ejemplo, para crear una variable llamada $variable con el valor actual de punto, escribiría lo siguiente:

{{ $variable := . }}

Puede utilizarla $variable dentro de un rango o with y se referirá al valor del punto en el momento en que se definió la variable, no al valor actual del punto.

Por ejemplo, no puede escribir una plantilla que se utilice {{ .Labels }} en el segundo rango porque aquí el punto se refiere a la etiqueta actual, no a la alerta actual:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* does not work because in the second range . is a label not an alert */}} There are {{ len .Labels }} {{ end }} {{ end }}

Para solucionar este problema, defina una variable llamada $alert en el primer rango y antes del segundo rango:

{{ range .Alerts }} {{ $alert := . }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{/* works because $alert refers to the value of dot inside the first range */}} There are {{ len $alert.Labels }} {{ end }} {{ end }}

Rango con índice

Puede obtener el índice de cada alerta dentro de un rango definiendo las variables de índice y valor al principio del rango:

{{ $num_alerts := len .Alerts }} {{ range $index, $alert := .Alerts }} This is alert {{ $index }} out of {{ $num_alerts }} {{ end }}

Defina plantillas

Puede definir plantillas que se puedan utilizar dentro de otras plantillas, utilizando define el nombre de la plantilla entre comillas dobles. No debe definir plantillas con el mismo nombre que otras plantillas, incluidas las plantillas predeterminadas__subject, como __text_values_list__text_alert_list, default.title ydefault.message. Si se ha creado una plantilla con el mismo nombre que una plantilla predeterminada, o una plantilla en otra plantilla de notificaciones, Grafana puede utilizar cualquiera de las dos plantillas. Grafana no impide ni muestra un mensaje de error cuando hay dos o más plantillas con el mismo nombre.

{{ define "print_labels" }} {{ end }}

Ejecuta plantillas

Puede ejecutar la plantilla definida dentro de su plantilla utilizando template el nombre de la plantilla entre comillas dobles y el cursor que debe pasar a la plantilla:

{{ template "print_labels" . }}

Pase los datos a las plantillas

Dentro de una plantilla, un punto hace referencia al valor que se pasa a la plantilla.

Por ejemplo, si a una plantilla se le pasa una lista de alertas de activación, el punto se refiere a esa lista de alertas de activación:

{{ template "print_alerts" .Alerts }}

Si a la plantilla se le pasan las etiquetas ordenadas de una alerta, el punto hace referencia a la lista de etiquetas ordenadas:

{{ template "print_labels" .SortedLabels }}

Esto resulta útil a la hora de escribir plantillas reutilizables. Por ejemplo, para imprimir todas las alertas, puede escribir lo siguiente:

{{ template "print_alerts" .Alerts }}

Luego, para imprimir solo las alertas de activación, puede escribir lo siguiente:

{{ template "print_alerts" .Alerts.Firing }}

Esto funciona porque ambas .Alerts .Alerts.Firing son listas de alertas.

{{ define "print_alerts" }} {{ range . }} {{ template "print_labels" .SortedLabels }} {{ end }} {{ end }}

Comentarios

Puede añadir comentarios con {{/* y*/}}:

{{/* This is a comment */}}

Para evitar que los comentarios añadan saltos de línea, utilice:

{{- /* This is a comment with no leading or trailing line breaks */ -}}

Insangría

Puedes usar sangrados, tanto tabulaciones como espacios, y saltos de línea para que las plantillas sean más legibles:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

Sin embargo, la sangría de la plantilla también estará presente en el texto. A continuación, veremos cómo eliminarlo.

Elimina los espacios y saltos de línea

Use texto o plantilla {{- y -}} para eliminar los espacios iniciales y finales y los saltos de línea.

Por ejemplo, cuando se utilizan hendiduras y saltos de línea para hacer que una plantilla sea más legible:

{{ range .Alerts }} {{ range .Labels.SortedPairs }} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

La hendidura y los saltos de línea también estarán presentes en el texto:

alertname = "Test" grafana_folder = "Test alerts"

Puede eliminar las hendiduras y los saltos de línea del texto }} al -}} principio de cada rango:

{{ range .Alerts -}} {{ range .Labels.SortedPairs -}} {{ .Name }} = {{ .Value }} {{ end }} {{ end }}

La hendidura y los saltos de línea de la plantilla ahora no aparecen en el texto:

alertname = "Test" grafana_folder = "Test alerts"