规则动作变量
编辑规则动作变量
编辑告警规则可以使用 Mustache 模板语法 ({{变量名}}
) 在动作运行时传递值。
常用变量
编辑可用变量因规则类型而异,但有一些常用变量
在某些情况下,当在需要转义的上下文中使用时,变量值将被“转义”。例如
- 对于 电子邮件连接器,
message
动作配置属性会转义任何会被解释为 Markdown 的字符。 - 对于 Slack 连接器,
message
动作配置属性会转义任何会被解释为 Slack Markdown 的字符。 - 对于 Webhook 连接器,
body
动作配置属性会转义 JSON 字符串值中任何无效的字符。
Mustache 还支持形如 {{{变量名}}}
的“三重大括号”,表示根本不应进行转义。请谨慎使用此形式,因为它最终可能会渲染变量内容,导致生成的参数无效或格式不正确。
常规
编辑所有规则类型都传递以下变量
-
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}}
。
出于诊断或探索目的,其值是对象的动作变量(例如 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 lambda 均使用此模式。
EvalMath
编辑EvalMath lambda 会将传递给它的文本评估为 TinyMath 函数。
例如,当 Mustache 变量 context.value
的值为 3.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}}
ParseHjson
编辑ParseHjson lambda 在构建 JSON 对象时提供了易用性功能。Hjson 是 JSON 的语法扩展。它具有以下功能
- 允许在数组和对象中缺少和多余的尾随逗号。
- 支持注释。
- 可以在不使用引号的情况下指定属性名称。
- 可以在不使用引号的情况下指定属性值(每行一个,且没有逗号)。
- 多行字符串具有 dedent 支持,以删除前导空格。
- 支持合法的 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>" }
FormatDate
编辑FormatDate lambda 提供了日期格式化功能。可以使用任意时区和任意格式字符串格式化日期。
要使用它,请将日期和格式化参数用 {{#FormatDate}}...{{/FormatDate}}
包围。
传递给 lambda 的文本格式为:<日期>; <时区>; <日期格式>
,其中分号 (;
) 分隔每个参数。<日期>
参数是必需的;<时区>
和 <日期格式>
参数是可选的。默认时区为 "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}}
<时区>
参数必须是 TZ 数据库时区名称 中列出的有效时区标识符,例如 "America/New_York"
。
<日期格式>
参数必须是 Moment format()
文档 中描述的有效日期格式字符串。例如,日期格式 "YYYY-MM-DD hh:mma"
将以以下格式呈现:"2023-04-24 11:21pm"
。
日期值本身通常应使用三花括号引用,因为日期字符串中的某些字符可能包含被转义的值,这会阻止它们被解析为日期。
FormatNumber
编辑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 的文本格式为:<数字>; <区域设置>; <选项>
,其中分号 (;
) 分隔每个参数。<数字>
参数是必需的;它是要格式化的值。<区域设置>
和 <选项>
参数是可选的,但必须提供分号;值可以为空字符串。<区域设置>
参数是由逗号 (,
) 分隔的区域设置列表。<选项>
参数是由逗号 (,
) 分隔的键值对列表。键值对是由冒号 (:
) 分隔的字符串,其中键是选项的名称,值是选项的值。默认区域设置为 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 示例
编辑此示例演示了从 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}}
将 |
|
将 |
|
显示 |
|
显示一个包含三列的表格, |
当渲染为 Markdown,然后渲染为 HTML 并在电子邮件客户端中查看时,它看起来像这样