In <user-b025057e2892@xymon.invalid> Carl Melgaard <user-cdea55422fa4@xymon.invalid> 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);