You can enhance your super metrics by using clauses and resource entry aliasing.
Where Clause
The where clause verifies whether a particular metric value can be used in the super metric. Use this clause to point to a different metric of the same object, such as where=(${metric=metric_group|my_metric} > 0).
For example: count(${objecttype = ExampleAdapter, adaptertype = ExampleObject, metric = ExampleGroup|Rating, depth=2, where =($value==1})
IsFresh Function
Use the isFresh function in the where clause to check if the last value of the metrics is fresh or not.
For every metric published in vRealize Operations, the point with the latest publishing time is called as the last point of that metric. The value of that metric’s last point is called the last value of that metric. A metric’s last point is considered fresh when the time elapsed after the metric’s last point is lesser than the estimated publishing interval of that metric.
- ${this, metric=a|b, where=($value.isFresh())}, returns the last value of the metric a|b if the last value is fresh.
- ${this, metric=a|b, where=($value == 7 && $value.isFresh())}, returns the last value of the metric a|b if it is equal to seven and is fresh.
- ${this, metric=a|b, where=(${metric=c|d} == 7 && ${metric=c|d}.isFresh())}, returns the last value of the metric a|b only if the last value of the metric c|d is equal to seven and is fresh.
Resource Entry Aliasing
Resource entries are used to retrieve metric data from vRealize Operations for computing super metrics. A resource entry is the part of an expression which begins with $ followed by a {..} block. When computing a super metric, you might have to use the same resource entry multiple times. If you have to change your computation, you must change every resource entry, which might lead to errors. You can use resource entry aliasing to rewrite the expression.
The following example, shows a resource entry that has been used twice.
(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)"The following example shows how to write the expressing using resource entry aliasing. The output of both expressions is the same.
(min(${adaptertype=VMWARE, objecttype=HostSystem, attribute= cpu|demand|active_longterm_load, depth=5, where=($value>=0)} as cpuload) + 0.0001)/(max(cpuload) + 0.0001)"- When you create an alias, make sure that after the resource entry you write as and then alias:name. For example: ${…} as alias_name.
- The alias cannot contain the ()[]+-*/%|&!=<>,.?:$ special characters, and cannot begin with a digit.
- An alias name, like all names in super metric expressions, is case-insensitive.
- Use of an alias name is optional. You can define the alias, and not use it in an expression.
- Each alias name can be used only once. For example: ${resource1,…} as r1 + ${resource2,…} as R1.
- You can specify multiple aliases for the same resource entry. For example: ${…} as a1 as a2.
Conditional Expression ?: Ternary Operators
You can use a ternary operator in an expression to run conditional expressions.
For example: expression_condition ? expression_if_true : expression_if_false.
The result of the conditional expression is converted to a number. If the value is not 0, then the condition is assumed as true.
For example: -0.7 ? 10 : 20 equals 10. 2 + 2 / 2 - 3 ? 4 + 5 / 6 : 7 + 8 equals 15 (7 + 8).
Depending on the condition, either expression_if_true or expression_if_false is run, but not both of them. In this way, you can write expressions such as, ${this, metric=cpu|demandmhz} as a != 0 ? 1/a : -1. A ternary operator can contain other operators in all its expressions, including other ternary operators.
For example: !1 ? 2 ? 3 : 4 : 5 equals 5.