In <3BD667CCFBD0D04CA2BC3D57D01B64264CA04A6083 at HORMXB103VM1.onerm.dk> Carl Melgaard <Carl.Melgaard at STAB.RM.DK> writes:
[free] total used free shared buffers cached Mem: 3921396 3851576 69820 0 319192 3903296= =20 -/+ buffers/cache: 18014398509111072 4292308=20 Swap: 2104472 904 2103568 I have to plead "not guilty" on behalf of Xymon, then. The data reported=20 by "free" in the "+/- buffers/cache" line is obviously bogus - but it is what Xymon uses for the "Actual" memory calculations. If Xymon gets=20 bogus data, then you will also have bogus results.
Yes, thats understandable. Is there any way I can NOT trigger notification = on these bogus alerts? Disable the MEMACT check for that host?
Not in the code You have. But it seems reasonable to add some sort of sanity check in the memory-status handler, so I've done that to only act on the data when the percent-used is at most 100%. So you will a) not get alerts from the bogus data, and b) you can disable all memory alerts by setting a threshold greater than 100. Patch below should apply to 4.3.0-beta3. Regards, Henrik Index: xymond/xymond_client.c =================================================================== --- xymond/xymond_client.c (revision 6590) +++ xymond/xymond_client.c (working copy) @@ -883,17 +883,19 @@ get_memory_thresholds(hinfo, clientclass, &physyellow, &physred, &swapyellow, &swapred, &actyellow, &actred); memphyspct = (memphystotal > 0) ? ((100 * memphysused) / memphystotal) : 0; - if (memphyspct > physyellow) physcolor = COL_YELLOW; - if (memphyspct > physred) physcolor = COL_RED; + if (memphyspct <= 100) { + if (memphyspct > physyellow) physcolor = COL_YELLOW; + if (memphyspct > physred) physcolor = COL_RED; + } - if (memswapused != -1) { - memswappct = (memswaptotal > 0) ? ((100 * memswapused) / memswaptotal) : 0; + if (memswapused != -1) memswappct = (memswaptotal > 0) ? ((100 * memswapused) / memswaptotal) : 0; + if (memswappct <= 100) { if (memswappct > swapyellow) swapcolor = COL_YELLOW; if (memswappct > swapred) swapcolor = COL_RED; } - if (memactused != -1) { - memactpct = (memphystotal > 0) ? ((100 * memactused) / memphystotal) : 0; + if (memactused != -1) memactpct = (memphystotal > 0) ? ((100 * memactused) / memphystotal) : 0; + if (memactpct <= 100) { if (memactpct > actyellow) actcolor = COL_YELLOW; if (memactpct > actred) actcolor = COL_RED; } @@ -927,14 +929,24 @@ addtostatus(msgline); if (memactused != -1) { - sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%%\n", - colorname(actcolor), "Actual", memactused, memphystotal, memactpct); + if (memactpct <= 100) + sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%%\n", + colorname(actcolor), "Actual", memactused, memphystotal, memactpct); + else + sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%% - invalid data\n", + colorname(COL_CLEAR), "Actual", memactused, memphystotal, 0); + addtostatus(msgline); } if (memswapused != -1) { - sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%%\n", - colorname(swapcolor), "Swap", memswapused, memswaptotal, memswappct); + if (memswappct <= 100) + sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%%\n", + colorname(swapcolor), "Swap", memswapused, memswaptotal, memswappct); + else + sprintf(msgline, "&%s %-12s%11luM%11luM%11lu%% - invalid data\n", + colorname(COL_CLEAR), "Swap", memswapused, memswaptotal, 0); + addtostatus(msgline); } if (fromline && !localmode) addtostatus(fromline);