• 模板示例
    • " level="2">简单告警字段模版
    • " level="2">简单迭代
    • " level="2">显示一个值
    • " level="2">使用控制台 URL 参数
    • " level="2">高级迭代
    • " level="2">定义可重用的模版

    模板示例

    Prometheus支持在告警的注解和标签以及服务的控制台页面中进行模板化。模板具有对本地数据库运行查询,数据迭代,条件判断,格式化数据等功能。Prometheus模板语言基于 Go 模板系统。

    简单告警字段模版

    1. alert: InstanceDown
    2. expr: up == 0
    3. for: 5m
    4. labels:
    5. severity: page
    6. annotations:
    7. summary: "Instance {{$labels.instance}} down"
    8. description: "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes."

    警报字段模板在触发告警期间的每个规则迭代执行,因此请保持所有查询和模板的轻量级。如果您需要更复杂的告警模板,建议改为链接到控制台。

    简单迭代

    以下将显示实例列表及它们是否启动:

    1. {{ range query "up" }}
    2. {{ .Labels.instance }} {{ .Value }}
    3. {{ end }}

    特殊的.变量包含每次循环迭代的当前样本值

    显示一个值

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

    Go 和 Go 的模板语言都是强类型的,因此必须检查返回的样本以避免执行错误。如,如果采集或规则尚未运行,或者主机已关闭,则可能发生这种情况。

    随附的prom_query_drilldown模板可以处理此类问题,允许格式化结果并链接到表达式浏览器

    使用控制台 URL 参数

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

    如果以console.html?instance=hostname进行访问,.Params.instance将被赋值为hostname

    高级迭代

    1. <table>
    2. {{ range printf "node_network_receive_bytes{job='node',instance='%s',device!='lo'}" .Params.instance | query | sortByLabel "device"}}
    3. <tr><th colspan=2>{{ .Labels.device }}</th></tr>
    4. <tr>
    5. <td>Received</td>
    6. <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>
    7. </tr>
    8. <tr>
    9. <td>Transmitted</td>
    10. <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>
    11. </tr>{{ end }}
    12. </table>

    在这个示例中,我们遍历所有网络设备并显示每个网络设备的网络流量。

    由于range操作未指定变量,因此.Params.instance在循环内不可用,.是循环变量。

    定义可重用的模版

    Prometheus 支持定义可重复使用的模板。与控制台库支持结合使用时,此功能特别强大,允许在各个控制台之间共享模板。

    1. {{/* Define the template */}}
    2. {{define "myTemplate"}}
    3. do something
    4. {{end}}
    5. {{/* Use the template */}}
    6. {{template "myTemplate"}}

    模板被限制于仅支持一个参数。 args函数可用于包装多个参数。

    1. {{define "myMultiArgTemplate"}}
    2. First argument: {{.arg0}}
    3. Second argument: {{.arg1}}
    4. {{end}}
    5. {{template "myMultiArgTemplate" (args 1 2)}}