规则操作变量编辑

警报规则可以使用 Mustache 模板语法 ({{variable name}}) 在操作运行时传递值。

通用变量编辑

可用变量因规则类型而异,但有一些通用变量

在某些情况下,变量值在需要转义的上下文中使用时将被“转义”。例如

  • 对于 电子邮件连接器message 操作配置属性会转义任何会被解释为 Markdown 的字符。
  • 对于 Slack 连接器message 操作配置属性会转义任何会被解释为 Slack Markdown 的字符。
  • 对于 Webhook 连接器body 操作配置属性会转义任何在 JSON 字符串值中无效的字符。

Mustache 还支持 {{{variable name}}} 形式的“三花括号”,表示不应执行任何转义。谨慎使用此形式,因为它可能最终会渲染变量内容,从而导致生成的参数无效或格式错误。

一般编辑

所有规则类型都传递以下变量

date
规则调度操作的日期,以 ISO 格式表示。
kibanaBaseUrl
配置的 server.publicBaseUrl。如果未配置,则为空。
rule.id
规则标识符。
rule.name
规则名称。
rule.params
规则参数,因规则类型而异。
rule.spaceId
规则的空间标识符。
rule.tags
应用于规则的标签列表。
rule.url
生成警报的规则的 URL。如果未配置 server.publicBaseUrl 设置,则为空字符串。

操作频率:警报摘要编辑

如果规则的操作频率是警报的摘要,则它会传递以下变量

alerts.all.count
所有警报的计数。
alerts.all.data

所有警报的对象数组。以下对象属性是示例;它不是一个完整的列表。

alerts.all.data 对象的属性
kibana.alert.end
警报结束的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.flapping
警报上的一个标志,指示警报状态是否反复变化。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.instance.id
生成警报的源的 ID。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.reason
警报的原因(使用规则条件生成)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.start
警报开始的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.status
警报状态(例如,活动或正常)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
alerts.new.count
新警报的计数。
alerts.new.data

新警报的对象数组。以下对象属性是示例;它不是一个完整的列表。

alerts.new.data 对象的属性
kibana.alert.end
警报结束的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.flapping
警报上的一个标志,指示警报状态是否反复变化。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.instance.id
生成警报的源的 ID。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.reason
警报的原因(使用规则条件生成)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.start
警报开始的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.status
警报状态(例如,活动或正常)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
alerts.ongoing.count
正在进行的警报的计数。
alerts.ongoing.data

正在进行的警报的对象数组。以下对象属性是示例;它不是一个完整的列表。

alerts.ongoing.data 对象的属性
kibana.alert.end
警报结束的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.flapping
警报上的一个标志,指示警报状态是否反复变化。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.instance.id
生成警报的源的 ID。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.reason
警报的原因(使用规则条件生成)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.start
警报开始的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.status
警报状态(例如,活动或正常)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
alerts.recovered.count
恢复的警报的计数。
alerts.recovered.data

恢复的警报的对象数组。以下对象属性是示例;它不是一个完整的列表。

alerts.recovered.data 对象的属性
kibana.alert.end
警报结束的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.flapping
警报上的一个标志,指示警报状态是否反复变化。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.instance.id
生成警报的源的 ID。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.reason
警报的原因(使用规则条件生成)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.start
警报开始的日期时间戳。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
kibana.alert.status
警报状态(例如,活动或正常)。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。

操作频率:每个警报编辑

如果规则的操作频率不是警报的摘要,则它会传递以下变量

alert.actionGroup
调度操作的警报的操作组的 ID。
alert.actionGroupName
调度操作的警报的操作组的名称。
alert.actionSubgroup
调度操作的警报的操作子组。
alert.consecutiveMatches
满足规则条件的连续运行次数。
alert.flapping
警报上的一个标志,指示警报状态是否反复变化。
alert.id
调度操作的警报的 ID。
alert.uuid
警报的通用唯一标识符。在警报处于活动状态时,UUID 值在每次规则运行时保持不变。 [预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
上下文编辑

如果规则的操作频率不是警报的摘要,则规则会将其他变量定义为变量 context 的属性。例如,如果规则类型定义了一个变量 value,则可以在操作参数中使用它,例如 {{context.value}}

出于诊断或探索目的,值是对象的 action 变量(例如 context)可以直接作为变量引用。结果值将是对象的 JSON 表示形式。例如,如果操作参数包含 {{context}},它将扩展到规则类型提供的所有变量和值的 JSON 表示形式。要查看所有特定于警报的变量,请使用 {{.}}

对于规则响应返回数据数组的情况,您可以循环遍历 context

{{#context}}{{.}}{{/context}}

例如,循环遍历搜索结果命中

triggering data was:
{{#context.hits}} - {{_source.message}}
{{/context.hits}}

增强 Mustache 变量编辑

此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。

当 Mustache 模板被渲染时,您可以通过将对象渲染为 JSON 或使用 Mustache lambda 来增强 Mustache 变量中包含的值。

将对象渲染为 JSON编辑

某些连接器(例如 Webhook 连接器)在调用连接器时需要将 JSON 值作为参数传递。以下功能可用

  • 在花括号中引用的数组值具有 Mustache 预定义的渲染,作为数组元素的字符串版本,用逗号 (,) 连接。要将数组值渲染为 JSON,请访问数组的 asJSON 属性,而不是直接访问数组。例如,给定一个具有值 [1, 4, 9] 的 Mustache 变量 context.values,Mustache 模板 {{context.values}} 将渲染为 1,4,9,而 Mustache 模板 {{context.values.asJSON}} 将渲染为 [1,4,9]
  • ParseHjson lambda Mustache lambda 通过使用 Hjson(JSON 的语法扩展)而不是严格的 JSON,使在模板中创建 JSON 变得更加容易。

使用 Mustache lambda编辑

Mustache lambda 为 Mustache 模板提供额外的渲染功能。Mustache lambda 的格式类似于 Mustache 部分。例如

{{#EvalMath}} round(context.value, 1) {{/EvalMath}}

在这个例子中,lambda EvalMath 被传递了文本 round(context.value, 1),并渲染了 context.value 变量的四舍五入值。这种模式被所有后续部分描述的 Mustache lambdas 使用。

EvalMathedit

EvalMath lambda 将会把传递给它的文本作为 TinyMath 函数 进行评估。

例如,当 Mustache 变量 context.value3.1234 时,以下模板将渲染为 3.1

{{#EvalMath}} round(context.value, 1) {{/EvalMath}}

这个 lambda 可以访问 Mustache 变量,而无需将它们包装在 {{}} 中。但是,如果值是字符串形式(例如,Elasticsearch 数字字段,其源被索引为字符串),或者可能被转义,使用三引号转义值应该可以解决这个问题。例如,如果 Mustache 变量 context.value"3.1234",以下模板将渲染为 3.1

{{#EvalMath}} round( {{{context.value}}} , 1) {{/EvalMath}}
ParseHjsonedit

ParseHjson lambda 在构建 JSON 对象时提供了易用性功能。 Hjson 是 JSON 的语法扩展。它具有以下功能

  • 数组和对象中允许缺少和额外的尾随逗号。
  • 支持注释。
  • 属性名称可以不加引号指定。
  • 属性值可以不加引号指定(每行一个,没有逗号)。
  • 多行字符串支持缩进支持,以删除前导空格。
  • 支持合法的 JSON 文档。

要使用它,请将您的 Hjson 内容用 {{#ParseHjson}}...{{/ParseHjson}} 包围。例如

{{#ParseHjson}}
{
  # add the rule id and name to the JSON document
  ruleId:   "{{rule.id}}"
  ruleName: "{{rule.name}}"
}
{{/ParseHjson}}

渲染后,此模板将生成

    {
      "ruleId": "<the rule id is here>",
      "ruleName": "<the rule name is here>"
    }
FormatDateedit

FormatDate lambda 提供日期格式化功能。日期可以在任意时区和任意格式字符串中进行格式化。

要使用它,请将日期和格式化参数用 {{#FormatDate}}...{{/FormatDate}} 包围。

传递给 lambda 的文本格式为:<date>; <time zone>; <date format>,其中分号 (;) 分隔每个参数。 <date> 参数是必需的;<time zone><date format> 参数是可选的。默认时区为 "UTC",默认日期格式为 "YYYY-MM-DD hh:mma"。例如,以下模板都渲染相同的值

    {{#FormatDate}} {{{timestamp}}} {{/FormatDate}}
    {{#FormatDate}} {{{timestamp}}} ; UTC {{/FormatDate}}
    {{#FormatDate}} {{{timestamp}}} ; UTC; YYYY-MM-DD hh:mma {{/FormatDate}}
    {{#FormatDate}} {{{timestamp}}} ; ; YYYY-MM-DD hh:mma {{/FormatDate}}

<time zone> 参数必须是 TZ 数据库时区名称 中列出的有效时区标识符,例如 "America/New_York"

<date format> 参数必须是 Moment format() 文档 中描述的有效日期格式字符串。例如,日期格式 "YYYY-MM-DD hh:mma" 将以以下格式渲染:"2023-04-24 11:21pm"

日期值本身通常应该用三花括号引用,因为日期字符串中的一些字符可能包含被转义的值,这将阻止它们被解析为日期。

FormatNumberedit

FormatNumber lambda 使用 Intl.NumberFormat 对象 提供数字格式化功能。

可以使用以下 Intl.NumberFormat 选项对数字进行格式化

  • compactDisplay
  • currencyDisplay
  • currencySign
  • notation
  • signDisplay
  • unitDisplay
  • unit
  • useGrouping - 但只有值 true 和 false
  • minimumIntegerDigits
  • minimumFractionDigits
  • maximumFractionDigits
  • minimumSignificantDigits
  • maximumSignificantDigits

要使用 lambda,请将数字和格式化选项用 {{#FormatNumber}}...{{/FormatNumber}} 包围。

传递给 lambda 的文本格式为:<number>; <locales>; <options>,其中分号 (;) 分隔每个参数。 <number> 参数是必需的;它是要格式化的值。 <locales><options> 参数是可选的,但必须提供分号;值可以为空字符串。 <locales> 参数是通过逗号 (,) 分隔的区域设置列表。 <options> 参数是通过逗号 (,) 分隔的键值对列表。键值对是通过冒号 (:) 分隔的字符串,其中键是选项的名称,值是选项的值。默认区域设置为 en-US,默认情况下不设置任何选项。

有关区域设置字符串的更多信息,请参阅 Intl 参考中的 locales 参数文档

可以在其中使用的选项和值列在 Intl.NumberFormat() 构造函数文档 中的 options 下。

例如

    original value: {{{context.value.condition0}}}
    formatted value: {{#FormatNumber}}
        {{{context.value.condition0}}} ; de-DE ; style: currency, currency: EUR
    {{/FormatNumber}}

如果上下文变量 context.value.condition0 的值为 628.4,则会生成以下文本

    original value: 628.4
    formatted value: 628,40 €

{{FormatNumber}}{{EvalMath}} lambda 可以一起使用,对数字执行计算,然后对其进行格式化。例如

    original value: {{{context.value.condition0}}}
    formatted value: {{#FormatNumber}}
      {{#EvalMath}} {{context.value.condition0}} * 0.1 {{/EvalMath}}
      ; de-DE ; style: currency, currency: EUR
    {{/FormatNumber}}

如果上下文变量 context.value.condition0 的值为 628.4,则会生成以下文本

    original value: 628.4
    formatted value: 62,84 €

Mustache 示例edit

此示例演示了从 Elasticsearch 查询规则发送的电子邮件操作的 Mustache 模板。该模板引用了以下 Mustache 变量

  • date
  • context.title
  • context.conditions
  • context.link
  • context.hits[]._source.event.provider
  • context.hits[]._source.event.action
  • context.hits[]._source.event.duration

例如,如果您有以下数据可用作 Mustache 变量

{
  "date": "2023-04-27T22:40:34.153Z",
  "context": {
    "title": "rule 'esq' matched query for group host-2",
    "conditions": "Number of matching documents for group \"host-2\" is less than 1000",
    "link": "https://example.com/this-will-link-to-Discover",
    "hits": [
      {
        "_source": {
          "event": {
            "provider": "alerting",
            "action": "active-instance",
            "duration": "96023000000"
          }
        }
      },
      {
        "_source": {
          "@timestamp": "2023-04-27T22:40:22.251Z",
          "event": {
            "provider": "alerting",
            "action": "execute-action"
          }
        }
      }
    ]
  }
}

您可以在规则的电子邮件操作中创建以下 Mustache 模板

# {{context.title}} 

{{#FormatDate}} {{{date}}} ; America/New_York {{/FormatDate}} 

{{context.conditions}}

**documents** _[view in Discover]({{{context.link}}})_ 

| provider | action | duration | 
| -------- | ------ | -------- |
{{#context.hits}}{{#_source.event}}| {{provider}} | {{action}} | {{#duration}}{{#EvalMath}} round( {{{duration}}} / 1000 / 1000 / 1000 ) {{/EvalMath}} sec{{/duration}} {{^duration}}-n/a-{{/duration}} |{{/_source.event}}
{{/context.hits}}

context.title 变量的值渲染为一级标题。

date 变量的值渲染为 America/New_York 时区的格式化日期。

显示 **bold**_italic_[text](url) 链接的示例。

显示一个包含三列的表格,每行对应 context.hits 数组中的一个元素。从这些元素中的每一个,您可以访问 _source.event 对象的 provideractionduration 字段。 duration 字段被渲染为秒数,四舍五入到最接近的秒。它存储为纳秒,因此需要除以十亿才能得到秒。duration 字段是可选的,因此您可以使用 {{#duration}} ... {{/duration}} 部分来渲染 duration(如果存在)并显示 -n/a-(否则)。

当渲染为 Markdown,然后渲染为 HTML 并显示在电子邮件客户端中时,它看起来像这样

Email template rendered in an email client