add ZFS L2 support (#15095)

* add alerts for ZFS

* add initial l2 bits to the poller for zfs

* more minor tweaks to the ZFS poller

* more zfs bits

* add new ZFS graphs

* begin adding L2 stuff

* add linux_zfs-v3 bits

* update zfs app page

* style fix

* update the data for the zfs legacy test

* test update for zfs v1

* fix some zfs tests

* more zfs v3 test cleanup

* another zfs v3 test data fix

* more zfs v3 test data cleanup

* more test tweaks
This commit is contained in:
Zane C. Bowers-Hadley
2023-06-11 16:32:28 +02:00
committed by GitHub
parent 3ac0129fab
commit 3190bdb8b2
25 changed files with 1225 additions and 33 deletions
+11 -21
View File
@@ -2905,32 +2905,22 @@ b.) "public_key_to_arbitrary_name" - A dictionary to convert between the publick
### SNMP Extend
`zfs-linux` requires python3 >=python3.5.
The installation steps are:
1. Copy the polling script to the desired host (the host must be added
to LibreNMS devices)
2. Make the script executable
3. Edit snmpd.conf to include ZFS stats
#### FreeBSD
1: Install the depends.
```
wget https://github.com/librenms/librenms-agent/raw/master/snmp/zfs-freebsd -O /etc/snmp/zfs-freebsd
chmod +x /etc/snmp/zfs-freebsd
echo "extend zfs /etc/snmp/zfs-freebsd" >> /etc/snmp/snmpd.conf
### FreeBSD
pkg install p5-JSON p5-MIME-Base64 p5-Gzip-Faster
### Debian
apt-get install -y cpanminus zlib1g-dev
cpanm Mime::Base64 JSON Gzip::Faster
```
#### Linux
2: Fetch the script in question and make it executable.
```
wget https://github.com/librenms/librenms-agent/raw/master/snmp/zfs-linux -O /etc/snmp/zfs-linux
chmod +x /etc/snmp/zfs-linux
echo "extend zfs /usr/bin/sudo /etc/snmp/zfs-linux" >> /etc/snmp/snmpd.conf
wget https://github.com/librenms/librenms-agent/raw/master/snmp/zfs -O /etc/snmp/zfs
chmod +x /etc/snmp/zfs
```
Edit your sudo users (usually `visudo`) and add at the bottom:
3: Add the following to snmpd.conf and restart snmpd.
```
snmp ALL=(ALL) NOPASSWD: /etc/snmp/zfs-linux
extend zfs /etc/snmp/zfs
```
Now restart snmpd and you're all set.
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Instances/Second';
$colours = 'psychedelic';
$descr = 'L2 Abort Lowmem';
$ds = 'l2_abort_lowmem';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Accesses/Second';
$colours = 'psychedelic';
$descr = 'L2 Accesses';
$ds = 'l2_access_total';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 Asize';
$ds = 'l2_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 BufC D A Size';
$ds = 'l2_bufc_d_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 BufC M Asize';
$ds = 'l2_bufc_m_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Ratio';
$colours = 'psychedelic';
$descr = 'L2 Data To Meta';
$ds = 'l2_d_to_m_ratio';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Errors/Second';
$colours = 'psychedelic';
$descr = 'L2 Errors';
$ds = 'l2_errors';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 HDR Size';
$ds = 'l2_hdr_size';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 Log Blk Asize';
$ds = 'l2_log_blk_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 MFU Asize';
$ds = 'l2_mfu_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 MRU Asize';
$ds = 'l2_mru_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 Prefetch Asize';
$ds = 'l2_prefetch_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 Rebuild Asize';
$ds = 'l2_rb_asize';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,29 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$dostack = 0;
$printtotal = 0;
$addarea = 1;
$transparency = 15;
$rrd_filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
$rrd_list = [];
if (Rrd::checkRrdExists($rrd_filename)) {
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'L2 Write',
'ds' => 'l2_write_bytes',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'L2 Read',
'ds' => 'l2_read_bytes',
];
} else {
d_echo('RRD "' . $rrd_filename . '" not found');
}
require 'includes/html/graphs/generic_multi_line.inc.php';
@@ -0,0 +1,15 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$descr = 'L2 Size';
$ds = 'l2_size';
$filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
if (! Rrd::checkRrdExists($filename)) {
d_echo('RRD "' . $filename . '" not found');
}
require 'includes/html/graphs/generic_stats.inc.php';
@@ -0,0 +1,69 @@
<?php
$name = 'zfs';
$unit_text = 'Bytes';
$colours = 'psychedelic';
$dostack = 0;
$printtotal = 0;
$addarea = 1;
$transparency = 15;
$rrd_filename = Rrd::name($device['hostname'], ['app', $name, $app->app_id, '_____group2']);
$rrd_list = [];
if (Rrd::checkRrdExists($rrd_filename)) {
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'A Size',
'ds' => 'l2_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'BufC D Asize',
'ds' => 'l2_bufc_d_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'BufC M Asize',
'ds' => 'l2_bufc_m_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'Log Blk Asize',
'ds' => 'l2_log_blk_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'MFU Asize',
'ds' => 'l2_mfu_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'MRU Asize',
'ds' => 'l2_mru_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'Prefetch Asize',
'ds' => 'l2_prefetch_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'Rebuild Asize',
'ds' => 'l2_rb_asize',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'Log Blk Avg Asize',
'ds' => 'l2_log_blk_avg_as',
];
$rrd_list[] = [
'filename' => $rrd_filename,
'descr' => 'HDR Size',
'ds' => 'l2_hdr_size',
];
} else {
d_echo('RRD "' . $rrd_filename . '" not found');
}
require 'includes/html/graphs/generic_multi_line.inc.php';
+29 -8
View File
@@ -10,7 +10,8 @@ $link_array = [
print_optionbar_start();
echo generate_link('ARC', $link_array);
echo '| Pools:';
echo ' | ' . generate_link('L2', $link_array, ['zfs_page'=>'l2']);
echo ' | Pools: ';
$pools = $app->data['pools'] ?? [];
sort($pools);
@@ -28,7 +29,33 @@ foreach ($pools as $index => $pool) {
print_optionbar_end();
if (! isset($vars['pool'])) {
if (isset($vars['pool'])) {
$graphs = [
'zfs_pool_space'=>'Pool Space',
'zfs_pool_cap'=>'Pool Capacity',
'zfs_pool_frag'=>'Pool Fragmentation',
];
} elseif (isset($vars['zfs_page']) && $vars['zfs_page'] == 'l2') {
$graphs = [
'zfs_l2_size' => 'L2 size in bytes',
'zfs_l2_rw_bytes' => 'L2 Read And Writes Bytes Per Second',
'zfs_l2_d_to_m_ratio' => 'L2 Data To Meta Ratio',
'zfs_l2_access_total' => 'L2 Total Hits And Misses Per Second',
'zfs_l2_errors' => 'L2 Errors Per Second',
'zfs_l2_errors' => 'L2 Error Types Per Second',
'zfs_l2_sizes' => 'L2 Sizes',
'zfs_l2_asize' => 'L2 Asize',
'zfs_l2_bufc_d_asize' => 'L2 BufC Data Asize',
'zfs_l2_bufc_m_asize' => 'L2 BufC Metadata Asize',
'zfs_l2_hdr_size' => 'L2 HDR Size',
'zfs_l2_log_blk_asize' => 'L2 Log Blk Asize',
'zfs_l2_mfu_asize' => 'L2 MFU Asize',
'zfs_l2_mru_asize' => 'L2 MRU Asize',
'zfs_l2_prefetch_asize' => 'L2 Prefetch Asize',
'zfs_l2_rb_asize' => 'L2 Rebuild Asize',
'zfs_l2_abort_lowmem' => 'L2 Abort Lowmem Per Second',
];
} else {
$graphs = [
'zfs_arc_misc' => 'ARC misc',
'zfs_arc_size' => 'ARC size in bytes',
@@ -41,12 +68,6 @@ if (! isset($vars['pool'])) {
'zfs_arc_cache_hits' => 'ARC cache hits',
'zfs_arc_cache_miss' => 'ARC cache misses',
];
} else {
$graphs = [
'zfs_pool_space'=>'Pool Space',
'zfs_pool_cap'=>'Pool Capacity',
'zfs_pool_frag'=>'Pool Fragmentation',
];
}
foreach ($graphs as $key => $text) {
+120 -1
View File
@@ -135,6 +135,102 @@ $fields = [
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
// name choosen based on this is the second group of variables
$rrd_name = ['app', $name, $app->app_id, '_____group2'];
$rrd_def = RrdDefinition::make()
->addDataset('l2_abort_lowmem', 'DERIVE', 0)
->addDataset('l2_access_total', 'DERIVE', 0)
->addDataset('l2_asize', 'GAUGE', 0)
->addDataset('l2_bufc_d_asize', 'GAUGE', 0)
->addDataset('l2_bufc_m_asize', 'GAUGE', 0)
->addDataset('l2_cksum_bad', 'DERIVE', 0)
->addDataset('l2_d_to_m_ratio', 'GAUGE', 0)
->addDataset('l2_errors', 'DERIVE', 0)
->addDataset('l2_evict_l1cached', 'DERIVE', 0)
->addDataset('l2_evict_l_retry', 'DERIVE', 0)
->addDataset('l2_evict_reading', 'DERIVE', 0)
->addDataset('l2_feeds', 'DERIVE', 0)
->addDataset('l2_free_on_write', 'DERIVE', 0)
->addDataset('l2_hdr_size', 'GAUGE', 0)
->addDataset('l2_hits', 'DERIVE', 0)
->addDataset('l2_io_error', 'DERIVE', 0)
->addDataset('l2_log_blk_asize', 'GAUGE', 0)
->addDataset('l2_log_blk_avg_as', 'DERIVE', 0)
->addDataset('l2_log_blk_count', 'DERIVE', 0)
->addDataset('l2_log_blk_writes', 'DERIVE', 0)
->addDataset('l2_mfu_asize', 'GAUGE', 0)
->addDataset('l2_misses', 'DERIVE', 0)
->addDataset('l2_mru_asize', 'GAUGE', 0)
->addDataset('l2_prefetch_asize', 'GAUGE', 0)
->addDataset('l2_read_bytes', 'DERIVE', 0)
->addDataset('l2_rb_asize', 'GAUGE', 0)
->addDataset('l2_rb_bufs', 'DERIVE', 0)
->addDataset('l2_rb_bufs_prec', 'DERIVE', 0)
->addDataset('l2_rb_csum_lb_err', 'DERIVE', 0)
->addDataset('l2_rb_dh_err', 'DERIVE', 0)
->addDataset('l2_rb_io_errors', 'DERIVE', 0)
->addDataset('l2_rb_log_blks', 'DERIVE', 0)
->addDataset('l2_rb_lowmem', 'DERIVE', 0)
->addDataset('l2_rb_size', 'GAUGE', 0)
->addDataset('l2_rb_success', 'DERIVE', 0)
->addDataset('l2_rb_unsup', 'DERIVE', 0)
->addDataset('l2_rw_clash', 'DERIVE', 0)
->addDataset('l2_size', 'GAUGE', 0)
->addDataset('l2_write_bytes', 'DERIVE', 0)
->addDataset('l2_writes_done', 'DERIVE', 0)
->addDataset('l2_writes_error', 'DERIVE', 0)
->addDataset('l2_writes_l_retry', 'DERIVE', 0)
->addDataset('l2_writes_sent', 'DERIVE', 0);
$fields = [
'l2_abort_lowmem' => $zfs['l2_abort_lowmem'],
'l2_access_total' => $zfs['l2_access_total'],
'l2_asize' => $zfs['l2_asize'],
'l2_bufc_d_asize' => $zfs['l2_bufc_data_asize'],
'l2_bufc_m_asize' => $zfs['l2_bufc_metadata_asize'],
'l2_cksum_bad' => $zfs['l2_cksum_bad'],
'l2_d_to_m_ratio' => $zfs['l2_data_to_meta_ratio'],
'l2_errors' => $zfs['l2_errors'],
'l2_evict_l1cached' => $zfs['l2_evict_l1cached'],
'l2_evict_l_retry' => $zfs['l2_evict_lock_retry'],
'l2_evict_reading' => $zfs['l2_evict_reading'],
'l2_feeds' => $zfs['l2_feeds'],
'l2_free_on_write' => $zfs['l2_free_on_write'],
'l2_hdr_size' => $zfs['l2_hdr_size'],
'l2_hits' => $zfs['l2_hits'],
'l2_io_error' => $zfs['l2_io_error'],
'l2_log_blk_asize' => $zfs['l2_log_blk_asize'],
'l2_log_blk_avg_as' => $zfs['l2_log_blk_avg_asize'],
'l2_log_blk_count' => $zfs['l2_log_blk_count'],
'l2_log_blk_writes' => $zfs['l2_log_blk_writes'],
'l2_mfu_asize' => $zfs['l2_mfu_asize'],
'l2_misses' => $zfs['l2_misses'],
'l2_mru_asize' => $zfs['l2_mru_asize'],
'l2_prefetch_asize' => $zfs['l2_prefetch_asize'],
'l2_read_bytes' => $zfs['l2_read_bytes'],
'l2_rb_asize' => $zfs['l2_rebuild_asize'],
'l2_rb_bufs' => $zfs['l2_rebuild_bufs'],
'l2_rb_bufs_prec' => $zfs['l2_rebuild_bufs_precached'],
'l2_rb_csum_lb_err' => $zfs['l2_rebuild_cksum_lb_errors'],
'l2_rb_dh_err' => $zfs['l2_rebuild_dh_errors'],
'l2_rb_io_errors' => $zfs['l2_rebuild_io_errors'],
'l2_rb_log_blks' => $zfs['l2_rebuild_log_blks'],
'l2_rb_lowmem' => $zfs['l2_rebuild_lowmem'],
'l2_rb_size' => $zfs['l2_rebuild_size'],
'l2_rb_success' => $zfs['l2_rebuild_success'],
'l2_rb_unsup' => $zfs['l2_rebuild_unsupported'],
'l2_rw_clash' => $zfs['l2_rw_clash'],
'l2_size' => $zfs['l2_size'],
'l2_write_bytes' => $zfs['l2_write_bytes'],
'l2_writes_done' => $zfs['l2_writes_done'],
'l2_writes_error' => $zfs['l2_writes_error'],
'l2_writes_l_retry' => $zfs['l2_writes_lock_retry'],
'l2_writes_sent' => $zfs['l2_writes_sent'],
];
$tags = ['name' => $name, 'app_id' => $app->app_id, 'rrd_def' => $rrd_def, 'rrd_name' => $rrd_name];
data_update($device, 'app', $tags, $fields);
//
// process additional info returned
//
@@ -174,6 +270,29 @@ foreach ($zfs['pools'] as $pool) {
}
}
// gets the pool health status
$old_health = $app->data['health'] ?? 1;
if (isset($zfs['health'])) {
$health = $zfs['health'];
if ($old_health != $zfs['health']) {
if ($zfs['health'] == 1) {
log_event('ZFS pool(s) now healthy', $device, 'application', 1);
} else {
log_event('ZFS pool(s) DEGRADED, FAULTED, UNAVAIL, REMOVED, or unknown', $device, 'application', 5);
}
}
} else {
$health = 1;
}
// gets the l2 error status
$old_l2_errors = $app->data['l2_errors'] ?? 0;
if (isset($zfs['l2_errors'])) {
if ($old_l2_errors != $zfs['l2_errors']) {
log_event('ZFS L2 cache has experienced errors', $device, 'application', 5);
}
}
// check for added or removed pools
$old_pools = $app->data['pools'] ?? [];
$added_pools = array_diff($pools, $old_pools);
@@ -181,11 +300,11 @@ $removed_pools = array_diff($old_pools, $pools);
// if we have any source pools, save and log
if (count($added_pools) > 0 || count($removed_pools) > 0) {
$app->data = ['pools' => $pools];
$log_message = 'ZFS Pool Change:';
$log_message .= count($added_pools) > 0 ? ' Added ' . implode(',', $added_pools) : '';
$log_message .= count($removed_pools) > 0 ? ' Removed ' . implode(',', $added_pools) : '';
log_event($log_message, $device, 'application');
}
$app->data = ['pools' => $pools, 'health' => $health, 'l2_errors' => $zfs['l2_errors']];
update_application($app, 'OK', $metrics);
+10
View File
@@ -593,6 +593,16 @@
"name": "Systemd Services Failed > 0",
"severity": "warning"
},
{
"rule": "applications.app_type = \"zfs\" && application_metrics.metric = \"l2_errors\" && application_metrics.value >= \"1\"",
"name": "ZFS L2 errors present",
"severity": "critical"
},
{
"rule": "applications.app_type = \"zfs\" && application_metrics.metric = \"health\" && application_metrics.value = \"0\"",
"name": "ZFS has one or more pool DEGRADED, FAULTED, UNAVAIL, REMOVED, or other",
"severity": "critical"
},
{
"rule": "applications.app_type = \"linux_config_files\" && application_metrics.metric = \"number_of_confs\" && application_metrics.value > \"0\"",
"name": "linux_config_files Configuration Files Out-Of-Sync > 0",
+1 -1
View File
@@ -22,7 +22,7 @@
"app_state_prev": "UNKNOWN",
"app_status": "",
"app_instance": "",
"data": "{\"pools\":[\"arc\"]}"
"data": "{\"pools\":[\"arc\"],\"health\":1,\"l2_errors\":null}"
}
],
"application_metrics": [
+1 -1
View File
@@ -22,7 +22,7 @@
"app_state_prev": "UNKNOWN",
"app_status": "",
"app_instance": "",
"data": "{\"pools\":[\"arc\"]}"
"data": "{\"pools\":[\"arc\"],\"health\":1,\"l2_errors\":null}"
}
],
"application_metrics": [
+1 -1
View File
@@ -22,7 +22,7 @@
"app_state_prev": "UNKNOWN",
"app_status": "",
"app_instance": "",
"data": "{\"pools\":[\"arc\"]}"
"data": "{\"pools\":[\"arc\"],\"health\":1,\"l2_errors\":null}"
}
],
"application_metrics": [
+734
View File
@@ -0,0 +1,734 @@
{
"applications": {
"discovery": {
"applications": [
{
"app_type": "zfs",
"app_state": "UNKNOWN",
"discovered": 1,
"app_state_prev": null,
"app_status": "",
"app_instance": "",
"data": null
}
]
},
"poller": {
"applications": [
{
"app_type": "zfs",
"app_state": "OK",
"discovered": 1,
"app_state_prev": "UNKNOWN",
"app_status": "",
"app_instance": "",
"data": "{\"pools\":[\"arc\"],\"health\":1,\"l2_errors\":0}"
}
],
"application_metrics": [
{
"metric": "actual_hit_per",
"value": 96.09917208021,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "anon_hits",
"value": -2439949,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "anon_hits_per",
"value": -0.21443943717893,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "arc_accesses_total",
"value": 1183187927,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "arc_hits",
"value": 1137826620,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "arc_misses",
"value": 45361307,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "arc_size",
"value": 1048270624,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "arc_size_per",
"value": 3.1581346931151,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "cache_hits_per",
"value": 96.166179018154,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "cache_miss_per",
"value": 3.8338209818465,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "data_demand_per",
"value": 95.461167284163,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "data_pre_per",
"value": 8.2718806970289,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "degraded",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "deleted",
"value": 42382148,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_data_hits",
"value": 1015682,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_data_misses",
"value": 48292,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_data_total",
"value": 1063974,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_hits_per",
"value": 0.089265093833013,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_meta_hits",
"value": 1133980912,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_meta_misses",
"value": 31377034,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "demand_misses_per",
"value": 0.10646077724348,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_cached",
"value": 227948678144,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_eligible",
"value": 128654282240,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_eligible_mfu",
"value": 28666240512,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_eligible_mru",
"value": 99988041728,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_ineligible",
"value": 94654349824,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_l2_skip",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "evict_skip",
"value": 133213142,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "faulted",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "freq_used_per",
"value": 32.977470290171,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "health",
"value": 1,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_abort_lowmem",
"value": 2264908,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_access_total",
"value": 45361287,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_asize",
"value": 59218449920,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_bufc_data_asize",
"value": 33123006976,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_bufc_metadata_asize",
"value": 26095442944,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_cksum_bad",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_data_to_meta_ratio",
"value": 374,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_errors",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_evict_l1cached",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_evict_lock_retry",
"value": 1,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_evict_reading",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_feeds",
"value": 27311,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_free_on_write",
"value": 112,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_hdr_size",
"value": 808407552,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_hits",
"value": 30337921,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_io_error",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_log_blk_asize",
"value": 120487424,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_log_blk_avg_asize",
"value": 11287,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_log_blk_count",
"value": 8863,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_log_blk_writes",
"value": 586,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_mfu_asize",
"value": 29688845824,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_misses",
"value": 15023366,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_mru_asize",
"value": 29442406400,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_prefetch_asize",
"value": 87197696,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_read_bytes",
"value": 26255805440,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_asize",
"value": 61671941120,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_bufs",
"value": 8478512,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_bufs_precached",
"value": 1510,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_cksum_lb_errors",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_dh_errors",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_io_errors",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_log_blks",
"value": 8296,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_lowmem",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_size",
"value": 162050568192,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_success",
"value": 1,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rebuild_unsupported",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_rw_clash",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_size",
"value": 159099220992,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_write_bytes",
"value": 2453267968,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_writes_done",
"value": 3537,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_writes_error",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_writes_lock_retry",
"value": 5,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "l2_writes_sent",
"value": 3537,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "meta_hits_per",
"value": 99.662012829336,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "meta_misses_per",
"value": 69.171362280192,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mfu_ghost_hits",
"value": 2064593,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mfu_ghost_per",
"value": 0.18145057987833,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mfu_hits",
"value": 859725964,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mfu_per",
"value": 75.558608744802,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mfu_size",
"value": 353131574,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "min_size_per",
"value": 3.2260897504717,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mru_ghost_hits",
"value": 1168174,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mru_ghost_per",
"value": 0.10266713570122,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mru_hits",
"value": 277307838,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mru_per",
"value": 24.371712976798,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "mutex_skip",
"value": 4047053,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "offline",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "online",
"value": 1,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "p",
"value": 717695178,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_alloc",
"value": 14344697704448,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_cap",
"value": 89,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_dedup",
"value": 1,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_expandsz",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_frag",
"value": 55,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_free",
"value": 1598220898304,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pool_arc_size",
"value": 15942918602752,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_data_hits",
"value": 10073,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_data_misses",
"value": 111701,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_data_total",
"value": 121774,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_hits_per",
"value": 0.00088528426237734,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_meta_hits",
"value": 2819953,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_meta_hits_per",
"value": 0.24783679256863,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_meta_misses",
"value": 13824280,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_meta_misses_per",
"value": 30.475929628747,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "pre_misses_per",
"value": 0.24624731381748,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "real_hits",
"value": 1137033802,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "rec_used_per",
"value": 67.022529709829,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "recycle_miss",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "removed",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "target_size",
"value": 1070826752,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "target_size_arat",
"value": 0.032260897504717,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "target_size_max",
"value": 33192714240,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "target_size_min",
"value": 1070826752,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "target_size_per",
"value": 3.2260897504717,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "unavail",
"value": 0,
"value_prev": null,
"app_type": "zfs"
},
{
"metric": "unknown",
"value": 0,
"value_prev": null,
"app_type": "zfs"
}
]
}
}
}
File diff suppressed because one or more lines are too long