토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.


프로메테우스에선 alert의 애노테이션과 레이블에 템플릿을 사용할 수 있으며, 콘솔 페이지들을 서빙해주기도 한다. 템플릿에선 로컬 데이터베이스에 질의하거나, 데이터를 순회하거나, 조건을 추가하고, 데이터 형식을 지정할 수 있다. 프로메테우스의 템플릿 언어는 Go 템플릿 시스템을 사용한다.

목차


Simple alert field templates

alert: InstanceDown
expr: up == 0
for: 5m
labels:
  severity: page
annotations:
  summary: "Instance {{$labels.instance}} down"
  description: "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes."

Alert 필드 템플릿은 alert가 시행fire될 때마다 모든 rule을 순회하면서 실행되므로, 여기선 모든 쿼리와 템플릿을 가볍게 유지하는 게 좋다. alert에 좀 더 복잡한 템플릿이 필요하다면 콘솔 페이지로 연결하는 것을 권장한다.


Simple iteration

다음은 인스턴스 목록과 작동 여부를 보여주는 템플릿이다:

{{ range query "up" }}
  {{ .Labels.instance }} {{ .Value }}
{{ end }}

변수 앞에 .이 있을 땐 조금 특별하게, 루프를 순회하면서 현재의 샘플 값에 접근할 수 있다.


Display one value

{{ with query "some_metric{instance='someinstance'}" }}
  {{ . | first | value | humanize }}
{{ end }}

Go와 Go의 템플릿 언어는 모두 strongly typed 언어이기 때문에, 반환된 샘플이 없다면 실행 에러가 발생할 수 있어 주의해야 한다. 예를 들어 아직 스크랩 전이거나, rule을 평가하지 않았을 때, 또는 호스트가 다운됐을 때 실행 에러가 발생할 수 있다.

기본 제공하는 prom_query_drilldown 템플릿을 이용하면 이를 알아서 잘 처리해주며, 출력 포맷을 지정하고 expression 브라우저에 연결할 수도 있다.


Using console URL parameters

{{ with printf "node_memory_MemTotal{job='node',instance='%s'}" .Params.instance | query }}
  {{ . | first | value | humanize1024 }}B
{{ end }}

이 페이지에 console.html?instance=hostname으로 접근하면 .Params.instancehostname으로 평가된다.


Advanced iteration

<table>
{{ range printf "node_network_receive_bytes{job='node',instance='%s',device!='lo'}" .Params.instance | query | sortByLabel "device"}}
  <tr><th colspan=2>{{ .Labels.device }}</th></tr>
  <tr>
    <td>Received</td>
    <td>{{ with printf "rate(node_network_receive_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device | query }}{{ . | first | value | humanize }}B/s{{end}}</td>
  </tr>
  <tr>
    <td>Transmitted</td>
    <td>{{ with printf "rate(node_network_transmit_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device | query }}{{ . | first | value | humanize }}B/s{{end}}</td>
  </tr>{{ end }}
</table>

여기서는 모든 네트워크 장비를 순회하며 각각의 네트워크 트래픽을 표기한다.

이때 range 작업에서 따로 변수를 명시하지 않았기 때문에, .은 이제 루프 변수가 돼서 루프 안에선 .Params.instance를 사용할 수 없다.


Defining reusable templates

프로메테우스에선 템플릿들을 정의해놓고 재사용할 수 있다. 특히 템플릿을 모든 콘솔에 공유할 수 있는 콘솔 라이브러리와 결합할 때 진가를 발휘한다.

{{/* Define the template */}}
{{define "myTemplate"}}
  do something
{{end}}

{{/* Use the template */}}
{{template "myTemplate"}}

템플릿은 인자 하나로만 제한된다. 여러 인자를 래핑하고 싶다면 args 함수를 사용하면 된다.

{{define "myMultiArgTemplate"}}
  First argument: {{.arg0}}
  Second argument: {{.arg1}}
{{end}}
{{template "myMultiArgTemplate" (args 1 2)}}

Next :
Template reference
프로메테우스 템플릿 가이드

전체 목차는 여기에 있습니다.

<< >>

TOP