

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

# 알림 사용자 지정
<a name="v9-alerting-notifications"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

알림 템플릿을 사용하여 알림을 사용자 지정합니다.

알림 템플릿을 사용하여 알림에서 메시지의 제목, 메시지 및 형식을 변경할 수 있습니다.

알림 템플릿은 이메일 또는 Slack과 같은 특정 연락 지점 통합과 연결되지 않습니다. 그러나 서로 다른 연락 지점 통합을 위한 별도의 알림 템플릿을 생성하도록 선택할 수 있습니다.

알림 템플릿을 사용하여 다음을 수행할 수 있습니다.
+ 요약, 설명, 레이블 및 주석, 값 및 링크를 포함하여 알림에서 정보를 추가, 제거 또는 재정렬합니다.
+ 텍스트를 굵은 기울임꼴 서식으로 지정하고 줄 바꿈 추가 또는 제거

알림 템플릿을 사용하여 다음을 수행할 수 없습니다.
+ Slack 및 Microsoft Teams와 같은 인스턴트 메시징 서비스의 알림 설계 변경

**Topics**
+ [Go의 템플릿 지정 언어 사용](v9-alerting-notifications-go-templating.md)
+ [알림 템플릿 생성](v9-alerting-create-templates.md)
+ [템플릿 참조](v9-alerting-template-reference.md)

# Go의 템플릿 지정 언어 사용
<a name="v9-alerting-notifications-go-templating"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

알림 템플릿을 Go의 템플릿 지정 언어인 [text/template](https://pkg.go.dev/text/template)으로 작성합니다.

이 섹션에서는 Go의 템플릿 지정 언어에 대한 개요와 text/template에서 템플릿을 작성하는 방법을 제공합니다.

## 점
<a name="v9-go-dot"></a>

text/template에는 점(dot)이라는 특수 커서가 있습니다(`.`로 씀). 이 커서는 사용되는 템플릿의 위치에 따라 값이 변경되는 변수로 간주할 수 있습니다. 예를 들어 알림 템플릿의 시작 부분에서 `.`은 `ExtendedData` 객체를 참조합니다. 여기에서는 `Alerts`, `Status`, `GroupLabels`, `CommonLabels`, `CommonAnnotations`, `ExternalURL`을 포함하여 여러 필드를 포함합니다. 그러나 점은 목록의 `range`에서 사용할 때, `with`에서 사용할 때 또는 다른 템플릿에서 사용할 기능 템플릿을 작성할 때 다른 항목을 참조할 수 있습니다. [알림 템플릿 생성](v9-alerting-create-templates.md)에서 이에 대한 예제를 확인할 수 있으며, [템플릿 참조](v9-alerting-template-reference.md)에서 모든 데이터 및 함수를 확인할 수 있습니다.

## 여는 태그 및 닫는 태그
<a name="v9-go-openclosetags"></a>

text/template에서 템플릿은 템플릿이 변수를 인쇄하는지 여부와 if 문과 같이 제어 구조를 실행하는지 여부에 관계없이 `{{`로 시작하고 `}}`로 끝납니다. Jinja(변수를 인쇄할 때 `{{` 및 `}}`를 사용하고 제어 구조에서 `{%` 및 `%}`를 사용함)와 같은 다른 템플릿 지정 언어와는 다릅니다.

## 인쇄
<a name="v9-go-print"></a>

무언가의 값을 인쇄하려면 `{{` 및 `}}`를 사용합니다. 점 값, 점 필드, 함수 결과 및 [변수](#v9-go-variables) 값을 인쇄할 수 있습니다. 예를 들어 점이 `ExtendedData`를 참조하는 `Alerts` 필드를 인쇄하려면 다음과 같이 작성합니다.

```
{{ .Alerts }}
```

## 알림에 대한 반복
<a name="v9-go-iterate-alerts"></a>

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

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

범위 내에서 점은 더 이상 `ExtendedData`를 참조하지 않고 `Alert`를 참조합니다. `{{ .Labels }}`를 사용하여 각 알림의 레이블을 인쇄할 수 있습니다. `{{ range .Alerts }}`에서 알림 목록의 현재 알림을 참조하도록 점을 변경하기 때문에 이러한 방식이 작동합니다. 범위가 완성되면 범위가 시작되기 전에 사용했던 값으로 점이 재설정됩니다(이 예제에서 `ExtendedData`).

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

## 주석 및 레이블에 대한 반복
<a name="v9-go-iterate-labels"></a>

`The name of the label is $name, and the value is $value` 형식으로 각 알림의 레이블을 인쇄하도록 템플릿을 작성합니다. 여기서 `$name` 및 `$value`에는 각 레이블의 이름 및 값이 포함됩니다.

이전 예제와 마찬가지로 점을 사용하여 `.Alerts`에서 알림에 대해 반복합니다. 이때 점은 알림 목록에서 현재 알림을 참조합니다. 그리고 정렬된 레이블에서 두 번째 범위를 사용합니다. 이때 두 번째로 현재 레이블을 참조할 때 점이 업데이트됩니다. 두 번째 범위 내에서 `.Name` 및 `.Value`를 사용하여 각 레이블의 이름 및 값을 인쇄합니다.

```
{{ 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 문
<a name="v9-go-if"></a>

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

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

## With
<a name="v9-go-with"></a>

With는 if 문과 유사하지만, if 문과 달리 `with`에서는 with에서의 값을 참조하기 위해 점을 업데이트합니다.

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

## 변수
<a name="v9-go-variables"></a>

text/template의 변수는 템플릿 내에서 생성해야 합니다. 예를 들어 점의 현재 값을 사용해 `$variable` 변수를 생성하려면 다음을 작성합니다.

```
{{ $variable := . }}
```

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

예를 들어 두 번째 범위에서 `{{ .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 }}
```

## 인덱스가 있는 범위
<a name="v9-go-rangeindex"></a>

범위 시작 위치에서 인덱스 및 값 변수를 정의하여 범위 내 각 알림의 인덱스를 가져올 수 있습니다.

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

## 템플릿 정의
<a name="v9-go-define"></a>

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

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

## 템플릿 임베드
<a name="v9-go-embed"></a>

`template`, 템플릿 이름(큰따옴표로 묶음), 템플릿에 전달해야 하는 커서를 사용하여 템플릿 내에서 정의된 템플릿을 임베드할 수 있습니다.

```
{{ template "print_labels" . }}
```

## 템플릿에 데이터 전달
<a name="v9-go-passdata"></a>

템플릿 내에서 점은 템플릿에 전달되는 값을 참조합니다.

예를 들어 템플릿에 실행 알림 목록이 전달되면 점에서는 해당 실행 알림 목록을 나타냅니다.

```
{{ template "print_alerts" .Alerts }}
```

템플릿에 알림에 대해 정렬된 레이블이 전달되면 점은 정렬된 레이블 목록을 참조합니다.

```
{{ template "print_labels" .SortedLabels }}
```

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

```
{{ template "print_alerts" .Alerts }}
```

그런 다음, 실행 알림만 인쇄하려면 다음을 작성하면 됩니다.

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

`.Alerts` 및 `.Alerts.Firing`이 모두 알림 목록이므로 이 방식이 가능합니다.

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

## 설명
<a name="v9-go-comments"></a>

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

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

설명에 줄 바꿈을 추가하지 못하도록 하려면 다음을 사용합니다.

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

## 들여쓰기
<a name="v9-go-indentation"></a>

탭과 공백, 줄 바꿈에서 모두 들여쓰기를 사용하여 템플릿의 가독성을 개선할 수 있습니다.

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

그러나 템플릿의 들여쓰기는 텍스트에도 표시됩니다. 다음으로 이를 제거하는 방법을 살펴봅니다.

## 공백 및 줄 바꿈 제거
<a name="v9-go-removespace"></a>

text/template에서 `{{-` 및 `-}}`를 사용하여 선행 및 후행 공백과 줄 바꿈을 제거합니다.

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

```
{{ 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"
```

# 알림 템플릿 생성
<a name="v9-alerting-create-templates"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

연락 지점으로 전송할 재사용 가능한 알림 템플릿을 생성합니다.

알림 템플릿에 하나 이상의 템플릿을 추가할 수 있습니다.

알림 템플릿 이름은 고유해야 합니다. 동일한 알림 템플릿 또는 다른 알림 템플릿에서 이름이 같은 두 개의 템플릿을 사용할 수 없습니다. `__subject`, `__text_values_list`, `__text_alert_list`, `default.title`, `default.message`와 같이 기본 템플릿과 이름이 같은 템플릿을 정의하지 마세요.

연락 지점 탭에서 알림 템플릿 목록을 볼 수 있습니다.

## 알림 템플릿 생성
<a name="v9-alerting-creating-templates"></a>

**알림 템플릿을 생성하는 방법**

1. **템플릿 추가**를 클릭하세요.

1. `email.subject`와 같은 알림 템플릿의 이름을 선택하세요.

1. 콘텐츠 필드에서 템플릿의 콘텐츠를 작성하세요.

   예제:

   ```
   {{ if .Alerts.Firing -}}
      {{ len .Alerts.Firing }} firing alerts
      {{ end }}
      {{ if .Alerts.Resolved -}}
      {{ len .Alerts.Resolved }} resolved alerts
      {{ end }}
   ```

1. 저장을 클릭합니다.

   `{{ define "email.subject" }}`(여기서 `email.subject`는 템플릿의 이름임) 및 `{{ end }}`는 콘텐츠의 시작과 끝에 자동으로 추가됩니다.

**둘 이상의 템플릿이 포함된 알림 템플릿을 생성하는 방법:**

1. **템플릿 추가**를 클하세요.

1. 전체 알림 템플릿의 이름을 입력하세요. 예를 들어 `email`입니다.

1. 각 템플릿의 시작과 끝에 있는 `{{ define "name-of-template" }}` 및 `{{ end }}`를 포함하여 콘텐츠 필드에서 각 템플릿을 작성하세요. 알림 템플릿의 각 템플릿에 대해 설명이 포함된 이름(예: `email.subject` 또는 `email.message`)을 사용할 수 있습니다. 이 경우 위에 입력한 알림 템플릿의 이름을 재사용하지 마세요.

   다음 섹션에서는 생성할 수 있는 템플릿에 대한 자세한 예제를 보여줍니다.

1. 저장을 클릭합니다.

## 이메일 제목에 대한 템플릿 생성
<a name="v9-alerting-create-template-subject"></a>

이 예제와 같이 실행 알림 및 해결된 알림 수가 포함된 이메일 제목에 대한 템플릿을 생성합니다.

```
1 firing alerts, 0 resolved alerts
```

**이메일 제목에 대한 템플릿을 생성하는 방법**

1. 다음 콘텐츠로 `email.subject`라는 템플릿을 생성하세요.

   ```
   {{ define "email.subject" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. `template` 키워드를 **제목** 필드에 입력하여 연락 지점 통합을 생성할 때 템플릿을 사용하세요.

   ```
   {{ template "email.subject" . }}
   ```

## 이메일 메시지에 대한 템플릿 생성
<a name="v9-alerting-create-template-message"></a>

이 예제와 같이 모든 실행 알림 및 해결된 알림의 요약이 포함된 이메일 메시지 템플릿을 생성합니다.

```
There are 2 firing alerts, and 1 resolved alerts

Firing alerts:

- alertname=Test 1 grafana_folder=GrafanaCloud has value(s) B=1
- alertname=Test 2 grafana_folder=GrafanaCloud has value(s) B=2

Resolved alerts:

- alertname=Test 3 grafana_folder=GrafanaCloud has value(s) B=0
```

**이메일 메시지에 대한 템플릿을 생성하는 방법**

1. 콘텐츠에 두 개의 템플릿(`email.message_alert` 및 `email.message`)을 포함하는 `email` 알림 템플릿을 생성하세요.

   `email.message_alert` 템플릿은 각 실행 알림과 해결된 알림에 대한 레이블 및 값을 인쇄하는 데 사용되고, `email.message` 템플릿은 이메일 구조를 포함합니다.

   ```
   {{- define "email.message_alert" -}}
   {{- range .Labels.SortedPairs }}{{ .Name }}={{ .Value }} {{ end }} has value(s)
   {{- range $k, $v := .Values }} {{ $k }}={{ $v }}{{ end }}
   {{- end -}}
   
   {{ define "email.message" }}
   There are {{ len .Alerts.Firing }} firing alerts, and {{ len .Alerts.Resolved }} resolved alerts
   
   {{ if .Alerts.Firing -}}
   Firing alerts:
   {{- range .Alerts.Firing }}
   - {{ template "email.message_alert" . }}
   {{- end }}
   {{- end }}
   
   {{ if .Alerts.Resolved -}}
   Resolved alerts:
   {{- range .Alerts.Resolved }}
   - {{ template "email.message_alert" . }}
   {{- end }}
   {{- end }}
   
   {{ end }}
   ```

1. `template` 키워드를 **텍스트 본문** 필드에 입력하여 연락 지점 통합을 생성할 때 템플릿을 사용하세요.

   ```
   {{ template "email.message" . }}
   ```

## Slack 메시지 제목에 대한 템플릿 생성
<a name="v9-alerting-create-template-slack-title"></a>

다음 예제와 같이 실행 알림 및 해결된 알림 수를 포함하는 Slack 메시지의 제목에 대한 템플릿을 생성합니다.

```
1 firing alerts, 0 resolved alerts
```

**Slack 메시지 제목에 대한 템플릿을 생성하는 방법**

1. 다음 콘텐츠로 `slack.title`라는 템플릿을 생성하세요.

   ```
   {{ define "slack.title" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. `template` 키워드를 **제목** 필드에 입력하여 연락 지점 통합을 생성할 때 템플릿을 사용하세요.

   ```
   {{ template "slack.title" . }}
   ```

## Slack 메시지 콘텐츠에 대한 템플릿 생성
<a name="v9-alerting-create-template-slack-message"></a>

레이블, 주석 및 대시보드 URL을 포함하여 모든 실행 알림 및 해결된 알림에 대한 설명이 포함된 Slack 메시지의 콘텐츠에 대한 템플릿을 생성합니다.

```
1 firing alerts:

[firing] Test1
Labels:
- alertname: Test1
- grafana_folder: GrafanaCloud
Annotations:
- description: This is a test alert
Go to dashboard: https://example.com/d/dlhdLqF4z?orgId=1

1 resolved alerts:

[firing] Test2
Labels:
- alertname: Test2
- grafana_folder: GrafanaCloud
Annotations:
- description: This is another test alert
Go to dashboard: https://example.com/d/dlhdLqF4z?orgId=1
```

**Slack 메시지 콘텐츠에 대한 템플릿을 생성하는 방법**

1. 콘텐츠에 두 개의 템플릿(`slack.print_alert` 및 `slack.message`)을 포함하는 `slack` 템플릿을 생성하세요.

   `slack.print_alert` 템플릿은 레이블, 주석 및 DashboardURL을 인쇄하는 데 사용되는 반면 `slack.message` 템플릿에는 알림 구조가 포함되어 있습니다.

   ```
   {{ define "slack.print_alert" -}}
   [{{.Status}}] {{ .Labels.alertname }}
   Labels:
   {{ range .Labels.SortedPairs -}}
   - {{ .Name }}: {{ .Value }}
   {{ end -}}
   {{ if .Annotations -}}
   Annotations:
   {{ range .Annotations.SortedPairs -}}
   - {{ .Name }}: {{ .Value }}
   {{ end -}}
   {{ end -}}
   {{ if .DashboardURL -}}
     Go to dashboard: {{ .DashboardURL }}
   {{- end }}
   {{- end }}
   
   {{ define "slack.message" -}}
   {{ if .Alerts.Firing -}}
   {{ len .Alerts.Firing }} firing alerts:
   {{ range .Alerts.Firing }}
   {{ template "slack.print_alert" . }}
   {{ end -}}
   {{ end }}
   {{ if .Alerts.Resolved -}}
   {{ len .Alerts.Resolved }} resolved alerts:
   {{ range .Alerts.Resolved }}
   {{ template "slack.print_alert" .}}
   {{ end -}}
   {{ end }}
   {{- end }}
   ```

1. `template` 키워드를 **텍스트 본문** 필드에 입력하여 연락 지점 통합을 생성할 때 템플릿을 사용하세요.

   ```
   {{ template "slack.message" . }}
   ```

## 공유 템플릿으로 이메일 및 Slack 모두 템플릿 지정
<a name="v9-alerting-create-shared-templates"></a>

이메일 및 Slack과 같이 각 연락 지점에 대해 별도의 알림 템플릿을 생성하는 대신 동일한 템플릿을 공유할 수 있습니다.

예를 들어 이 제목의 이메일과 이 `1 firing alerts, 0 resolved alerts` 제목의 Slack 메시지를 보내려면 공유 템플릿을 생성할 수 있습니다.

**공유 템플릿을 생성하는 방법**

1. 다음 콘텐츠로 `common.subject_title`라는 템플릿을 생성하세요.

   ```
   {{ define "common.subject_title" }}
   {{ len .Alerts.Firing }} firing alerts, {{ len .Alerts.Resolved }} resolved alerts
   {{ end }}
   ```

1. 이메일의 경우 이메일 연락 지점 통합의 제목 필드에서 템플릿을 실행하세요.

   ```
   {{ template "common.subject_title" . }}
   ```

1. Slack의 경우 Slack 연락 지점 통합의 제목 필드에서 템플릿을 실행하세요.

   ```
   {{ template "common.subject_title" . }}
   ```

## 알림 템플릿 사용
<a name="v9-alerting-use-notification-templates"></a>

연락 지점의 템플릿을 사용하여 알림을 사용자 지정합니다.

**연락 지점을 생성할 때 템플릿을 사용하는 방법**

1. **알림** 메뉴에서 **연락 지점** 탭을 선택하여 기존 연락처 목록을 확인하세요.

1. **연락 지점 추가**를 선택하세요. 또는 편집하려는 연락 지점 옆에 있는 **편집** 아이콘(펜)을 선택하여 기존 연락 지점을 편집할 수 있습니다.

1. **메시지** 또는 **제목**과 같이 하나 이상의 필드에 사용하려는 템플릿을 입력하세요. 템플릿을 입력하려면 `{{ template "template_name" . }}` 양식을 사용하여 *template\$1name*을 사용하려는 템플릿 이름으로 바꾸세요.

1. **연락 지점 저장**을 클릭하세요.

# 템플릿 참조
<a name="v9-alerting-template-reference"></a>

****  
이 설명서 주제는 **Grafana 버전 9.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 8.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 8에서 작업](using-grafana-v8.md) 섹션을 참조하세요.

이 섹션에서는 템플릿을 생성하기 위한 참조 정보를 제공합니다.

## 템플릿 데이터
<a name="v9-alerting-template-data"></a>

다음 데이터가 메시지 템플릿에 전달됩니다.


| 이름 | Type | 참고 | 
| --- | --- | --- | 
|  `Receiver`  |  문자열  |  알림이 전송되는 연락 지점 이름.  | 
|  `Status`  |  문자열  |  하나 이상의 알림이 실행 중인 경우 실행이고, 그렇지 않으면 해결됨 상태입니다.  | 
|  `Alerts`  |  Alert  |  이 알림에 포함된 알림 객체 목록(아래 참조).  | 
|  `GroupLabels`  |  KeyValue  |  이러한 알림이 그룹화된 레이블.  | 
|  `CommonLabels`  |  KeyValue  |  이 알림에 포함된 모든 알림에 공통된 레이블.  | 
|  `CommonAnnotations`  |  KeyValue  |  이 알림에 포함된 모든 알림에 공통된 주석.  | 
|  `ExternalURL`  |  문자열  |  알림을 전송한 Grafana로 돌아가는 링크. 외부 Alertmanager를 사용하는 경우 이 Alertmanager로 돌아가는 링크.  | 

`Alerts` 유형은 반환된 알림을 필터링하기 위한 두 가지 함수를 노출합니다.
+ `Alerts.Firing` - 실행 알림 목록을 반환합니다.
+ `Alerts.Resolved` - 해결된 알림 목록을 반환합니다.

**알림(유형)**

알림 유형에는 다음 데이터가 포함됩니다.


| 이름 | Type | 참고 | 
| --- | --- | --- | 
|  Status  |  문자열  |  `firing` 또는 `resolved`  | 
|  레이블  |  KeyValue  |  알림에 연결된 레이블 세트.  | 
|  Annotations  |  KeyValue  |  알림에 연결된 주석 세트.  | 
| 값 | KeyValue | 클래식 조건을 포함한 모든 표현식의 값 | 
|  StartsAt  |  time.Time  |  알림 실행이 시작되는 시간.  | 
|  EndsAt  |  time.Time  |  알림의 종료 시간을 알고 있는 경우에만 설정합니다. 그렇지 않으면 마지막 알림이 수신된 이후부터 구성 가능한 제한 시간으로 설정됩니다.  | 
|  GeneratorURL  |  문자열  |  Grafana 또는 외부 Alertmanager에 대한 백 링크.  | 
|  SilenceURL  |  문자열  |  알림을 음소거하는 링크(이 알림에 대한 레이블이 미리 채워짐). Grafana 관리형 알림에만 적용됩니다.  | 
|  DashboardURL  |  문자열  |  알림 규칙이 하나에 속하는 경우 Grafana 대시보드에 대한 링크. Grafana 관리형 알림에만 적용됩니다.  | 
|  PanelURL  |  문자열  |  알림 규칙이 하나에 속하는 경우 Grafana 대시보드 패널에 대한 링크. Grafana 관리형 알림에만 적용됩니다.  | 
|  지문  |  문자열  |  알림을 식별하는 데 사용할 수 있는 지문.  | 
|  ValueString  |  문자열  |  알림에서 축소된 각 표현식의 레이블과 값을 포함하는 문자열.  | 

 **ExtendedData**

ExtendedData 객체는 다음 속성을 포함합니다.


| 이름 | 종류 | 설명 | 예제 | 
| --- | --- | --- | --- | 
|  수신기  |  `string`  |  알림을 보내는 연락 지점의 이름.  |  `{{ .Receiver }}`  | 
|  Status  |  `string`  |  상태가 `firing if at least one alert is firing, otherwise resolved.`입니다.  |  `{{ .Status }}`  | 
|  알림  |  `[]Alert`  |  이 알림에서 모든 실행 알림과 해결된 알림 목록.  |  `There are {{ len .Alerts }} alerts`  | 
|  실행 알림  |  `[]Alert`  |  이 알림에서 모든 실행 알림 목록.  |  `There are {{ len .Alerts.Firing }} firing alerts`  | 
|  해결된 알림  |  `[]Alert`  |  이 알림에서 모든 해결된 알림 목록.  |  `There are {{ len .Alerts.Resolved }} resolved alerts`  | 
|  GroupLabels  |  `KeyValue`  |  이 알림에서 이러한 알림을 그룹화하는 레이블.  |  `{{ .GroupLabels }}`  | 
|  CommonLabels  |  `KeyValue`  |  이 알림에서 모든 알림에 공통된 레이블.  |  `{{ .CommonLabels }}`  | 
|  CommonAnnotations  |  `KeyValue`  |  이 알림에서 모든 알림에 공통된 주석.  |  `{{ .CommonAnnotations }}`  | 
|  ExternalURL  |  `string`  |  이 알림을 보낸 Grafana 워크스페이스 또는 Alertmanager에 대한 링크.  |  `{{ .ExternalURL }}`  | 

**KeyValue 유형**

`KeyValue` 유형은 레이블과 주석을 나타내는 키/값 문자열 페어 세트입니다.

`KeyValue`로 저장된 데이터에 대한 직접 액세스 외에도 데이터를 정렬, 제거 및 변환하는 방법도 있습니다.


| 이름 | 인수 | 반환 | 참고 | 예제 | 
| --- | --- | --- | --- | --- | 
|  SortedPairs  |    |  키 및 값 문자열 페어의 정렬된 목록  |    | `{{ .Annotations.SortedPairs }}` | 
|  제거  |  []string  |  KeyValue  |  지정된 키 없이 키/값 맵의 사본을 반환합니다.  | `{{ .Annotations.Remove "summary" }}` | 
|  이름  |    |  []string  |  레이블 이름 목록  | `{{ .Names }}` | 
|  값  |    |  []string  |  레이블 값 목록  | `{{ .Values }}` | 

**Time**

시간은 Go [https://pkg.go.dev/time#Time](https://pkg.go.dev/time#Time) 패키지에서 가져옵니다. 여러 형식으로 시간을 인쇄할 수 있습니다. 예를 들어, `Monday, 1st January 2022 at 10:00AM` 형식으로 알림이 실행된 시간을 인쇄하려면 다음 템플릿을 작성합니다.

```
{{ .StartsAt.Format "Monday, 2 January 2006 at 3:04PM" }}
```

[여기](https://pkg.go.dev/time#pkg-constants)에서 Go의 시간 형식에 대한 참조를 찾을 수 있습니다.

## 템플릿 함수
<a name="v9-alerting-template-functions"></a>

템플릿 함수를 사용하여 레이블 및 주석을 처리해 동적 알림을 생성할 수 있습니다. 다음 함수를 사용할 수 있습니다.


| 이름 | 인수 유형 | 반환 타입 | 설명 | 
| --- | --- | --- | --- | 
|  `humanize`  |  숫자 또는 문자열  |  문자열  |  지표 접두사를 사용하여 숫자를 더 읽기 쉬운 형식으로 변환합니다.  | 
|  `humanize1024`  |  숫자 또는 문자열  |  문자열  |  humanize와 비슷하지만 1000이 아닌 1024를 밑으로 사용합니다.  | 
|  `humanizeDuration`  |  숫자 또는 문자열  |  문자열  |  기간(초 단위)을 더 읽기 쉬운 형식으로 변환합니다.  | 
|  `humanizePercentage`  |  숫자 또는 문자열  |  문자열  |  비율 값을 100의 분율로 변환합니다.  | 
|  `humanizeTimestamp`  |  숫자 또는 문자열  |  문자열  |  Unix 타임스탬프(초 단위)를 더 읽기 쉬운 형식으로 변환합니다.  | 
|  `title`  |  문자열  |  문자열  |  strings.Title, 각 단어의 첫 번째 문자를 대문자로 표시합니다.  | 
|  `toUpper`  |  문자열  |  문자열  |  strings.ToUpper, 모든 문자를 대문자로 변환합니다.  | 
|  `toLower`  |  문자열  |  문자열  |  strings.ToLower, 모든 문자를 소문자로 변환합니다.  | 
|  `match`  |  패턴, 텍스트  |  부울  |  regexp.MatchString 고정되지 않은 정규식 일치를 테스트합니다.  | 
|  `reReplaceAll`  |  패턴, 교체, 텍스트  |  문자열  |  Regexp.ReplaceAllString Regexp 대체(고정되지 않음).  | 
|  `graphLink`  |  문자열 - `expr` 및 `datasource` 필드가 있는 JSON 객체  |  문자열  |  지정된 표현식 및 데이터 소스에 대한 탐색의 그래픽 보기 경로를 반환합니다.  | 
|  `tableLink`  |  문자열 - `expr` 및 `datasource` 필드가 있는 JSON 객체  |  문자열  |  지정된 표현식 및 데이터 소스에 대한 탐색의 테이블 형식 보기 경로를 반환합니다.  | 
|  `args`  |  []interface\$1\$1  |  map[string]interface\$1\$1  |  객체 목록을 arg0, arg1과 같은 키가 있는 맵으로 변환합니다. 이 함수를 사용하여 여러 인수를 템플릿에 전달합니다.  | 
|  `externalURL`  |  없음  |  문자열  |  외부 URL을 나타내는 문자열을 반환합니다.  | 
|  `pathPrefix`  |  없음  |  문자열  |  외부 URL의 경로를 반환합니다.  | 

다음 표에는 각 함수 사용 예제가 나와 있습니다.


| 함수 | TemplateString | Input | 예상 | 
| --- | --- | --- | --- | 
|  인간화  |  \$1 humanize \$1value \$1  |  1234567.0  |  1.235M  | 
|  humanize1024  |  \$1 humanize1024 \$1value \$1  |  1048576.0  |  1Mi  | 
|  humanizeDuration  |  \$1 humanizeDuration \$1value \$1  |  899.99  |  14m 59s  | 
|  humanizePercentage  |  \$1 humanizePercentage \$1value \$1  |  0.1234567  |  12.35%  | 
|  humanizeTimestamp  |  \$1 humanizeTimestamp \$1value \$1  |  1435065584.128  |  2015-06-23 13:19:44.128 \$10000 UTC  | 
|  제목  |  \$1 \$1value \$1 title \$1  |  aa bB CC  |  Aa Bb Cc  | 
|  toUpper  |  \$1 \$1value \$1 toUpper \$1  |  aa bB CC  |  AA BB CC  | 
|  toLower  |  \$1 \$1value \$1 toLower \$1  |  aa bB CC  |  aa bb cc  | 
|  match  |  \$1 match "a\$1" \$1labels.instance \$1  |  aa  |  true  | 
|  reReplaceAll  |  \$1\$1 reReplaceAll "localhost:(.\$1)" "my.domain:\$11" \$1labels.instance \$1\$1  |  localhost:3000  |  my.domain:3000  | 
|  graphLink  |  \$1\$1 graphLink "\$1\$1"expr\$1": \$1"up\$1", \$1"datasource\$1": \$1"gdev-prometheus\$1"\$1" \$1\$1  |    |  /explore?left=["now-1h","now","gdev-prometheus",\$1"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true\$1]  | 
|  tableLink  |  \$1\$1 tableLink "\$1\$1"expr\$1":\$1"up\$1", \$1"datasource\$1":\$1"gdev-prometheus\$1"\$1" \$1\$1  |    |  /explore?left=["now-1h","now","gdev-prometheus",\$1"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false\$1]  | 
|  args  |  \$1\$1define "x"\$1\$1\$1\$1.arg0\$1\$1 \$1\$1.arg1\$1\$1\$1\$1end\$1\$1\$1\$1template "x" (args 1 "2")\$1\$1  |    |  1 2  | 
|  externalURL  |  \$1 externalURL \$1  |    |  http://localhost/path/prefix  | 
|  pathPrefix  |  \$1 pathPrefix \$1  |    |  /path/prefix  | 