このページはPrometheus公式ドキュメント和訳+αの一部です。
TEMPLATE EXAMPLES
Prometheusは、コンソールページと同様に、アラートのアノテーションとラベルでテンプレートをサポートしている。 テンプレートで、ローカルのデータベースに対してクエリを実行したり、繰り返し処理、条件分岐、フォーマットなどをすることが出来る。 Prometheusのテンプレート言語は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."
アラートのフィールドのテンプレートは、起きたアラートそれぞれに対して各ルールに対する反復処理の中で実行されるので、どのクエリも軽量に保つこと。 アラートのためにより込み入ったテンプレート必要な場合、代わりにコンソールへリンクすることを推奨する。
単純な繰り返し
インスタンスのリストとそれがupかどうかのリストを表示する。
{{ range query "up" }}
{{ .Labels.instance }} {{ .Value }}
{{ end }}
特殊変数.は、各ループでのサンプル値が含まれる。
値の表示
{{ with query "some_metric{instance='someinstance'}" }}
{{ . | first | value | humanize }}
{{ end }}
GoおよびGoのテンプレート言語はどちらも強く型付けされているので、実行エラーを避けるためにサンプルが返されたことをチェックしなければならない。 例えば、スクレイプやルールの評価がまだ実行されていないあるいはホストがダウンしている場合にこうしたことが起きる。
インクルードされたテンプレートprom_query_drilldownはこの処理をし、結果をフォーマットし、expressionブラウザにリンクする。
コンソールURLパラメーターの利用
{{ 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)}}
参考リンク
おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング
- 作者: Brian Brazil,須田一輝,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

- 作者: Mike Julian,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
- 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/08/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
和訳活動の支援
Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。
