On 2014-02-24 12:11, Sander Steffann wrote:
Hi,
Ah, 32-bit gauge overflow :-)
They provide two values as 32-bit:
cempMemPoolUsed at 1.3.6.1.4.1.9.9.221.1.1.1.1.7 cempMemPoolFree at 1.3.6.1.4.1.9.9.221.1.1.1.1.8
and two values as 64-bit:
cempMemPoolHCUsed at 1.3.6.1.4.1.9.9.221.1.1.1.1.18 cempMemPoolHCFree at 1.3.6.1.4.1.9.9.221.1.1.1.1.20
Ahh, I never saw these OIDs before!
As you can see the Free gauges are different, and the difference is exactly 4294967296:
iso.3.6.1.4.1.9.9.221.1.1.1.1.3.18788073.1 = STRING: "processor" iso.3.6.1.4.1.9.9.221.1.1.1.1.3.52690955.1 = STRING: "processor" iso.3.6.1.4.1.9.9.221.1.1.1.1.7.18788073.1 = Gauge32: 2872316328 iso.3.6.1.4.1.9.9.221.1.1.1.1.7.52690955.1 = Gauge32: 3474185272 iso.3.6.1.4.1.9.9.221.1.1.1.1.8.18788073.1 = Gauge32: 1225519104 iso.3.6.1.4.1.9.9.221.1.1.1.1.8.52690955.1 = Gauge32: 621715456 iso.3.6.1.4.1.9.9.221.1.1.1.1.18.18788073.1 = Counter64: 2872316328 iso.3.6.1.4.1.9.9.221.1.1.1.1.18.52690955.1 = Counter64: 3474185272 iso.3.6.1.4.1.9.9.221.1.1.1.1.20.18788073.1 = Counter64: 5520486400 iso.3.6.1.4.1.9.9.221.1.1.1.1.20.52690955.1 = Counter64: 4916682752
It seems that observium looks at the 32-bit values and then miscalculates. Just remove some RAM from those routers so they don't overflow the counters ;)
Or maybe I can fix the code...
This should to be done by having a flag in the database to tell the poller module it should be using the HC counters (this is how it's done for ports, and would make it easier to add the same functionality to other modules too).
If someone with quite old running IOS (2001?) on crappy low-memory routers could verify the existance of these counters on *all* cisco kit, we could perhaps just use them as default and never use the 32bit counters. We can't do this with ports because the HC counters are in a different table, and aren't always present.
adam.