

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

# 메시징 템플릿 사용
<a name="alert-message-templates"></a>

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

[연락 지점 작업](alert-contact-points.md)을 통해 전송되는 알림은 *메시징 템플릿*를 사용하여 빌드됩니다. Grafana의 기본 템플릿은 [Go 템플릿 지정 시스템](https://golang.org/pkg/text/template)을 기반으로 합니다. 여기서 일부 필드는 텍스트로 평가되고 다른 필드는 HTML(이스케이핑에 영향을 미칠 수 있음)로 평가됩니다.

대부분의 연락 지점 필드는 템플릿 지정 가능하므로 재사용 가능한 사용자 지정 템플릿을 생성하고 여러 연락 지점에서 사용할 수 있습니다. 이 [템플릿 데이터](#alert-template-data) 주제에서는 템플릿 지정에 사용할 수 있는 변수를 나열합니다.

**템플릿 사용**

템플릿은 메시지를 생성하는 데 사용됩니다. 예를 들어, Slack 알림 메시지를 사용하는 경우 연락 지점의에서제목과 본문을 설정할 수 있습니다. 다음 예제에서는 기본 템플릿을 사용하여 실행 알림 및 해결된 알림 수를 포함하는 제목과 알림 및 해당 상태를 나열하는 본문을 생성하는 방법을 보여줍니다.
+ **제목**:

  ```
  {{ len .Alerts.Firing }} firing, {{ len .Alerts.Resolved }} resolved
  ```
+ **텍스트 본문:** 

  ```
  {{ range .Alerts }}{{ .Status }}: {{ .Labels.alertname }}
  {{end }}
  ```

다음 예제와 같이 사용자 지정 템플릿을 생성할 수 있습니다.
+ **제목**:

  ```
  {{ template "slack.default.title" .}}
  ```
+ **텍스트 본문:** 

  ```
  {{ template "mymessage" .}}
  ```

다음은 샘플 템플릿입니다.

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

다음 절차에서는 사용자 지정 메시지 템플릿을 생성, 편집 및 삭제하는 방법을 보여줍니다.

**메시지 템플릿을 생성하는 방법**

1. Grafana 콘솔의 Grafana 메뉴에서 **알림**(종 모양) 아이콘을 선택하여 **알림** 페이지를 여세요.

1. **연락 지점**을 선택하세요.

1. **Alertmanager** 드롭다운에서 메시지 템플릿을 생성할 Alertmanager 인스턴스를 선택하세요. 기본값은 Grafana Alertmanager입니다.

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

1. 설명이 포함된 **이름**을 지정하세요.

1. 템플릿의 **콘텐츠**를 추가하세요. 예를 들어 다음과 같습니다.

   ```
   {{ define "mymessage" }}
     {{ range .Alerts }}
       [{{ .Status }}] {{ range .Labels }} {{ .Name }}={{.Value }}{{end}}
     {{ end }}
   {{ end }}
   ```

   콘텐츠 섹션의 `define` 태그는 템플릿 이름을 할당합니다. 이 태그는 선택 사항이며 생략하면 템플릿 이름이 **이름** 필드에서 파생됩니다. 둘 다 지정하면 동일하게 유지하는 것이 가장 좋습니다.

1. **템플릿 저장**을 선택합니다.

**참고**  
알림 메시지 템플릿의 HTML은 텍스트로 렌더링되며 제어 문자가 이스케이프 처리됩니다. Grafana는 결과 알림에서 HTML 렌더링을 지원하지 않습니다.

**메시지 템플릿을 편집하려면 다음과 같이 하십시오.**

1. **알림** 페이지에서 **연락 지점**을 선택하여 연락 시점 목록을 여세요.

1. **템플릿 테이블**에서 편집할 템플릿을 찾고 **편집** 아이콘(펜)을 선택하세요.

1. 변경을 수행하고 **템플릿 저장**을 선택하세요.

**메시지 템플릿을 삭제하려면 다음과 같이 하십시오.**

1. **알림** 페이지에서 **연락 지점**을 선택하여 연락 시점 목록을 여세요.

1. **템플릿 테이블**에서 제거할 템플릿을 찾고 **삭제** 아이콘(휴지통)을 선택하세요.

1. **예, 삭제**를 선택하여 템플릿을 삭제하세요.

**중첩된 템플릿**

다른 템플릿 내에 템플릿을 포함할 수 있습니다.

예를 들어 `define` 키워드를 사용하여 템플릿 조각을 정의할 수 있습니다.

```
{{ define "mytemplate" }}
  {{ len .Alerts.Firing }} firing. {{ len .Alerts.Resolved }} resolved.
{{ end }}
```

그런 다음, `template` 키워드를 사용하여 이 조각 내에 사용자 지정 템플릿을 포함할 수 있습니다. 예제:

```
Alert summary:
{{ template "mytemplate" . }}
```

다음 기본 제공 템플릿 옵션을 사용하여 사용자 지정 템플릿을 포함할 수 있습니다.


| 이름 | 참고 | 
| --- | --- | 
| `default.title` | 개요 수준의 상태 정보를 표시합니다. | 
| `default.message` | 실행 알림 및 해결된 알림의 형식이 지정된 요약을 제공합니다. | 

**사용자 지정 템플릿 예제**

다음은 사용자 지정 템플릿을 사용하는 방법에 대한 예제입니다.

단일 알림을 렌더링하기 위한 템플릿:

```
{{ define "myalert" }}
  [{{.Status}}] {{ .Labels.alertname }}

  Labels:
  {{ range .Labels.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}

  {{ if gt (len .Annotations) 0 }}
  Annotations:
  {{ range .Annotations.SortedPairs }}
    {{ .Name }}: {{ .Value }}
  {{ end }}
  {{ end }}

  {{ if gt (len .SilenceURL ) 0 }}
    Silence alert: {{ .SilenceURL }}
  {{ end }}
  {{ if gt (len .DashboardURL ) 0 }}
    Go to dashboard: {{ .DashboardURL }}
  {{ end }}
{{ end }}
```

전체 알림 메시지를 렌더링하기 위한 템플릿:

```
{{ define "mymessage" }}
  {{ if gt (len .Alerts.Firing) 0 }}
    {{ len .Alerts.Firing }} firing:
    {{ range .Alerts.Firing }} {{ template "myalert" .}} {{ end }}
  {{ end }}
  {{ if gt (len .Alerts.Resolved) 0 }}
    {{ len .Alerts.Resolved }} resolved:
    {{ range .Alerts.Resolved }} {{ template "myalert" .}} {{ end }}
  {{ end }}
{{ end }}
```

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

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


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

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

**알림(유형)**

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


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

**KeyValue 유형**

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

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


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



## 템플릿 함수
<a name="alert-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{} | map[string]interface{} | 객체 목록을 arg0, arg1과 같은 키가 있는 맵으로 변환합니다. 이 함수를 사용하여 여러 인수를 템플릿에 전달합니다. | 
| `externalURL` | 없음 | 문자열 | 외부 URL을 나타내는 문자열을 반환합니다. | 
| `pathPrefix` | 없음 | 문자열 | 외부 URL의 경로를 반환합니다. | 

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


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