--- title: Template examples sort_rank: 4 --- # Template examples Prometheus supports templating in the annotations and labels of alerts, as well as in served console pages. Templates have the ability to run queries against the local database, iterate over data, use conditionals, format data, etc. The Prometheus templating language is based on the [Go templating](https://golang.org/pkg/text/template/) system. ## 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 field templates will be executed during every rule iteration for each alert that fires, so keep any queries and templates lightweight. If you have a need for more complicated templates for alerts, it is recommended to link to a console instead. ## Simple iteration This displays a list of instances, and whether they are up: ```go {{ range query "up" }} {{ .Labels.instance }} {{ .Value }} {{ end }} ``` The special `.` variable contains the value of the current sample for each loop iteration. ## Display one value ```go {{ with query "some_metric{instance='someinstance'}" }} {{ . | first | value | humanize }} {{ end }} ``` Go and Go's templating language are both strongly typed, so one must check that samples were returned to avoid an execution error. For example this could happen if a scrape or rule evaluation has not run yet, or a host was down. The included `prom_query_drilldown` template handles this, allows for formatting of results, and linking to the [expression browser](https://prometheus.io/docs/visualization/browser/). ## Using console URL parameters ```go {{ with printf "node_memory_MemTotal{job='node',instance='%s'}" .Params.instance | query }} {{ . | first | value | humanize1024 }}B {{ end }} ``` If accessed as `console.html?instance=hostname`, `.Params.instance` will evaluate to `hostname`. ## Advanced iteration ```html
{{ .Labels.device }} | |
---|---|
Received | {{ 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}} |
Transmitted | {{ 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}} |