Go의 템플릿 언어 사용 - Amazon Managed Grafana

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Go의 템플릿 언어 사용

이 설명서 항목은 Grafana 버전 9.x를 지원하는 Grafana 작업 영역을 위해 설계되었습니다.

Grafana 버전 10.x를 지원하는 Grafana 작업 영역에 대한 내용은 을 참조하십시오. Grafana 버전 10에서 작업하기

Grafana 버전 8.x를 지원하는 Grafana 작업 영역에 대한 내용은 을 참조하십시오. Grafana 버전 8에서 작업하기

Go의 템플릿 언어인 텍스트/템플릿으로 알림 템플릿을 작성합니다.

이 섹션에서는 Go의 템플릿 언어 및 텍스트/템플릿으로 템플릿을 작성하는 방법에 대한 개요를 제공합니다.

도트

텍스트/템플릿에는 도트라는 특수 커서가 있으며, 이 커서는 다음과 같이 작성됩니다. . 이 커서는 템플릿에서 사용되는 위치에 따라 값이 변하는 변수로 생각할 수 있습니다. 예를 들어, 알림 템플릿의 시작 부분에는, Alerts Status GroupLabelsCommonLabels, CommonAnnotations 및 등의 여러 필드가 포함된 ExtendedData 객체를 . ExternalURL 참조합니다. 그러나 dot는 range 오버 목록에서 사용될 때, 내에서 사용될 때 또는 다른 템플릿에서 사용할 기능 템플릿을 작성할 때는 다른 것을 의미할 수 있습니다. with 에서 이에 대한 예를 볼 수 알림 템플릿 생성 있고 에서 모든 데이터와 함수를 볼 수 템플릿 참조 있습니다.

태그 열기 및 닫기

텍스트/템플릿에서 템플릿은 템플릿이 변수를 인쇄하는지 또는 if {{ 문과 같은 제어 구조를 실행하는지에 }} 관계없이 로 시작하고 끝납니다. 이는 변수를 인쇄할 때 and와 제어 구조에서 {{}} 를 사용하는 Jinja와 같은 다른 템플릿 언어와는 다릅니다. {% %}

인쇄

값을 출력하려면 및 를 사용하십시오. {{ }} 점 값, 점 필드, 함수 결과 및 변수 값을 인쇄할 수 있습니다. 예를 들어, 점이 참조하는 Alerts 필드를 ExtendedData 인쇄하려면 다음과 같이 작성해야 합니다.

{{ .Alerts }}

알림을 반복해서 살펴보세요.

알림에 대한 모든 정보가 아닌 각 알림의 레이블만 인쇄하려면 range a를 사용하여 다음에서 알림을 반복할 수 있습니다. ExtendedData

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

범위 안의 점은 더 이상 an을 가리키는 것이 ExtendedData 아니라 Alert an을 가리킵니다. 를 {{ .Labels }} 사용하여 각 경고의 레이블을 인쇄할 수 있습니다. 이는 경고 목록에 있는 현재 경고를 참조하도록 점을 {{ range .Alerts }} 변경하기 때문에 효과가 있습니다. 범위가 끝나면 점이 범위 시작 이전의 값으로 재설정됩니다. 이 예에서는 ExtendedData 다음과 같습니다.

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

주석과 레이블을 반복해서 살펴보세요.

각 경고의 레이블을 각 레이블의 이름과 값을 $value 포함하는 형식으로 The name of the label is $name, and the value is $value 인쇄하는 $name 템플릿을 작성해 보겠습니다.

이전 .Alerts 예제와 마찬가지로 범위를 사용하여 점이 경고 목록의 현재 경고를 참조하도록 경고를 반복한 다음 정렬된 레이블에서 두 번째 범위를 사용하여 점이 현재 레이블을 참조하도록 두 번째 업데이트되도록 합니다. 두 번째 범위에서는 .Value and를 사용하여 .Name 각 레이블의 이름과 값을 인쇄합니다.

{{ 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 }}

if 명령문

템플릿에서 if 문을 사용할 수 있습니다. 예를 들어 경고가 없는 There are no alerts 경우 .Alerts 인쇄하려면 다음과 같이 작성합니다.

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

다음과 같이

With는 if 문과 비슷하지만 if 문과 달리 with 업데이트는 with의 값을 참조하기 위해 점을 사용합니다.

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

Variables

텍스트/템플릿의 변수는 템플릿 내에 생성해야 합니다. 예를 들어, 현재 값인 $variable 점으로 호출된 변수를 만들려면 다음과 같이 작성합니다.

{{ $variable := . }}

범위 $variable 내에서 or를 사용할 수 with 있으며, 이 값은 점의 현재 값이 아니라 변수가 정의된 시점의 도트 값을 참조합니다.

예를 들어, 두 번째 {{ .Labels }} 범위에서 사용하는 템플릿은 작성할 수 없습니다. 여기서 점은 현재 경고가 아니라 현재 레이블을 의미하기 때문입니다.

{{ 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 }}

첫 번째 범위와 두 번째 범위 이전에 $alert 호출되는 변수를 정의하여 이 문제를 해결할 수 있습니다.

{{ 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 }}

색인이 있는 범위

범위 시작 부분에 인덱스 및 값 변수를 정의하여 범위 내 각 경고의 인덱스를 가져올 수 있습니다.

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

템플릿을 정의합니다.

템플릿 이름을 큰따옴표로 묶어 다른 템플릿 내에서 사용할 수 있는 템플릿을 정의할 수 있습니다. define ,, default.titledefault.message 같은 기본 템플릿을 포함하여 다른 템플릿과 같은 이름을 가진 템플릿을 정의해서는 안 됩니다. __subject __text_values_list __text_alert_list 기본 템플릿과 동일한 이름으로 템플릿이 생성되거나 다른 알림 템플릿의 템플릿이 생성된 경우 Grafana는 두 템플릿 중 하나를 사용할 수 있습니다. Grafana는 이름이 같은 템플릿이 두 개 이상 있는 경우 이를 방지하거나 오류 메시지를 표시하지 않습니다.

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

임베드 템플릿

템플릿 이름을 큰따옴표로 묶고 템플릿에 전달해야 하는 커서를 사용하여 template 정의된 템플릿을 템플릿 내에 삽입할 수 있습니다.

{{ template "print_labels" . }}

템플릿에 데이터 전달

템플릿 내에서 점은 템플릿에 전달되는 값을 나타냅니다.

예를 들어 템플릿에 발생 경고 목록이 전달되면 점은 해당 발생 경고 목록을 나타냅니다.

{{ template "print_alerts" .Alerts }}

템플릿에 경고의 정렬된 레이블이 전달되면 점은 정렬된 레이블 목록을 나타냅니다.

{{ template "print_labels" .SortedLabels }}

이는 재사용 가능한 템플릿을 작성할 때 유용합니다. 예를 들어 모든 알림을 인쇄하려면 다음과 같이 작성할 수 있습니다.

{{ template "print_alerts" .Alerts }}

그런 다음 발사 알림만 인쇄하려면 다음과 같이 작성할 수 있습니다.

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

이 방법은 이 두 .Alerts.Firing 가지가 모두 .Alerts 경고 목록이기 때문에 효과가 있습니다.

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

설명

{{/*및 를 사용하여 댓글을 추가할 수 있습니다*/}}.

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

댓글에 줄 바꿈이 추가되지 않도록 하려면 다음을 사용하세요.

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

들여쓰기

탭과 공백 모두 들여쓰기, 줄 바꿈을 사용하여 템플릿을 더 읽기 쉽게 만들 수 있습니다.

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

하지만 템플릿의 들여쓰기는 텍스트에도 표시됩니다. 다음으로 삭제 방법을 살펴보겠습니다.

공백 및 줄 바꿈 제거

텍스트/템플릿에서 를 사용하여 -}} 선행 {{- 및 후행 공백과 줄 바꿈을 제거합니다.

예를 들어, 템플릿의 가독성을 높이기 위해 들여쓰기와 줄 바꿈을 사용하는 경우

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

들여쓰기 및 줄 바꿈은 텍스트에도 표시됩니다.

alertname = "Test" grafana_folder = "Test alerts"

각 범위의 시작 부분으로 }} 변경되는 텍스트에서 들여쓰기 및 줄 바꿈을 제거할 수 있습니다. -}}

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

이제 템플릿의 들여쓰기 및 줄 바꿈이 텍스트에 표시되지 않습니다.

alertname = "Test" grafana_folder = "Test alerts"