Search code examples
bosun

Bosun how to add series with different tags?


I'm trying to add 4 series using bosun expressions. They are from 1,2,3,4 weeks ago. I shifted them using shift() to have current time. But I can't add them since they have the shift=1w etc tags. How can I add these series together? Thank you

edit: here's the query for 2 weeks

$period = d("1w")
$duration = d("30m")

$week1end = tod(1 * $period )
$week1start = tod(1 * $period + $duration )

$week2end = tod(2 * $period )
$week2start = tod(2 * $period + $duration )

$q1 = q("avg:1m-avg:os.cpu{host=myhost}", $week1start, $week1end)
$q2 = q("avg:1m-avg:os.cpu{host=myhost}", $week2start, $week2end)

$shiftedq1 = shift($q1, "1w")
$shiftedq2 = shift($q2, "2w")

$shiftedq1+ $shiftedq2

edit: here's what Bosun said enter image description here

The problem is similar to: How do I add the series present in the output of an over query:

over("avg:1m-avg:os.cpu{host=myhost}", "30m", "1w", 2)

Solution

  • There is a new function called addtags that is pending documentation (see https://raw.githubusercontent.com/bosun-monitor/bosun/master/docs/expressions.md for draft) which seems to work when combined with rename. Changing the last line to:

    $shiftedq1+addtags(rename($shiftedq2,"shift=shiftq2"),"shift=1w")
    

    should generate a single result group like { host=hostname, shift=1w, shiftq2=2w }. If you add additional queries for q3 and q4 you probably need to rename the shift tag for those to unique values like shiftq3 and shiftq4.

    If you were using a numbersets instead of seriessets, then the Transpose function would let you "Drop" the unwanted tags. This is useful when generating alerts, since crit and warn need a single number value not a series set:

    $average_per_q = avg(merge($shiftedq1,$shiftedq2))
    $sum_over_all = sum(t($average_per_q,"host"))
    Result: { host=hostname } 7.008055555555557
    

    Side note you probably want to use a counter for os.cpu instead of a gauge. Example: $q1 = q("avg:1m-avg:rate{counter,,1}:os.cpu{. Without that rate section you are using the raw counter values instead of the gauge value.