水手长时间依赖警报
bosun time depended alerts
早上好。
最近几天我一直在使用 bosun 监控应用程序,我非常喜欢它。但是我需要一件我无法解决的事情。
我想要 1 个响应根据时间不同而不同的警报。因此,白天每小时登录我网站的次数需要为 100,晚上需要为 10。当低于该值时,我想创建一个警报。
如果我用 2 个警报执行此操作,则白天警报将在晚上关闭。所以我需要进行查找以检查现在几点,然后给出正确的阈值。
有人知道怎么做。
马塞尔·科尔特
Bosun没有这个功能。我考虑过,但从未向我展示过必要的用例。为什么?
我考虑过两种一般情况:
- 某些作业或事件在时间 X 运行,并且您不想发出警报,因为它期望在该作业运行时发生某些事情。在这种情况下,最好监视作业,而不是在作业 运行 时发出警报。这使得耦合更紧密 - 因此当您更改作业的时间时,警报仍然不会误触发。
- 随时间变化的事物。如果我没记错的话,你指的就是这种情况。发生这种情况时,我们会看到一些 季节性 数据(在以下示例中,每周季节性):
为了处理这种情况,我们使用了异常警报。这有效地表达了类似 "This is not what it was like at the same hour of the week for the past few weeks, send an alert" 的意思。关键函数是 band function. Here is an example of doing this from examples page:
alert slower.route.performance {
template = route.performance
$notes = Response time is based on HAProxy's Tr Value. This is the web server response time (time elapsed between the moment the TCP connection was established to the web server and the moment it send its complete response header
$duration = "1d"
$route=*
$metric = "sum:10m-avg:haproxy.logs.route_tr_median{route=$route}"
$route_hit_metric = "sum:10m-avg:rate{counter,,1}:haproxy.logs.hits_by_route{route=$route}"
$total_hit_metric = "sum:10m-avg:rate{counter,,1}:haproxy.logs.hits_by_route"
$route_hits = change($route_hit_metric, $duration, "")
$total_hits = change($total_hit_metric, $duration, "")
$hit_percent = $route_hits / $total_hits * 100
$current_hitcount = len(q($metric, $duration, ""))
$period = "7d"
$lookback = 4
$history = band($metric, $duration, $period, $lookback)
$past_dev = dev($history)
$past_median = percentile($history, .5)
$current_median = percentile(q($metric, $duration, ""), .5)
$diff = $current_median - $past_median
warn = $current_median > ($past_median + $past_dev*2) && abs($diff) > 10 && $hit_percent > 1
warnNotification = default
ignoreUnknown = true
}
希望这条路径能解决您的警报需求?
使用 epoch()
函数,您可以确定现在的时间。只需 mod epoch()
每天 86400 秒,您就有了相对于当天的秒数。将其与您希望 window 开始和结束的 UTC 时间的开始和结束秒数进行比较。
如果评估警报的时间介于 08:00 和 03:00 UTC 之间,则此宏将 $during_business_hours 设置为真。
macro business_hours {
$time = epoch() % 86400
$start = 8 * 3600
$end = 3 * 3600
$during_business_hours = $time >= $start || $time <= $end
}
早上好。
最近几天我一直在使用 bosun 监控应用程序,我非常喜欢它。但是我需要一件我无法解决的事情。
我想要 1 个响应根据时间不同而不同的警报。因此,白天每小时登录我网站的次数需要为 100,晚上需要为 10。当低于该值时,我想创建一个警报。
如果我用 2 个警报执行此操作,则白天警报将在晚上关闭。所以我需要进行查找以检查现在几点,然后给出正确的阈值。
有人知道怎么做。
马塞尔·科尔特
Bosun没有这个功能。我考虑过,但从未向我展示过必要的用例。为什么?
我考虑过两种一般情况:
- 某些作业或事件在时间 X 运行,并且您不想发出警报,因为它期望在该作业运行时发生某些事情。在这种情况下,最好监视作业,而不是在作业 运行 时发出警报。这使得耦合更紧密 - 因此当您更改作业的时间时,警报仍然不会误触发。
- 随时间变化的事物。如果我没记错的话,你指的就是这种情况。发生这种情况时,我们会看到一些 季节性 数据(在以下示例中,每周季节性):
为了处理这种情况,我们使用了异常警报。这有效地表达了类似 "This is not what it was like at the same hour of the week for the past few weeks, send an alert" 的意思。关键函数是 band function. Here is an example of doing this from examples page:
alert slower.route.performance {
template = route.performance
$notes = Response time is based on HAProxy's Tr Value. This is the web server response time (time elapsed between the moment the TCP connection was established to the web server and the moment it send its complete response header
$duration = "1d"
$route=*
$metric = "sum:10m-avg:haproxy.logs.route_tr_median{route=$route}"
$route_hit_metric = "sum:10m-avg:rate{counter,,1}:haproxy.logs.hits_by_route{route=$route}"
$total_hit_metric = "sum:10m-avg:rate{counter,,1}:haproxy.logs.hits_by_route"
$route_hits = change($route_hit_metric, $duration, "")
$total_hits = change($total_hit_metric, $duration, "")
$hit_percent = $route_hits / $total_hits * 100
$current_hitcount = len(q($metric, $duration, ""))
$period = "7d"
$lookback = 4
$history = band($metric, $duration, $period, $lookback)
$past_dev = dev($history)
$past_median = percentile($history, .5)
$current_median = percentile(q($metric, $duration, ""), .5)
$diff = $current_median - $past_median
warn = $current_median > ($past_median + $past_dev*2) && abs($diff) > 10 && $hit_percent > 1
warnNotification = default
ignoreUnknown = true
}
希望这条路径能解决您的警报需求?
使用 epoch()
函数,您可以确定现在的时间。只需 mod epoch()
每天 86400 秒,您就有了相对于当天的秒数。将其与您希望 window 开始和结束的 UTC 时间的开始和结束秒数进行比较。
如果评估警报的时间介于 08:00 和 03:00 UTC 之间,则此宏将 $during_business_hours 设置为真。
macro business_hours {
$time = epoch() % 86400
$start = 8 * 3600
$end = 3 * 3600
$during_business_hours = $time >= $start || $time <= $end
}