您可以使用子句和资源条目别名来增强您的超级指标。

Where 子句

Where 子句验证是否可在超级指标中使用特定的衡量指标值。使用此子句指向同一对象的不同衡量指标,例如 where=(${metric=metric_group|my_metric} > 0)

例如:count(${objecttype = ExampleAdapter, adaptertype = ExampleObject, metric = ExampleGroup|Rating, depth=2, where =($value==1})

IsFresh 函数

where 子句中使用 isFresh 函数检查衡量指标的最后一个值是否为最新。

对于 vRealize Operations 中发布的每个衡量指标,具有最新发布时间的点称为该衡量指标的最后一个点。该衡量指标的最后一个点的值称为该衡量指标的最后一个值。当衡量指标的最后一个点之后经过的时间小于该衡量指标的估计发布间隔时,衡量指标的最后一个点被视为最新。

如果衡量指标的最后一个值是最新的,则 isFresh 函数将返回 true。例如,在以下情况下:
  • 如果最后一个值是最新的,函数 ${this, metric=a|b, where=($value.isFresh())} 将返回衡量指标 a|b 的最后一个值。
  • 如果衡量指标 a|b 的最后一个值等于 7 且是最新的,则函数 ${this, metric=a|b, where=($value == 7 && $value.isFresh())} 将返回该值。
  • 只有当衡量指标 c|d 的最后一个值等于 7 且是最新的时,函数 ${this, metric=a|b, where=(${metric=c|d} == 7 && ${metric=c|d}.isFresh())} 才会返回衡量指标 a|b 的最后一个值。

资源条目别名

资源条目用于从 vRealize Operations 检索衡量指标数据以用于计算超级指标。资源条目是表达式的一部分,以 $ 开头,后跟 {..} 块。当计算超级指标时,您可能必须多次使用相同的资源条目。如果您必须更改计算,则必须更改每个资源条目,这可能会导致出错。您可以使用资源条目别名重写表达式。

以下示例显示已使用两次的资源条目。

(min(${adaptertype=VMWARE, objecttype=HostSystem, attribute= cpu|demand|active_longterm_load, depth=5, where=($value>=0)}) + 0.0001)/(max(${adaptertype=VMWARE, objecttype=HostSystem, attribute=cpu|demand|active_longterm_load, depth=5, where=($value>=0)}) + 0.0001)"

以下示例显示如何使用资源条目别名编写表达式。这两个表达式的输出是相同的。

(min(${adaptertype=VMWARE, objecttype=HostSystem, attribute= cpu|demand|active_longterm_load, depth=5, where=($value>=0)} as cpuload) + 0.0001)/(max(cpuload) + 0.0001)"
在使用资源条目别名时,请遵循以下准则:
  • 创建别名时,确保在资源条目后依次编写 asalias:name。例如:${…} as alias_name
  • 别名不得包含 ()[]+-*/%|&! =<>,.? :$ 特殊字符,并且不能以数字开头。
  • 别名名称(如超级指标表达式中的所有名称)不区分大小写。
  • 使用别名是可选的。您可以定义别名,而不要在表达式中使用它。
  • 每个别名都只能使用一次。例如: ${resource1,…} as r1 + ${resource2,…} as R1
  • 您可以为同一资源条目指定多个别名。例如:${…} as a1 as a2

条件表达式 ?: 三元运算符

您可以在表达式中使用三元运算符来运行条件表达式。

例如:expression_condition ? expression_if_true : expression_if_false

条件表达式的结果将转换为数字。如果值不为 0,则条件假设为 true。

例如:-0.7 ? 10 : 20 等于 10。2 + 2 / 2 - 3 ? 4 + 5 / 6 : 7 + 8 等于 15 (7 + 8)。

根据条件,将运行 expression_if_trueexpression_if_false,但不会同时执行两者。这样,您可以编写表达式,例如 ${this, metric=cpu|demandmhz} as a ! = 0 ? 1/a : -1。三元运算符可以在其所有表达式中包含其他运算符,包括其他三元运算符。

例如:! 1 ? 2 ? 3 : 4 : 5 等于 5。