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 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
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
Status
GroupLabels
,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 }}
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 }}
Inserta plantillas
Puede incrustar una plantilla definida en 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"