librenms/includes/polling/ucd-mib.inc.php
Tony Murray f2f169ae78
Modernize mempools (#12282)
* mempools to modern module
quick hacky hrstorage port

* port ucd-snmp-mib to Mempools

* Populate DB for ucd
Prep for yaml

* initial yaml attempt

* more complex conversions
fixes to YamlDiscovery, make leading $ optional and allow mib::oid format

* walk full tables and skip values
normalize percentages above 100

* handle precent only ones (specify total as 100)

* Move default polling out of YamlMempoolsDiscovery

* fixes

* Update test data hrstorage should be correct.

* perc_warn for hrstorage

* Host Resources, record buffer, cached, and shared

* Host Resources is always better, don't do both HR and UCD

* fix unix, include warning levels

* variable size

* consolidate skip_values

* define mempools schema

* number instead of integer

* more schema refactor

* one more skip_values reference

* throw error for invalid oid translation
aos6

* a*  and Cisco

* updated test data

* update almost all hrstorage data files

* b*

* c* with test data
use standard cache for hrStorage

* use cache for storage module too

* hand bsnmp properly

* bdcom

* exclude total oid from yaml so it is not polled
May add a way to ignore this behavior and poll it, but I don't know if that is needed.

* automatically handle percent only values

* ciscowlc

* only poll used or free if we have used, free, and total.

* fix skipping

* the dlinkoning
fix find value when value "name" is numeric

* support numeric oids

* dnos/ftos attempt

* I guess we can't filter on total > 0

* edgecos

* e*

* f WIP

* f*

* gwd (aka g*)

* h* + procurve

* i*

* j*

* m*

* support 0% used memory (however unlikely)

* n*

* CISCO-PROCESS-MIB memory, share cache with processors module

* ignore mempools with invalid total

* p*

* quanta

* r*
fix raisecom mibs terribly broken

* s-z

* style fixes

* Move VRP back to PHP and make it actually work

* fix zynos

* update schema

* Update Cisco processor data for description bug fixes

* fix comware processors

* comware mempools with memory size
default precision to 1

* sophos-xg updated data

* hrstorage use ram size for buffers, cache, and shared

* Show memory available instead of free in device overview

* UCD, use same rrd format, store available instead of free in the db.

* Calculate availability for HOST-RESOURCES-MIB

* Convert UCD to standard polling

* rename old rrd files

* initial graph work

* graph WIP

* Graph looking decent

* Graph looking decent for hr

* remove old ucd_graph code

* handle availability mempool
more graph cleanup

* color adjustments

* remove accidental free calculation

* Update test data and fix corner cases

* fis pfsense

* update schema

* add default value for mempool_class

* fix whitespace

* update schema

* update schema correctly

* one more time

* fortigate_1500d-sensors missing oids

* Update docs.

* fix indent

* add implements MempoolsDiscovery explicitly to OS

* remove ucd_memory graph references
remove unused device_memory graph

* remove unused functions

* set devices with mempools to rediscover to prevent/minimize gaps

* use a subquery

* add overview graph

* port health mempools table

* Update device mempool

* only show overview if multiple

* Don't override user set warn percentages in discovery

* fix missed usage

* fix style

* Safety check to not rename rrd files incorrectly if migration has not been run.

* Fix overview percent bar and represent available and used on the bar

* missed an item to convert to mempool_class

* percent on the wrong side
2020-11-23 15:35:35 -06:00

146 lines
4.5 KiB
PHP

<?php
use LibreNMS\RRD\RrdDefinition;
// Poll systemStats from UNIX-like hosts running UCD/Net-SNMPd
// UCD-SNMP-MIB::ssIndex.0 = INTEGER: 1
// UCD-SNMP-MIB::ssErrorName.0 = STRING: systemStats
// UCD-SNMP-MIB::ssSwapIn.0 = INTEGER: 0 kB
// UCD-SNMP-MIB::ssSwapOut.0 = INTEGER: 0 kB
// UCD-SNMP-MIB::ssIOSent.0 = INTEGER: 1864 blocks/s
// UCD-SNMP-MIB::ssIOReceive.0 = INTEGER: 7 blocks/s
// UCD-SNMP-MIB::ssSysInterrupts.0 = INTEGER: 7572 interrupts/s
// UCD-SNMP-MIB::ssSysContext.0 = INTEGER: 10254 switches/s
// UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 4
// UCD-SNMP-MIB::ssCpuSystem.0 = INTEGER: 3
// UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 77
// UCD-SNMP-MIB::ssCpuRawUser.0 = Counter32: 194386556
// UCD-SNMP-MIB::ssCpuRawNice.0 = Counter32: 15673
// UCD-SNMP-MIB::ssCpuRawSystem.0 = Counter32: 65382910
// UCD-SNMP-MIB::ssCpuRawIdle.0 = Counter32: 1655192684
// UCD-SNMP-MIB::ssCpuRawWait.0 = Counter32: 205336019
// UCD-SNMP-MIB::ssCpuRawKernel.0 = Counter32: 0
// UCD-SNMP-MIB::ssCpuRawInterrupt.0 = Counter32: 1128048
// UCD-SNMP-MIB::ssIORawSent.0 = Counter32: 2353983704
// UCD-SNMP-MIB::ssIORawReceived.0 = Counter32: 3172182750
// UCD-SNMP-MIB::ssRawInterrupts.0 = Counter32: 427446276
// UCD-SNMP-MIB::ssRawContexts.0 = Counter32: 4161026807
// UCD-SNMP-MIB::ssCpuRawSoftIRQ.0 = Counter32: 2605010
// UCD-SNMP-MIB::ssRawSwapIn.0 = Counter32: 602002
// UCD-SNMP-MIB::ssRawSwapOut.0 = Counter32: 937422
// UCD-SNMP-MIB::ssCpuRawWait.0
// UCD-SNMP-MIB::ssCpuRawSteal.0
$ss = snmpwalk_cache_oid($device, 'systemStats', [], 'UCD-SNMP-MIB');
$ss = $ss[0];
if (is_numeric($ss['ssCpuRawUser']) && is_numeric($ss['ssCpuRawNice']) && is_numeric($ss['ssCpuRawSystem']) && is_numeric($ss['ssCpuRawIdle'])) {
$rrd_def = RrdDefinition::make()
->addDataset('user', 'COUNTER', 0)
->addDataset('system', 'COUNTER', 0)
->addDataset('nice', 'COUNTER', 0)
->addDataset('idle', 'COUNTER', 0);
$fields = [
'user' => $ss['ssCpuRawUser'],
'system' => $ss['ssCpuRawSystem'],
'nice' => $ss['ssCpuRawNice'],
'idle' => $ss['ssCpuRawIdle'],
];
$tags = compact('rrd_def');
data_update($device, 'ucd_cpu', $tags, $fields);
$os->enableGraph('ucd_cpu');
}
// This is how we'll collect in the future, start now so people don't have zero data.
$collect_oids = [
'ssCpuRawUser',
'ssCpuRawNice',
'ssCpuRawSystem',
'ssCpuRawIdle',
'ssCpuRawInterrupt',
'ssCpuRawSoftIRQ',
'ssCpuRawKernel',
'ssCpuRawWait',
'ssIORawSent',
'ssIORawReceived',
'ssRawInterrupts',
'ssRawContexts',
'ssRawSwapIn',
'ssRawSwapOut',
'ssCpuRawWait',
'ssCpuRawSteal',
];
foreach ($collect_oids as $oid) {
if (is_numeric($ss[$oid])) {
$rrd_name = 'ucd_' . $oid;
$rrd_def = RrdDefinition::make()->addDataset('value', 'COUNTER', 0);
$fields = [
'value' => $ss[$oid],
];
$tags = compact('oid', 'rrd_name', 'rrd_def');
data_update($device, 'ucd_cpu', $tags, $fields);
$os->enableGraph('ucd_cpu');
}
}
// Set various graphs if we've seen the right OIDs.
if (is_numeric($ss['ssRawSwapIn'])) {
$os->enableGraph('ucd_swap_io');
}
if (is_numeric($ss['ssIORawSent'])) {
$os->enableGraph('ucd_io');
}
if (is_numeric($ss['ssRawContexts'])) {
$os->enableGraph('ucd_contexts');
}
if (is_numeric($ss['ssRawInterrupts'])) {
$os->enableGraph('ucd_interrupts');
}
if (is_numeric($ss['ssCpuRawWait'])) {
$os->enableGraph('ucd_io_wait');
}
if (is_numeric($ss['ssCpuRawSteal'])) {
$os->enableGraph('ucd_cpu_steal');
}
//
// Poll laLoadInt for load averages on UNIX-like hosts running UCD/Net-SNMPd
// UCD-SNMP-MIB::laLoadInt.1 = INTEGER: 206
// UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 429
// UCD-SNMP-MIB::laLoadInt.3 = INTEGER: 479
$load_raw = snmp_get_multi($device, ['laLoadInt.1', 'laLoadInt.2', 'laLoadInt.3'], '-OQUs', 'UCD-SNMP-MIB');
// Check to see that the 5-min OID is actually populated before we make the rrd
if (is_numeric($load_raw[2]['laLoadInt'])) {
$rrd_def = RrdDefinition::make()
->addDataset('1min', 'GAUGE', 0)
->addDataset('5min', 'GAUGE', 0)
->addDataset('15min', 'GAUGE', 0);
$fields = [
'1min' => $load_raw[1]['laLoadInt'],
'5min' => $load_raw[2]['laLoadInt'],
'15min' => $load_raw[3]['laLoadInt'],
];
$tags = compact('rrd_def');
data_update($device, 'ucd_load', $tags, $fields);
$os->enableGraph('ucd_load');
}
unset($ss, $load_raw, $snmpdata);
unset($key, $collect_oids, $rrd_name, $rrd_def, $oid);