テンプレート例

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 }}

特別な.変数は、各ループイテレーションの現在のサンプルの値を含みます。

1つの値の表示

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

GoとGoのテンプレート言語はどちらも型が厳密であるため、実行エラーを回避するためにサンプルが返されたかどうかを確認する必要があります。例えば、スクレイピングやルール評価がまだ実行されていない場合、またはホストがダウンしている場合に発生する可能性があります。

組み込みのprom_query_drilldownテンプレートはこれを処理し、結果のフォーマットや式ブラウザへのリンクを可能にします。

コンソールURLパラメータの使用

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

console.html?instance=hostnameとしてアクセスされた場合、.Params.instancehostnameに評価されます。

高度なイテレーション

<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)}}

このページの内容