如何在bosun的石墨查询中使用NumberExpr

How to use NumberExpr in graphite query in bosun

我使用宏来定义核心计算。而且我希望尽可能少地为宏定义参数。所以,我有一个宏,它的计算基于变量 $period。然后我尝试在石墨查询中使用与 period 相关的变量,但我收到一个错误。

简化代码:

# defined outside a macro
$period_min = 5

#macro, skipping irrelevant variables
$control_period_min = $period_min * 3

$periods = graphiteBand( $expr, "${control_period_min}m", "1h", "tag", 1 )

生产:

graphiteBand: time: unknown unit * in duration 5 * 3m

我想知道,是否可以用不同的方式实现相同的逻辑?

变量只是字符串替换。由于您已将其放在引号中,因此您正在制作一个字面意思为“5 * 3”的字符串。

您可以使用 tod() function:

# defined outside a macro
$period_min = 5

#macro, skipping irrelevant variables
$control_period_min = $period_min * 3

avg(q("avg:rate:os.cpu{host=*bosun*}", tod($control_period_min), ""))