Files
librenms-librenms/includes/polling/applications/logsize.inc.php
Zane C. Bowers-Hadley 2ac9a634b4 Logsize monitoring for LibreNMS (#15137)
* add logsize poller

* add set size info

* add more stats

* add min size

* more logsize files

* add logsize

* fix creating log file links

* add two new graphs

* add some graphs

* add no_minus_d

* add no minus d to app page

* add count of log files

* save logsizes in app data

* rename title log sizes

* only show top 12

* add mean median and mode

* cleanup naming a bit

* the values for the files hash is now a int instead of another hash

* add new stats and correct median name

* now properly handle unseen

* fix logsize bits

* add combined

* update metrics and add some tests

* add logsize graphs to apps page

* add the logsize bit

* add logszie docs

* add some example alert rules

* style cleanup

* more style cleanup

* fix a few things for metrics and update the test

* fix a variable name in the test and update the data
2023-07-19 22:02:23 -05:00

116 lines
3.8 KiB
PHP

<?php
use LibreNMS\Exceptions\JsonAppException;
use LibreNMS\RRD\RrdDefinition;
$name = 'logsize';
try {
$returned = json_app_get($device, $name, 1);
} catch (JsonAppException $e) {
echo PHP_EOL . $name . ':' . $e->getCode() . ':' . $e->getMessage() . PHP_EOL;
update_application($app, $e->getCode() . ':' . $e->getMessage(), []); // Set empty metrics and error message
return;
}
$data = $returned['data'];
$rrd_def = RrdDefinition::make()
->addDataset('size', 'GAUGE');
$set_rrd_def = RrdDefinition::make()
->addDataset('max_size', 'GAUGE')
->addDataset('mean_size', 'GAUGE')
->addDataset('median_size', 'GAUGE')
->addDataset('mode_size', 'GAUGE')
->addDataset('min_size', 'GAUGE')
->addDataset('size', 'GAUGE');
$app_data = ['sets'=>[], 'no_minus_d'=>$data['no_minus_d']];
$rrd_name = ['app', $name, $app->app_id];
$fields = [
'max_size' => $data['max'],
'mean_size' => $data['mean'],
'median_size' => $data['median'],
'mode_size' => $data['mode'],
'min_size' => $data['min'],
'size' => $data['size'],
];
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $set_rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
$metrics = $fields;
foreach ($data['sets'] as $set_name => $set_data) {
$app_data['sets'][$set_name] = [
'files' => array_keys($set_data['files']),
'max_size' => $set_data['max'],
'mean_size' => $set_data['mean'],
'median_size' => $set_data['median'],
'mode_size' => $set_data['mode'],
'min_size' => $set_data['min'],
'size' => $set_data['size'],
'log_sizes' => [],
];
$metrics['set_' . $set_name . '_max_size'] = $set_data['max'];
$metrics['set_' . $set_name . '_mean_size'] = $set_data['mean'];
$metrics['set_' . $set_name . '_median_size'] = $set_data['median'];
$metrics['set_' . $set_name . '_mode_size'] = $set_data['mode'];
$metrics['set_' . $set_name . '_min_size'] = $set_data['min'];
$metrics['set_' . $set_name . '_size'] = $set_data['size'];
$rrd_name = ['app', $name, $app->app_id, $set_name];
$fields = [
'max_size' => $set_data['max'],
'mean_size' => $set_data['mean'],
'median_size' => $set_data['median'],
'mode_size' => $set_data['mode'],
'min_size' => $set_data['min'],
'size' => $set_data['size'],
];
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $set_rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
foreach ($set_data['files'] as $log_name => $log_size) {
$rrd_name = ['app', $name, $app->app_id, $set_name . '_____-_____' . $log_name];
$fields = [
'size' => $log_size,
];
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
$app_data['sets'][$set_name]['log_sizes'][$log_name] = $log_size;
//$metrics['set_' . $set_name . '_files_' .$log_name] = $log_size;
}
foreach ($set_data['unseen'] as $log_name) {
$rrd_name = ['app', $name, $app->app_id, $set_name . '_____-_____' . $log_name];
$fields = [
'size' => 0,
];
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
$app_data['sets'][$set_name]['log_sizes'][$log_name] = 0;
$app_data['sets'][$set_name]['files'][] = $log_name;
//$metrics['set_' . $set_name . '_files_' .$log_name] = 0;
}
uasort($app_data['sets'][$set_name]['log_sizes'], function ($a, $b) {
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
});
}
$app->data = $app_data;
update_application($app, 'OK', $metrics);