Prometheusは、アラートの注釈とラベル、および提供されるコンソールページでテンプレートをサポートしています。テンプレートは、ローカルデータベースに対してクエリを実行したり、データを反復処理したり、条件を使用したり、データをフォーマットしたりできます。 Prometheusテンプレート言語は、Goテンプレート
システムに基づいています。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."
アラートフィールドテンプレートは、発生するすべてのアラートに対して、すべてのルール反復中に実行されるため、クエリとテンプレートは軽量にしてください。 アラートのより複雑なテンプレートが必要な場合は、代わりにコンソールにリンクすることをお勧めします。
これは、インスタンスのリストと、それらが稼働しているかどうかを表示します
{{ range query "up" }}
{{ .Labels.instance }} {{ .Value }}
{{ end }}
特別な.
変数には、各ループ反復の現在のサンプルの値が含まれています。
{{ with query "some_metric{instance='someinstance'}" }}
{{ . | first | value | humanize }}
{{ end }}
GoとGoのテンプレート言語はどちらも厳密に型指定されているため、実行エラーを回避するためにサンプルが返されたことを確認する必要があります。 たとえば、スクレイプまたはルール評価がまだ実行されていない場合、またはホストがダウンしている場合に発生する可能性があります。
付属のprom_query_drilldown
テンプレートはこれを処理し、結果のフォーマットと式ブラウザへのリンクを許可します。
{{ with printf "node_memory_MemTotal{job='node',instance='%s'}" .Params.instance | query }}
{{ . | first | value | humanize1024 }}B
{{ end }}
console.html?instance=hostname
としてアクセスした場合、.Params.instance
はhostname
と評価されます。
<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
は使用できません。
Prometheusは、再利用できるテンプレートの定義をサポートしています。これは、コンソールライブラリサポートと組み合わせると特に強力になり、コンソール間でテンプレートを共有できます。
{{/* Define the template */}}
{{define "myTemplate"}}
do something
{{end}}
{{/* Use the template */}}
{{template "myTemplate"}}
テンプレートは1つの引数に制限されています。 args
関を使用して、複数の引数をラップできます。
{{define "myMultiArgTemplate"}}
First argument: {{.arg0}}
Second argument: {{.arg1}}
{{end}}
{{template "myMultiArgTemplate" (args 1 2)}}
このドキュメントはオープンソースです。 イシューを提出するか、プルリクエストを送信して改善にご協力ください。