新版内容模板的内置函数便于您对数据进行各种操作,丰富了通知内容的格式和展示样式。本文介绍内置模板函数的语法及示例。

通用函数

数学函数

函数 说明 过滤器 示例
float(value, default=0.0) 将整数或字符串转换成浮点数。

如果转换失败,默认返回0.0。通过default参数,可指定转换失败的返回值。

支持
  • {{ float("123") }}的结果为123.0。
  • {{ float("foo") }}的结果为0.0。
  • {{ float("foo", default=1.23) }}的结果为1.23。
int(vlaue, default=0) 将一个字符串或数字转换为整数。

如果转换失败,默认返回0。通过default参数,可指定转换失败的返回值。

支持
  • {{ int(1.23) }}的结果为1。
  • {{ int("1.23") }}的结果为1。
  • {{ int("foo") }}的结果为0。
  • {{ int("foo", default=5) }}的结果为5。
length(value) 返回对象(字符串、列表、元组等)的长度或个数。 支持
  • {{ length("foo") }}的结果为3。
  • {{ length([1, 2]) }} 的结果为2。
  • {{ length({"foo": "bar"}) }}的结果为1。
abs(value) 返回数字的绝对值。 支持 {{ abs(-1) }}的结果为1。
min(value) 返回最小值。 支持 {{ min([1, 3, 2]) }}的结果为1。
max(value) 返回最大值。 支持 {{ max([1, 3, 2]) }}的结果为3。
ceil(value) 向上取整数。 支持 {{ ceil(1.23) }}的结果为2。
floor(value) 向下取整数。 支持 {{ floor(1.23) }}的结果为1。
round(value, n=0) 四舍五入取整数。

通过n参数,可指定保留n位小数。

支持
  • {{ round(1.23) }}的结果为1。
  • {{ round(1.56) }}的结果为2。
  • {{ round(1.56, n=1) }}的结果为1.6。
sum(value) 求和计算。 支持 {{ sum([1, 2, 3]) }}的结果为6。

字符串函数

函数 说明 过滤器 示例
string(value) 将对象转为字符串类型。 支持 {{ string(1.23) }}的结果为1.23。

此处的1.23为字符串类型。

capitalize(value) 将字符串的首字母转换为大写形式,其它字符转换为小写形式。 支持 {{ capitalize("heLLO World") }}的结果为Hello world。
lower(value) 将字符串转换为小写形式。 支持 {{ lower("FOO") }}的结果为foo。
upper(value) 将字符串转换为大写形式。 支持 {{ upper("foo") }}的结果为FOO。
title(value) 返回标题化的字符串,即每个单词的首字母为大写形式,其余字母为小写形式。 支持 {{ title("hello world") }}的结果为Hello World。
trim(value) 删除字符串头尾的空字符。 支持 {{ trim(" foo\n") }}的结果为foo。
replace(value, old, new) 替换目标字符串。 不支持 {{ replace("foo", "oo", "ly") }}的结果为fly。
wordcount(value) 统计单词个数。 支持 {{ wordcount("hello world") }}的结果为2。
truncate(value, n, end='') 截断字符串。
  • 通过truncate(value, n),指定截断的字符数。
  • 通过truncate(value, n, end='...'),指定要添加的后缀。
不支持
  • {{ truncate("foo bar", 5) }}的结果为foo b。
  • {{ truncate("foo bar", 5, end="...") }}的结果为foo b...。
quote(value) 使用双引号("")包裹字符串。 支持
  • {{ quote(123) }}的结果为"123"
  • {{ quote("foo") }}的结果为 "foo"。
indent(value, n=4) 对每一行字符串进行缩进,默认缩进4个空格。

通过n参数,可指定缩进的空格数。

支持
  • {{ "foobar\n" }}{{ indent("foo\nbar") }} 的结果如下:
    foobar
        foo
        bar
  • {{ "foobar\n" }}{{ indent("foo\nbar", 2) }}的结果如下:
    foobar
      foo
      bar
startswith(value, prefix) 判断字符串是否以特定子串开始。 支持 {{ startswith("football", "foo") }}的结果为true。
endswith(value, suffix) 判断字符串是否以特定子串结束。 支持 {{ endswith("football", "all") }}的结果为true。
removeprefix(value, prefix) 移除字符串的前缀。 支持 {{ removeprefix("football", "foot") }}的结果为ball。
removesuffix(value, suffix) 移除字符串的后缀。 支持 {{ removesuffix("football", "ball") }}的结果为foot。

列表和对象函数

函数 说明 过滤器 示例
enumerate(value) 将一个可迭代的对象组合为一个索引序列,并列出原始元素和元素的下标。 不支持 {{ enumerate(["foo", "bar"]) }}的结果为[(0, 'foo'), (1, 'bar')]。
list(value) 将一个可迭代的对象转换为列表类型。 支持
  • {{ list(("foo", "bar")) }}的结果为 ['foo', 'bar']。
  • {{ list("foo") }}的结果为 ['f', 'o', 'o']。
dict(value) 创建一个字典,类似于直接使用{}创建字典。 不支持 {{ dict(foo=1, bar="hello") }}的结果为{'foo': 1, 'bar': 'hello'}}。
first(value) 返回列表中的第一项。 支持 {{ first([1, 2, 3]) }}的结果为1。
last(value) 返回列表中的最后一项。 支持 {{ last([1, 2, 3]) }}的结果为3。
sort(value, reverse=true) 对列表中的元素进行排序。

通过reverse=true,可实现逆序排序。

支持
  • {{ sort([3, 1, 2]) }}的结果为[1, 2, 3]。
  • {{ sort([3, 1, 2], reverse=true) }}的结果为[3, 2, 1]。
dictsort(value) 将对象中的键值对(Key:Value)按照Key进行排序,返回数组。 支持
  • alert.labels字段示例
    {
        "host": "host-1",
        "app": "nginx"
    }
  • 内容模板配置
    {%- for key, val in dictsort(alert.labels) %}
    {{ key }}: {{ val }}
    {%- endfor %}
  • 结果
    app: nginx
    host: host-1
join(value, d='') 使用连接符连接列表中的元素。

通过d参数,可指定连接符。

支持
  • {{ join([1, 2, 3]) }}的结果为123。
  • {{ join([1, 2, 3], ',') }}的结果为1,2,3。

格式化函数

函数 说明 过滤器 示例
escape_markdown(value) 转义特殊的Markdown字符。 支持 {{ escape_markdown("__a__ **b** #c") }}的结果为__a__ **b** #c
escape_html(value) 转义特殊的HTML字符。 支持 {{ escape_html("<div>") }}的结果为&lt;div&gt;
to_json(value) 将对象转为JSON格式。 支持
  • {{ to_json("foo") }}的结果为"foo"。
  • {{ to_json(1.23) }}的结果为1.23。
  • {{ to_json(True) }}的结果为true。
  • {{ to_json(alert.labels) }}的结果为{"host": "host-1", "app": "nginx"}。

编码和解码函数

函数 说明 过滤器 示例
base64_encoding(value) 对输入值进行Base64编码。 支持 {{ base64_encoding("foo") }}的结果为Zm9v。
base64_decoding(value) 对输入值进行Base64解码。 支持 {{ base64_decoding("Zm9v") }}的结果为foo。
md5_encoding(value) 对输入值进行MD5编码。 支持 {{ md5_encoding("foo") }}的结果为acbd18db4cc2f85cedef654fccc4a4d8。
url_encoding(value) 对输入值进行URL编码。 支持 {{ url_encoding("https://example.com?a=b&c=d") }}的结果为https%3A%2F%2Fexample.com%3Fa%3Db%26c%3Dd。
url_decoding(value) 对输入值进行URL解码。 支持 {{ url_decoding("https%3A%2F%2Fexample.com%3Fa%3Db%26c%3Dd") }}的结果为https://example.com?a=b&c=d。

日期函数

函数 说明 过滤器 示例
parse_date(value, fmt="%Y-%m-%d %H:%M:%S") 将输入值转为timestamp类型的日期和时间表达式。

通过fmt参数,可指定日期和时间表达式的格式。

支持
  • {{ parse_date(1629820800) }}的结果为2021-08-25 00:00:00。
  • {{ parse_date("2021|08|25|00|00|00", fmt="%Y|%m|%d|%H|%M|%S") }}的结果为2021-08-25 00:00:00。
format_date(value, tz=None, fmt="%Y-%m-%d %H:%M:%S") 将输入值进行格式化。

通过fmt参数,可指定日期和时间表达式的格式。

如果输入值不是日期对象,则函数会将其转换为日期对象,再进行格式化。关于日期时间格式化指令的更多信息,请参见日期时间格式化指令。关于时区列表的更多信息,请参见时区列表

不支持
  • {{ format_date(1629820800) }}的结果为2021-08-25 00:00:00。
  • {{ format_date(1629820800, fmt="%Y/%m/%d %H:%M:%S") }}的结果为2021/08/25 00:00:00。
  • {{ format_date(1629820800, tz="UTC", fmt="%Y/%m/%d %H:%M:%S") }}的结果为2021/08/24 16:00:00。
timestamp(value) 将时间和日期字符串转换为Unix时间戳。

如果输入值不是日期对象,则函数会将其转换为日期对象,再进行格式化。

支持
  • {{ timestamp("2021-08-25 00:00:00") }}的结果为1629820800。
  • {{ timestamp(parse_date("2021-08-25 00:00:00")) }}的结果为1629820800。

告警业务函数

告警业务函数是和告警上下文以及内容模板配置相关,可自动感知如下信息:
说明 在不同的告警上下文中执行告警业务函数时,返回的结果有可能不同。
  • 告警属性,例如当前告警的严重度、状态等。
  • 内容模板语言配置,例如是中文、英文。
  • 通知渠道,例如钉钉、邮件等。
函数 说明 过滤器 示例
format_type(alert.type, locale=None) 将告警类型转换为文字描述。

通过locale参数,可指定文字的语言。locale参数的取值请参见告警业务函数locale取值

支持
  • 告警类型为sls_pub
  • 内容模板配置
    {{ format_type(alert.type) }}
  • 结果
    • 内容模板中的语言配置为中文时,通知内容为开放告警
    • 内容模板中的语言配置为英文时,通知内容为Pub Alert
format_region(alert.region, locale=None) 将告警所在地域转换为文字描述。

通过locale参数,可指定文字的语言。locale参数的取值请参见告警业务函数locale取值

支持
  • 当前告警地域为cn-hangzhou
  • 内容模板配置
    {{ format_region(alert.region) }}
  • 结果
    • 内容模板中的语言配置为中文时,通知内容为华东1(杭州)
    • 内容模板中的语言配置为英文时,通知内容为 China (Hangzhou)
format_severity(alert.severity, locale=None) 将告警严重度转换为文字描述,且支持彩色字体。
说明 目前只有钉钉、企业微信、邮件和消息中心这四个渠道支持彩色文本。

通过locale参数,可指定文字的语言。locale参数的取值请参见告警业务函数locale取值

支持
  • 告警严重度为6
  • 内容模板配置
    {{ format_severity(alert.severity) }}
  • 结果
    • 内容模板中的语言配置为中文时,通知内容为中级,黄色字体。
    • 内容模板中的语言配置为英文时,通知内容为 Medium,黄色字体。
format_status(alert.status, locale=None) 将告警状态转换为文字描述,且支持彩色字体。
说明 目前只有钉钉、企业微信、邮件和消息中心这四个渠道支持彩色文本。其他渠道时调用该函数会无改变。

通过locale参数,可指定文字的语言。locale参数的取值请参见告警业务函数locale取值

支持
  • 当前告警为触发状态
  • 内容模板配置
    {{ format_status(alert.status) }}
  • 结果
    • 内容模板中的语言配置为中文时,通知内容为触发,红色字体。
    • 内容模板中的语言配置为英文时,通知内容为 Firing,红色字体。
to_list(value) 将数组或对象转换为列表。 支持
  • 告警标签
    {
        "app": "nginx",
        "host": "host-1"
    }
  • 内容模板配置
    {{ to_list(alert.labels) }}
  • 结果
    • 通知内容为Markdown格式时,返回结果如下:

      支持根据渠道是否需要进行Markdown转义而自动转义。

      - app: nginx
      - host: host&#45;1
    • 通知内容为HTML格式时,返回结果如下:
      <ul>
        <li>app: nginx</li>
        <li>host: host-1</li>
      </ul>
    • 通知内容为普通文本格式时,返回结果如下:
      [app: nginx][host: host-1]
annotations_to_list(alert.annotations, locale=None) 将告警标注转换为列表形式。类似于to_list(alert.annotations),区别在于annotations_to_list函数支持自动将标准名称转换为文字描述,例如将title字段转换为标题或者Title。标准名称列表,请参见告警标注字段映射

通过locale参数,可指定文字的语言。locale参数的取值请参见告警业务函数locale取值

支持
  • 告警标注
    {
        "title": "Nginx访问异常",
        "desc": "PV同比下降80%",
        "cnt": "120"
    }
  • 内容模板配置
    {{ annotations_to_list(alert.annotations) }}
  • 结果
    通知内容为Markdown格式时,返回结果如下:
    - 标题: Nginx访问异常
    - 描述: PV同比下降80%
    - cnt: 120
blockquote(value) 为通知内容添加引用样式。
  • 通知内容为Markdown格式时,在每一行的开头添加>符号。
  • 通知内容为HTML格式时,使用<blockquote>标签包裹通知内容。
支持
  • 内容模板配置
    {{ blockquote("foo\nbar") }}
  • 结果
    • 通知内容为Markdown格式时,返回结果如下:
      > foo
      > bar
    • 通知内容为HTML格式时,返回结果如下:
      <blockquote>
      foo
      bar
      </blockquote>

参考信息

  • 告警业务函数中locale参数的取值
    locale取值 说明
    None或空字符串 使用内容模板中配置的语言。
    en-US 英文。
    zh-CN 中文。
  • 告警标注字段映射
    标注 映射值(中文) 映射值(英文)
    title 标题 Title
    desc 描述 Description
    anomaly_score 异常分数 Anomaly Score
    job_id 作业ID Task ID
    model_id 模型ID Model ID
    severity 异常严重度 Anomaly Severity
    __pub_alert_app__ 应用 Application
    __pub_alert_protocol__ 协议 Protocol
    __pub_alert_region__ 接入区域 Region
    __pub_alert_service__ 服务 Service
    __ensure_url__ 异常确认 Anomaly Confirmation
    __mismatch_url__ 误报确认 False Positive Confirmation
    __plot_image__ 时序图 Time Series Chart
    __host_ip__ 机器地址 Machine Address
    __host_group_name__ 机器组名称 Machine Group Name
    __cloud_monitor_type__ 阿里云云监控 CloudMonitor