Add lag thresholds to cluster-zone check

fixes #11772
This commit is contained in:
Michael Friedrich 2016-06-24 10:17:45 +02:00
parent 091274e417
commit 1451a0e5ad
2 changed files with 26 additions and 4 deletions

View File

@ -54,9 +54,11 @@ Check command for the built-in `cluster-zone` check.
Custom attributes passed as [command parameters](3-monitoring-basics.md#command-passing-parameters): Custom attributes passed as [command parameters](3-monitoring-basics.md#command-passing-parameters):
Name | Description Name | Description
-------------|--------------- ---------------------|---------------
cluster_zone | **Optional.** The zone name. Defaults to "$host.name$". cluster_zone | **Required.** The zone name.
cluster_lag_warning | **Optional.** Warning threshold for log lag in seconds.
cluster_lag_critical | **Optional.** Critical threshold for log lag in seconds.
### <a id="itl-icinga-ido"></a> ido ### <a id="itl-icinga-ido"></a> ido

View File

@ -61,6 +61,15 @@ void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const Che
String zoneName = MacroProcessor::ResolveMacros("$cluster_zone$", resolvers, checkable->GetLastCheckResult(), String zoneName = MacroProcessor::ResolveMacros("$cluster_zone$", resolvers, checkable->GetLastCheckResult(),
NULL, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros); NULL, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
String missingLagWarning;
String missingLagCritical;
double lagWarning = MacroProcessor::ResolveMacros("$cluster_lag_warning$", resolvers, checkable->GetLastCheckResult(),
&missingLagWarning, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
double lagCritical = MacroProcessor::ResolveMacros("$cluster_lag_critical$", resolvers, checkable->GetLastCheckResult(),
&missingLagCritical, MacroProcessor::EscapeCallback(), resolvedMacros, useResolvedMacros);
if (resolvedMacros && !useResolvedMacros) if (resolvedMacros && !useResolvedMacros)
return; return;
@ -101,8 +110,19 @@ void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const Che
cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag)); cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag));
} }
/* Check whether the thresholds have been resolved and compare them */
if (missingLagCritical.IsEmpty() && zoneLag > lagCritical) {
cr->SetState(ServiceCritical);
cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag)
+ " greater than critical threshold: " + Utility::FormatDuration(lagCritical));
} else if (missingLagWarning.IsEmpty() && zoneLag > lagWarning) {
cr->SetState(ServiceWarning);
cr->SetOutput("Zone '" + zoneName + "' is connected. Log lag: " + Utility::FormatDuration(zoneLag)
+ " greater than warning threshold: " + Utility::FormatDuration(lagWarning));
}
Array::Ptr perfdata = new Array(); Array::Ptr perfdata = new Array();
perfdata->Add(new PerfdataValue("slave_lag", zoneLag)); perfdata->Add(new PerfdataValue("slave_lag", zoneLag, false, "s", lagWarning, lagCritical));
cr->SetPerformanceData(perfdata); cr->SetPerformanceData(perfdata);
checkable->ProcessCheckResult(cr); checkable->ProcessCheckResult(cr);