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
This commit is contained in:
Zane C. Bowers-Hadley
2023-07-19 22:02:23 -05:00
committed by GitHub
parent b3574ee282
commit 2ac9a634b4
17 changed files with 624 additions and 0 deletions

View File

@@ -457,6 +457,15 @@ $graphs['wireguard'] = [
'traffic',
'time',
];
$graphs['logsize'] = [
'size',
'set_sizes',
'max_size',
'mean_size',
'median_size',
'mode_size',
'min_size',
];
$graphs['linux_config_files'] = [
'number_of_confs',
];

View File

@@ -0,0 +1,106 @@
<?php
$link_array = [
'page' => 'device',
'device' => $device['device_id'],
'tab' => 'apps',
'app' => 'logsize',
];
$no_minus_d = $app->data['no_minus_d'] ?? false;
print_optionbar_start();
echo generate_link('Basics', $link_array);
echo ' | Sets:';
$sets = $app->data['sets'] ?? [];
$sets_list = array_keys($sets);
sort($sets_list);
foreach ($sets_list as $index => $log_set) {
$label = $vars['log_set'] == $log_set
? '<span class="pagemenu-selected">' . $log_set . '</span>'
: $log_set;
echo generate_link($label, $link_array, ['log_set' => $log_set]) . "\n";
if ($index < (count($sets_list) - 1)) {
echo ', ';
}
}
if (isset($vars['log_set']) && isset($sets[$vars['log_set']])) {
$log_files = $sets[$vars['log_set']]['files'];
$log_count = count($log_files);
echo "<br>\nFiles Count: " . $log_count . "<br>\nFiles: \n";
sort($log_files);
foreach ($log_files as $index => $log_file) {
$label = $vars['log_file'] == $log_file
? '<span class="pagemenu-selected">' . $log_file . '</span>'
: $log_file;
echo generate_link($label, $link_array, ['log_set' => $vars['log_set'], 'log_file'=>$log_file]) . "\n";
if ($index < (count($log_files) - 1)) {
echo ', ';
}
}
}
print_optionbar_end();
if (isset($vars['log_file']) && isset($vars['log_set'])) {
$graphs = [
'logsize_size' => 'Log Size',
];
} elseif (isset($vars['log_set'])) {
$graphs = [
'logsize_size' => 'Set Size',
'logsize_log_sizes' => 'Log Sizes, Top 12',
'logsize_combined_stats' => 'Combined Log Stats',
'logsize_max_size' => 'Max Log Size',
'logsize_mean_size' => 'Mean Log Size',
'logsize_median_size' => 'Median Log Size',
'logsize_mode_size' => 'Mode Log Size',
'logsize_min_size' => 'Min Log Size',
];
} else {
$graphs = [
'logsize_size' => 'Total Size',
'logsize_set_sizes' => 'Set Sizes',
'logsize_combined_stats' => 'Combined Set Stats',
'logsize_max_size' => 'Max Set Size',
'logsize_mean_size' => 'Mean Set Size',
'logsize_median_size' => 'Median Set Size',
'logsize_mode_size' => 'Mode Set Size',
'logsize_min_size' => 'Min Set Size',
];
}
foreach ($graphs as $key => $text) {
$graph_type = $key;
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = \LibreNMS\Config::get('time.now');
$graph_array['id'] = $app['app_id'];
$graph_array['type'] = 'application_' . $key;
if (isset($vars['log_set'])) {
$graph_array['log_set'] = $vars['log_set'];
}
if (isset($vars['log_file'])) {
$graph_array['log_file'] = $vars['log_file'];
}
echo '<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">' . $text . '</h3>
</div>
<div class="panel-body">
<div class="row">';
include 'includes/html/print-graphrow.inc.php';
echo '</div>';
echo '</div>';
echo '</div>';
}