기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
템플릿 라벨 및 주석
이 설명서 항목은 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.0
50.0
0.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가 있는 경고 규칙이 있는 경우 B0
B1
, B2
및 B3
를 $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