템플릿 라벨 및 주석 - Amazon Managed Grafana

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

템플릿 라벨 및 주석

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

Grafana 버전 9.x를 지원하는 Grafana 작업 영역에 대해서는 을 참조하십시오. Grafana 버전 9에서 작업하기

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

템플릿을 사용하여 쿼리 및 표현식의 데이터를 레이블 및 주석에 포함할 수 있습니다. 예를 들어 쿼리 값을 기반으로 알림의 심각도 레이블을 설정하거나 쿼리의 인스턴스 레이블을 요약 주석에 사용하여 CPU 사용량이 높은 서버를 파악할 수 있습니다.

모든 템플릿은 텍스트/템플릿으로 작성해야 합니다. 레이블을 템플릿으로 만들든 주석을 만들든 관계없이 템플릿을 만드는 레이블이나 주석 안에 각 템플릿을 인라인으로 작성해야 합니다. 즉, 라벨과 주석 간에 템플릿을 공유할 수 없으며, 대신 템플릿을 사용하려는 위치에 복사해야 합니다.

각 템플릿은 경고 규칙이 평가될 때마다 평가되며 모든 알림에 대해 개별적으로 평가됩니다. 예를 들어 경고 규칙에 템플릿으로 작성된 요약 주석이 있고 경고 규칙에 10개의 발생 경고가 있는 경우 템플릿은 각 알림에 대해 한 번씩 10번 실행됩니다. 템플릿에서 비용이 많이 드는 계산을 최대한 피해야 합니다.

예제

다음 예제는 텍스트/템플릿에 대한 전체 자습서를 작성하는 대신, 지금까지 살펴본 템플릿 사용 사례 중 가장 일반적인 사용 사례를 보여 주려고 합니다. 이 예제를 그대로 사용하거나 사용 사례에 맞게 필요에 따라 조정할 수 있습니다. 텍스트/템플릿 작성 방법에 대한 자세한 내용은 텍스트/템플릿 설명서를 참조하십시오.

모든 레이블을 쉼표로 구분하여 인쇄합니다.

모든 레이블을 쉼표로 구분하여 인쇄하려면 변수를 출력합니다$labels.

{{ $labels }}

예를 들어alertname=High CPU usage, grafana_folder=CPU alerts 레이블과 함께 경고가 표시되면 다음과 같이 출력됩니다. instance=server1

alertname=High CPU usage, grafana_folder=CPU alerts, instance=server1
참고

클래식 조건을 사용하는 경우 쿼리의 $labels 레이블이 포함되지 않습니다. 자세한 내용은 $labels 변수를 참조하십시오.

모든 라벨을 한 줄에 하나씩 인쇄합니다.

모든 레이블을 한 줄에 하나씩 range 인쇄하려면 a를 사용하여 각 키/값 쌍을 반복하여 개별적으로 인쇄합니다. 다음은 현재 $k 레이블의 이름과 값을 $v 나타냅니다.

{{ range $k, $v := $labels -}} {{ $k }}={{ $v }} {{ end }}

예를 들어alertname=High CPU usage, grafana_folder=CPU alerts 레이블과 함께 알림이 표시되면 다음과 같이 인쇄됩니다. instance=server1

alertname=High CPU usage grafana_folder=CPU alerts instance=server1
참고

클래식 조건을 사용하는 경우 쿼리의 $labels 레이블이 포함되지 않습니다. 자세한 내용은 $labels 변수를 참조하십시오.

개별 라벨 인쇄

개별 라벨을 인쇄하려면 $labels 변수와 함께 index 함수를 사용하십시오.

The host {{ index $labels "instance" }} has exceeded 80% CPU usage for the last 5 minutes

예를 들어 레이블과 함께 경고가 instance=server1 표시되면 다음과 같이 인쇄됩니다.

The host server1 has exceeded 80% CPU usage for the last 5 minutes
참고

클래식 조건을 사용하는 경우 쿼리의 $labels 레이블이 포함되지 않습니다. 자세한 내용은 $labels 변수를 참조하십시오.

쿼리 값을 인쇄합니다.

인스턴트 쿼리의 값을 인쇄하려면 index 함수와 $values 변수를 사용하여 해당 Ref ID를 인쇄할 수 있습니다.

{{ index $values "A" }}

예를 들어, 81.2345 값을 반환하는 인스턴트 쿼리가 있는 경우 다음과 같이 인쇄됩니다.

81.2345

범위 쿼리의 값을 출력하려면 먼저 reduce 표현식을 사용하여 이 값을 시계열에서 인스턴트 벡터로 줄여야 합니다. 그런 다음 Ref ID를 대신 사용하여 리듀스 표현식의 결과를 인쇄할 수 있습니다. 예를 들어 리듀스 표현식이 A의 평균을 취하고 참조 ID가 B인 경우 다음과 같이 작성할 수 있습니다.

{{ index $values "B" }}

쿼리의 인간화된 값을 출력합니다.

인스턴트 쿼리의 인간화된 값을 인쇄하려면 다음 함수를 사용하십시오. humanize

{{ humanize (index $values "A").Value }}

예를 들어, 81.2345 값을 반환하는 인스턴트 쿼리가 있는 경우 다음과 같이 출력됩니다.

81.234

범위 쿼리의 인간화된 값을 출력하려면 먼저 reduce 표현식을 사용하여 이 값을 시계열에서 인스턴트 벡터로 줄여야 합니다. 그런 다음 Ref ID를 대신 사용하여 리듀스 표현식의 결과를 인쇄할 수 있습니다. 예를 들어 리듀스 표현식이 A의 평균을 취하고 참조 ID가 B인 경우 다음과 같이 작성할 수 있습니다.

{{ humanize (index $values "B").Value }}

쿼리 값을 백분율로 출력합니다.

인스턴트 쿼리의 값을 백분율로 인쇄하려면 다음 humanizePercentage 함수를 사용하십시오.

{{ humanizePercentage (index $values "A").Value }}

이 함수는 값이 0에서 1 사이의 10진수일 것으로 예상합니다. 값이 0에서 100 사이의 10진수인 경우 쿼리에서 또는 수학 표현식을 사용하여 값을 100으로 나눌 수 있습니다. 쿼리가 범위 쿼리인 경우 먼저 감소 표현식을 사용하여 쿼리를 시계열에서 인스턴트 벡터로 줄여야 합니다.

쿼리 값에서 심각도를 설정합니다.

쿼리 값에서 심각도 레이블을 설정하려면 if 문과 보다 큰 비교 함수를 사용하십시오. 텍스트/템플릿은 형식 강제를 지원하지 않으므로 비교할 $values 때는 반드시 소수 (80.050.00.0,, 등) 를 사용해야 합니다. 지원되는 모든 비교 함수 목록은 여기에서 확인할 수 있습니다.

{{ if (gt $values.A.Value 80.0) -}} high {{ else if (gt $values.A.Value 50.0) -}} medium {{ else -}} low {{- end }}

클래식 상태의 모든 라벨을 인쇄하십시오.

클래식 조건을 사용하는 경우 쿼리에서 레이블을 $labels 인쇄하는 데 사용할 수 없으며 $values 대신 사용해야 합니다. 그 이유는 일반적인 조건에서는 이러한 레이블을 삭제하여 1차원 동작 (경고 규칙당 최대 한 개의 경고) 을 적용해야 하기 때문입니다. 기존 조건에서 이러한 레이블을 삭제하지 않으면 여러 시계열을 반환하는 쿼리를 실행해도 경고 규칙을 평가할 때마다 레이블이 변경되므로 알림이 실행되고 해결되는 시점 사이에 계속 오락가락하게 됩니다.

대신 $values 변수에는 발생 중인 모든 조건에 대한 모든 시계열의 감소된 값이 포함됩니다. 예를 들어, 두 개의 시계열을 반환하는 쿼리 A와 두 개의 조건을 포함하는 클래식 조건 B가 있는 경고 규칙이 있는 경우 B0B1, B2B3$values 포함하게 됩니다. 클래식 조건 B에 조건이 하나만 있는 경우 B0$values 만 포함됩니다B1.

모든 발사 시계열의 레이블을 모두 인쇄하려면 다음 템플릿을 사용하십시오 (정규 표현식이 다를 경우 클래식 조건의 Ref ID로 B 바꾸어야 함).

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Labels }}{{ end }} {{ end }}

예를 들어, 단일 조건을 초과하는 두 시계열에 대한 클래식 조건은 다음과 같이 출력됩니다.

B0: instance=server1 B1: instance=server2

클래식 조건에 두 개 이상의 조건이 있고 한 시계열이 동시에 여러 조건을 초과하는 경우 초과된 각 조건에 대해 해당 레이블이 복제됩니다.

B0: instance=server1 B1: instance=server2 B2: instance=server1 B3: instance=server2

고유한 레이블을 인쇄해야 하는 경우 대신 경고 규칙을 1차원에서 다차원으로 변경하는 것을 고려해야 합니다. 클래식 조건을 reduce 표현식과 math 표현식으로 바꾸면 이 작업을 수행할 수 있습니다.

클래식 조건의 모든 값을 인쇄합니다.

클래식 조건의 모든 값을 인쇄하려면 이전 예를 사용하고 $v.Value 다음과 같이 $v.Labels 바꾸십시오.

{{ range $k, $v := $values -}} {{ if (match "B[0-9]+" $k) -}} {{ $k }}: {{ $v.Value }}{{ end }} {{ end }}

예를 들어, 단일 조건을 초과하는 두 시계열에 대한 클래식 조건은 다음과 같이 출력됩니다.

B0: 81.2345 B1: 84.5678

클래식 조건에 두 개 이상의 조건이 있고 한 시계열이 동시에 여러 조건을 초과하는 경우 모든 조건의 값이 포함됩니다. $values

B0: 81.2345 B1: 92.3456 B2: 84.5678 B3: 95.6789

Variables

레이블과 주석을 템플릿으로 만들 때 다음 변수를 사용할 수 있습니다.

레이블 변수

$labels변수에는 쿼리의 모든 레이블이 포함됩니다. 예를 들어 모든 서버의 CPU 사용량을 반환하는 쿼리가 있고 지난 5분 동안 CPU 사용량이 80% 를 초과하는 서버가 있을 때 실행되는 알림 규칙이 있다고 가정해 보겠습니다. 어떤 서버의 CPU 사용량이 높은지 알려주는 요약 주석을 경고에 추가하려고 합니다. $labels변수를 사용하여 다음과 같이 사람이 읽을 수 있는 문장을 인쇄하는 템플릿을 작성할 수 있습니다.

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes
참고

클래식 조건을 사용하는 경우 쿼리의 $labels 레이블이 포함되지 않습니다. 클래식 조건에서는 1차원 동작을 적용하기 위해 이러한 레이블을 삭제합니다 (경고 규칙당 최대 경고 하나). 템플릿에서 쿼리의 레이블을 사용하려면 이전의 클래식 조건에서 모든 레이블 인쇄 예제를 따르세요.

값 변수

$value변수는 모든 인스턴트 쿼리의 레이블과 값, 임계값, 감소 및 수학 식, 경고 규칙의 클래식 조건을 포함하는 문자열입니다. 범위 쿼리의 결과는 포함되지 않습니다. 범위 쿼리는 10~10,000개의 행 또는 지표를 반환할 수 있기 때문입니다. 그럴 경우, 특히 대규모 쿼리의 경우 단일 알림은 10MB의 메모리를 사용할 수 있으며 Grafana는 매우 빠르게 메모리가 부족해질 것입니다.

요약에서 $value 변수를 인쇄하려면 다음과 같이 작성하면 됩니다.

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ $value }}

그러면 다음과 같이 보일 것입니다.

CPU usage for instance1 has exceeded 80% for the last 5 minutes: [ var='A' labels={instance=instance1} value=81.234 ]

여기서는 var='A' Ref ID A의 인스턴트 쿼리를 labels={instance=instance1} 참조하고 레이블을 value=81.234 참조하며 지난 5분 동안의 평균 CPU 사용량을 나타냅니다.

전체 문자열 대신 일부 문자열만 인쇄하려면 $values 변수를 사용하십시오. 구조화된 표와 동일한 $value 정보를 포함하며, 원하는 텍스트와 일치하도록 정규 표현식을 작성하는 것보다 사용하기가 훨씬 쉽습니다.

값 변수

$values변수는 모든 인스턴트 쿼리 및 표현식의 레이블과 부동 소수점 값을 포함하는 테이블이며, 해당 Ref ID로 인덱싱됩니다.

Ref ID A를 사용하여 인스턴트 쿼리의 값을 인쇄하려면

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "A" }}

예를 들어, 레이블이 포함된 instance=server1 알림과 값이 포함된 인스턴트 쿼리가 있는 81.2345 경우 다음과 같이 출력됩니다.

CPU usage for instance1 has exceeded 80% for the last 5 minutes: 81.2345

Ref ID A의 쿼리가 인스턴트 쿼리가 아닌 범위 쿼리인 경우 Ref ID B로 reduce 표현식을 추가하고 다음과 같이 바꿉니다(index $values "A"). (index $values "B")

CPU usage for {{ index $labels "instance" }} has exceeded 80% for the last 5 minutes: {{ index $values "B" }}

함수

레이블과 주석을 템플릿으로 만들 때 다음 함수를 사용할 수 있습니다.

args

args 함수는 arg0, arg1 등의 키를 사용하여 객체 목록을 맵으로 변환합니다. 이는 템플릿에 여러 인수를 전달할 수 있도록 하기 위한 것입니다.

{{define "x"}}{{.arg0}} {{.arg1}}{{end}}{{template "x" (args 1 "2")}}
1 2

외부 URL

externalURL 함수는 Grafana 서버의 외부 URL을 반환합니다.

{{ externalURL }}
https://example.com/grafana

그래프링크

graphLink 함수는 지정된 표현식과 데이터 소스의 Grafana 버전 10에서 살펴보기 그래픽 뷰 경로를 반환합니다.

{{ graphLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":false,"range":true}]

인간화

humanize함수는 십진수를 인간화합니다.

{{ humanize 1000.0 }}
1k

인간화:1024

1000과 비슷하게 humanize1024 humanize 작동하지만 1024를 기본으로 사용합니다.

{{ humanize1024 1024.0 }}
1ki

휴머나이즈 듀레이션

humanizeDuration 함수는 지속 시간을 초 단위로 인간화합니다.

{{ humanizeDuration 60.0 }}
1m 0s

퍼센트 인간화

humanizePercentage 함수는 비율 값을 백분율로 인간화합니다.

{{ humanizePercentage 0.2 }}
20%

타임스탬프 인간화

humanizeTimestamp 함수는 Unix 타임스탬프를 인간화합니다.

{{ humanizeTimestamp 1577836800.0 }}
2020-01-01 00:00:00 +0000 UTC

매칭

match함수는 텍스트를 정규 표현식 패턴과 일치시킵니다.

{{ match "a.*" "abc" }}
true

경로 접두사

pathPrefix 함수는 Grafana 서버의 경로를 반환합니다.

{{ pathPrefix }}
/grafana

테이블 링크

tableLink 함수는 지정된 표현식과 데이터 소스에 Grafana 버전 10에서 살펴보기 대한 표 형식 뷰의 경로를 반환합니다.

{{ tableLink "{\"expr\": \"up\", \"datasource\": \"gdev-prometheus\"}" }}
/explore?left=["now-1h","now","gdev-prometheus",{"datasource":"gdev-prometheus","expr":"up","instant":true,"range":false}]

title

title함수는 각 단어의 첫 글자를 대문자로 표시합니다.

{{ title "hello, world!" }}
Hello, World!

토로워

toLower 함수는 모든 텍스트를 소문자로 반환합니다.

{{ toLower "Hello, world!" }}
hello, world!

Toupper

toUpper 함수는 모든 텍스트를 대문자로 반환합니다.

{{ toUpper "Hello, world!" }}
HELLO, WORLD!

reReplaceAll

reReplaceAll함수는 정규 표현식과 일치하는 텍스트를 대체합니다.

{{ reReplaceAll "localhost:(.*)" "example.com:$1" "localhost:8080" }}
example.com:8080