[mrtg] Threshold problem

Adam Bayless adam at baylessfamily.org
Thu Oct 25 19:16:09 CEST 2007


Adam Bayless thought no one was listening and belted out:
> So MRTG has stumped me for the first time in a long while :( It's not calling the 
> threshold program I've got defined for just one of my targets. I can't figure out 
> what I've done wrong. The threshold program runs fine if I run it separately and MRTG 
> is logging values that break the threshold, but it is not calling the program.
> 
> It's pulling electric current values from a UPS and the only part that's not working 
> is the threshold. The graphs and html are all getting created perfectly. I must be 
> missing something obvious here. HELP??
> 
> -adam
> 
> 
> 
> Here's the relevant info:
> 
> MRTG Version
> ------------------------------
> mrtg-2.15.2
> 
> 
> Config Snippet
> ------------------------------
> WorkDir: /mrtg/www/docs/backbone/fbp/dataCenterPower/ups2/ups
> WriteExpires: Yes
> 
> Target[outputAmpsLeg1]: upsOutputCurrent.1&upsOutputCurrent.1:XXX at XXXXXX:
> Title[outputAmpsLeg1]: Output Amps * 10 - Leg 1
> MaxBytes[outputAmpsLeg1]: 1400
> AbsMax[outputAmpsLeg1]: 5000
> Options[outputAmpsLeg1]: gauge,expscale
> WithPeak[outputAmpsLeg1]: dwmy
> YLegend[outputAmpsLeg1]: AMPS * 10
> ShortLegend[outputAmpsLeg1]: amps * 10
> ThreshMaxI[outputAmpsLeg1]: 700
> ThreshProgI[outputAmpsLeg1]: /mrtg/bin/threshold-programs/customer-amps-alert.pl
> SetEnv[outputAmpsLeg1]: MAILTO="adam at baylessfamily.org" CIRCUIT="UPS2 Leg 1" 
> MULTIPLIER="10"
> PageTop[outputAmpsLeg1]: <h1>Output Amps * 10 -  Leg 1</h1>
> 
> 

snip

Here's a bit more info on the problem. I went into the source code and found that my 
config is not making it past the conditionals in this section (starts at line 1923 in 
mrtg):


-------------------------------------------------------------------------------
                   # Check if we use the status file or not...
                   if ( defined $threshfile ) {
                     if ( not -e $threshfile.".".$bound.uc($dir) ) {
                         # Create a file to indicate a threshold problem for the time 
after the problem
                         open THRESHTOUCH, ">".$threshfile.".".$bound.uc($dir)
                             or warn "$NOW: WARNING: Creating 
$threshfile.".$bound.uc($dir).": $!\n";
                         close THRESHTOUCH;
                         if (defined $$rcfg{'threshprog'.$dir}{$router}){
                              debug('base',"run threshprog$dir: ".(join ",", at exec));
                              system @exec;
                         }
                         threshmail 
$cfg->{threshmailserver},$cfg->{threshmailsender},$rcfg->{threshmailaddress}{$router},$message
                            if $rcfg->{threshmailaddress}{$router}

                     } else {
                         debug('base',"NOT acting on BROKEN threshold since 
$threshfile.$bound$dir exists");
                     }
                   } elsif ( not defined $cfg->{threshhyst} or
                             ($bound eq 'min' and $boundval - $cfg->{threshhyst}* 
$boundval < $threshval) or
                             ($bound eq 'max' and $boundval + $cfg->{threshhyst}* 
$boundval > $threshval)
                           ) {
                      # no threshold dir so run on every 'break'
                      if (defined $$rcfg{'threshprog'.$dir}{$router}){
                              debug('base',"run threshprog$dir: ".(join ",", at exec));
                              system @exec;
                      }
                      threshmail 
$cfg->{threshmailserver},$cfg->{threshmailsender},$rcfg->{threshmailaddress}{$router},$message
                            if $rcfg->{threshmailaddress}{$router};
                   }


-------------------------------------------------------------------------------



If I tack on a little more code then I get the behavior I expect:



-------------------------------------------------------------------------------

                   else {
                      if (defined $$rcfg{'threshprog'.$dir}{$router}){
                              debug('base',"hack run threshprog$dir: ".(join ",", at exec));
                              system @exec;
                      }
                   }

-------------------------------------------------------------------------------


What I can't figure out is why my config doesn't meet this criteria:


-------------------------------------------------------------------------------
                   } elsif ( not defined $cfg->{threshhyst} or
                             ($bound eq 'min' and $boundval - $cfg->{threshhyst}* 
$boundval < $threshval) or
                             ($bound eq 'max' and $boundval + $cfg->{threshhyst}* 
$boundval > $threshval)
                           ) {
-------------------------------------------------------------------------------


I don't have threshhyst defined in the config file so that if should evaluate to 
true!! As far as I can find in the code there is no global definition for threshhyst 
that would override the fact that I haven't defined it in my config file.

Anyone have any ideas?



More information about the mrtg mailing list