テンプレートの例 - Prometheusドキュメント

このページは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 ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援