全部產品
Search
文件中心

Simple Log Service:內建模板函數

更新時間:Jul 26, 2024

新版內容範本的內建函數便於您對資料進行各種操作,豐富了通知內容的格式和展示樣式。本文介紹內建模板函數的文法及樣本。

通用函數

數學函數

函數

說明

過濾器

樣本

float(value, default=0.0)

將整數或字串轉換成浮點數。

如果轉換失敗,預設返回0.0。通過default參數,可指定轉換失敗的傳回值。

支援

  • {{ float("123") }}的結果為123.0。

  • {{ float("foo") }}的結果為0.0。

  • {{ float("foo", default=1.23) }}的結果為1.23。

int(value, 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, 1)

四捨五入取整數。

其中,1表示保留1位小數。

支援

  • {{ round(1.23) }}的結果為1。

  • {{ round(1.56) }}的結果為2。

  • {{ round(1.56, 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)

刪除字串頭尾的Null 字元。

支援

{{ 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。

split(value, sep=None, maxsplit=-1)

切割字串。

  • 通過sep參數指定分隔字元。

  • 通過maxsplit參數限制切割次數。

    如果未指定maxsplit或設定為-1,表示對切割數量沒有限制。

支援

  • {{ split('a b c ') }} 的結果為['a', 'b', 'c']。

  • {{ split('a-b-c', sep='-') }}的結果為['a', 'b', 'c']。

  • {{ split('a-b-c', sep='-', maxsplit=1) }}的結果為['a', 'b-c']。

  • {{ split('a<>b<>c', sep='<>') }}的結果為['a', 'b', 'c']。

列表和對象函數

函數

說明

過濾器

樣本

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") }}的結果為&#95;&#95;a&#95;&#95; &#42;&#42;b&#42;&#42; &#35;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"}。

parse_json(value)

將字串解析為JSON資料結構。

支援

  • {{ parse_json('{"foo": "bar"}').foo }}的結果為bar。

  • {{ parse_json('[1, 2, 3]')[1] }}的結果為2。

編碼和解碼函數

函數

說明

過濾器

樣本

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_duration(value, locale='en-US', sep='')

格式化時間間隔。其中value的單位為秒。

通過locale參數,可指定文字的語言。locale參數的取值請參見警示業務函數locale取值

支援

  • {{ 10 | format_duration }}的結果為10s。

  • {{ 60 | format_duration }}的結果為1m。

  • {{ 3600 | format_duration }}的結果為1h。

  • {{ 86400 | format_duration }}的結果為1d。

  • {{ 100000 | format_duration }}的結果為1d3h46m40s。

  • {{ 100000 | format_duration(sep=",") }}的結果為1d,3h,46m,40s。

警示業務函數

警示業務函數是和警示上下文以及內容範本配置相關,可自動感知如下資訊:

說明

在不同的警示上下文中執行警示業務函數時,返回的結果有可能不同。

  • 警示屬性,例如當前警示的嚴重度、狀態等。

  • 內容範本語言配置,例如是中文、英文。

  • 通知渠道,例如DingTalk、郵件等。

函數

說明

過濾器

樣本

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)

將警示嚴重度轉換為文字描述,且支援彩色字型。

說明

目前只有DingTalk、企業微信、郵件和訊息中心這四個渠道支援彩色文本。

通過locale參數,可指定文字的語言。locale參數的取值請參見警示業務函數locale取值

支援

  • 警示嚴重度為6

  • 內容範本配置

    {{ format_severity(alert.severity) }}
  • 結果

    • 內容範本中的語言配置為中文時,通知內容為中級,黃色字型。

    • 內容範本中的語言配置為英文時,通知內容為 Medium,黃色字型。

format_status(alert.status, locale=None)

將警示狀態轉換為文字描述,且支援彩色字型。

說明

目前只有DingTalk、企業微信、郵件和訊息中心這四個渠道支援彩色文本。其他渠道時調用該函數會無改變。

通過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或Null 字元串

    使用內容範本中配置的語言。

    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

    CloudMonitor