mirror of https://github.com/mikaku/Monitorix.git
added ZFS iostat per pool in 'zfs.pm' #190
This commit is contained in:
parent
6b0913143a
commit
6f8ffd0d2e
2
Changes
2
Changes
|
@ -10,6 +10,8 @@
|
|||
and the third load averages to obtain a more symmetric curve and a sooner
|
||||
cancellation of the alert.
|
||||
(suggested by Michael Tosch)
|
||||
- Added two new graphs (operations and bandwidth) for each pool in 'zfs.pm' to
|
||||
show iostats. [#190]
|
||||
- Fixed a bad memory scaling in *BSD systems.
|
||||
- Fixed in 'process.pm' to fully honour the option 'netstats_in_bps'.
|
||||
- Fixed to force Monitorix to be started at the end of boot in systemd-based
|
||||
|
|
238
lib/zfs.pm
238
lib/zfs.pm
|
@ -82,10 +82,10 @@ sub zfs_init {
|
|||
push(@tmp, "DS:zfs" . $n . "_usnap:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_cap:GAUGE:120:0:100");
|
||||
push(@tmp, "DS:zfs" . $n . "_fra:GAUGE:120:0:100");
|
||||
push(@tmp, "DS:zfs" . $n . "_val1:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_val2:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_val3:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_val4:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_oper:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_opew:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_banr:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_banw:GAUGE:120:0:U");
|
||||
push(@tmp, "DS:zfs" . $n . "_val5:GAUGE:120:0:U");
|
||||
}
|
||||
eval {
|
||||
|
@ -145,6 +145,17 @@ sub zfs_init {
|
|||
}
|
||||
}
|
||||
|
||||
# Since 3.11.0 four new values were included (operations r/w and
|
||||
# bandwidth r/w).
|
||||
for($n = 0; $n < $zfs->{max_pools}; $n++) {
|
||||
RRDs::tune($rrd,
|
||||
"--data-source-rename=zfs" . $n . "_val1:zfs" . $n . "_oper",
|
||||
"--data-source-rename=zfs" . $n . "_val2:zfs" . $n . "_opew",
|
||||
"--data-source-rename=zfs" . $n . "_val3:zfs" . $n . "_banr",
|
||||
"--data-source-rename=zfs" . $n . "_val4:zfs" . $n . "_banw",
|
||||
);
|
||||
}
|
||||
|
||||
$config->{zfs_hist} = ();
|
||||
push(@{$config->{func_update}}, $package);
|
||||
logger("$myself: Ok") if $debug;
|
||||
|
@ -247,10 +258,10 @@ sub zfs_update {
|
|||
my $usnap = 0;
|
||||
my $cap = 0;
|
||||
my $fra = 0;
|
||||
my $val1 = 0;
|
||||
my $val2 = 0;
|
||||
my $val3 = 0;
|
||||
my $val4 = 0;
|
||||
my $oper = 0;
|
||||
my $opew = 0;
|
||||
my $banr = 0;
|
||||
my $banw = 0;
|
||||
my $val5 = 0;
|
||||
|
||||
my $pool = (split(',', $zfs->{list}))[$n] || "";
|
||||
|
@ -271,9 +282,11 @@ sub zfs_update {
|
|||
}
|
||||
$cap =~ s/%//;
|
||||
$fra =~ s/[%-]//g; $fra = $fra || 0;
|
||||
@zpool = split(' ', `zpool iostat -Hp $pool` || "");
|
||||
(undef, undef, undef, $oper, $opew, $banr, $banw) = @zpool;
|
||||
}
|
||||
|
||||
$rrdata .= ":$free:$udata:$usnap:$cap:$fra:0:0:0:0:0";
|
||||
$rrdata .= ":$free:$udata:$usnap:$cap:$fra:$oper:$opew:$banr:$banw:0";
|
||||
}
|
||||
|
||||
RRDs::update($rrd, $rrdata);
|
||||
|
@ -417,19 +430,16 @@ sub zfs_cgi {
|
|||
"$IMG_DIR" . "$IMG3z");
|
||||
}
|
||||
for($n = 0; $n < scalar(my @pl = split(',', $zfs->{list})); $n++) {
|
||||
$str = $u . $package . ($n + 4) . "1." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMG, $str);
|
||||
unlink("$IMG_DIR" . $str);
|
||||
$str = $u . $package . ($n + 4) . "2." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMG, $str);
|
||||
unlink("$IMG_DIR" . $str);
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
$str = $u . $package . ($n + 4) . "1z." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMGz, $str);
|
||||
unlink("$IMG_DIR" . $str);
|
||||
$str = $u . $package . ($n + 4) . "2z." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMGz, $str);
|
||||
my $n2;
|
||||
for($n2 = 1; $n2 < 5; $n2++) {
|
||||
$str = $u . $package . ($n + 4) . $n2 . "." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMG, $str);
|
||||
unlink("$IMG_DIR" . $str);
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
$str = $u . $package . ($n + 4) . $n2 . "z." . $tf->{when} . ".$imgfmt_lc";
|
||||
push(@IMGz, $str);
|
||||
unlink("$IMG_DIR" . $str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -840,10 +850,6 @@ sub zfs_cgi {
|
|||
}
|
||||
$e++;
|
||||
|
||||
if($title) {
|
||||
push(@output, " </td>\n");
|
||||
push(@output, " <td bgcolor='" . $colors->{title_bg_color} . "'>\n");
|
||||
}
|
||||
@riglim = @{setup_riglim($rigid[$e + 3], $limit[$e + 3])};
|
||||
undef(@tmp);
|
||||
undef(@tmpz);
|
||||
|
@ -929,6 +935,188 @@ sub zfs_cgi {
|
|||
}
|
||||
$e++;
|
||||
|
||||
if($title) {
|
||||
push(@output, " </td>\n");
|
||||
push(@output, " <td bgcolor='" . $colors->{title_bg_color} . "'>\n");
|
||||
}
|
||||
@riglim = @{setup_riglim($rigid[$e + 3], $limit[$e + 3])};
|
||||
undef(@tmp);
|
||||
undef(@tmpz);
|
||||
undef(@CDEF);
|
||||
push(@tmp, "AREA:oper#00EEEE:Read");
|
||||
push(@tmp, "GPRINT:oper:LAST: Current\\: %5.1lf%S\\n");
|
||||
push(@tmp, "AREA:n_opew#4444EE:Write");
|
||||
push(@tmp, "GPRINT:opew:LAST: Current\\: %5.1lf%S\\n");
|
||||
push(@tmpz, "AREA:oper#00EEEE:Read");
|
||||
push(@tmpz, "AREA:n_opew#4444EE:Write");
|
||||
if(lc($config->{show_gaps}) eq "y") {
|
||||
push(@tmp, "AREA:wrongdata#$colors->{gap}:");
|
||||
push(@tmpz, "AREA:wrongdata#$colors->{gap}:");
|
||||
push(@CDEF, "CDEF:wrongdata=allvalues,UN,INF,UNKN,IF");
|
||||
}
|
||||
($width, $height) = split('x', $config->{graph_size}->{medium2});
|
||||
if($silent =~ /imagetag/) {
|
||||
($width, $height) = split('x', $config->{graph_size}->{remote}) if $silent eq "imagetag";
|
||||
($width, $height) = split('x', $config->{graph_size}->{main}) if $silent eq "imagetagbig";
|
||||
@tmp = @tmpz;
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
}
|
||||
$pic = $rrd{$version}->("$IMG_DIR" . "$IMG[$e]",
|
||||
"--title=$config->{graphs}->{_zfs6}: $str ($tf->{nwhen}$tf->{twhen})",
|
||||
"--start=-$tf->{nwhen}$tf->{twhen}",
|
||||
"--imgformat=$imgfmt_uc",
|
||||
"--vertical-label=Number",
|
||||
"--width=$width",
|
||||
"--height=$height",
|
||||
@riglim,
|
||||
$zoom,
|
||||
@{$cgi->{version12}},
|
||||
@{$cgi->{version12_small}},
|
||||
@{$colors->{graph_colors}},
|
||||
"DEF:oper=$rrd:zfs" . $n . "_oper:AVERAGE",
|
||||
"DEF:opew=$rrd:zfs" . $n . "_opew:AVERAGE",
|
||||
"CDEF:n_opew=opew,-1,*",
|
||||
"CDEF:allvalues=oper,opew,+",
|
||||
@CDEF,
|
||||
@tmp);
|
||||
$err = RRDs::error;
|
||||
push(@output, "ERROR: while graphing $IMG_DIR" . "$IMG[$e]: $err\n") if $err;
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
($width, $height) = split('x', $config->{graph_size}->{zoom});
|
||||
$picz = $rrd{$version}->("$IMG_DIR" . "$IMGz[$e]",
|
||||
"--title=$config->{graphs}->{_zfs6}: $str ($tf->{nwhen}$tf->{twhen})",
|
||||
"--start=-$tf->{nwhen}$tf->{twhen}",
|
||||
"--imgformat=$imgfmt_uc",
|
||||
"--vertical-label=Number",
|
||||
"--width=$width",
|
||||
"--height=$height",
|
||||
@riglim,
|
||||
$zoom,
|
||||
@{$cgi->{version12}},
|
||||
@{$cgi->{version12_small}},
|
||||
@{$colors->{graph_colors}},
|
||||
"DEF:oper=$rrd:zfs" . $n . "_oper:AVERAGE",
|
||||
"DEF:opew=$rrd:zfs" . $n . "_opew:AVERAGE",
|
||||
"CDEF:n_opew=opew,-1,*",
|
||||
"CDEF:allvalues=oper,opew,+",
|
||||
@CDEF,
|
||||
@tmpz);
|
||||
$err = RRDs::error;
|
||||
push(@output, "ERROR: while graphing $IMG_DIR" . "$IMGz[$e]: $err\n") if $err;
|
||||
}
|
||||
if($title || ($silent =~ /imagetag/ && $graph =~ /zfs4/)) {
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
if(lc($config->{disable_javascript_void}) eq "y") {
|
||||
push(@output, " <a href=\"" . $config->{url} . "/" . $config->{imgs_dir} . $IMGz[$e] . "\"><img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "' border='0'></a>\n");
|
||||
} else {
|
||||
if($version eq "new") {
|
||||
$picz_width = $picz->{image_width} * $config->{global_zoom};
|
||||
$picz_height = $picz->{image_height} * $config->{global_zoom};
|
||||
} else {
|
||||
$picz_width = $width + 115;
|
||||
$picz_height = $height + 100;
|
||||
}
|
||||
push(@output, " <a href=\"javascript:void(window.open('" . $config->{url} . "/" . $config->{imgs_dir} . $IMGz[$e] . "','','width=" . $picz_width . ",height=" . $picz_height . ",scrollbars=0,resizable=0'))\"><img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "' border='0'></a>\n");
|
||||
}
|
||||
} else {
|
||||
push(@output, " <img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "'>\n");
|
||||
}
|
||||
}
|
||||
$e++;
|
||||
|
||||
@riglim = @{setup_riglim($rigid[$e + 3], $limit[$e + 3])};
|
||||
undef(@tmp);
|
||||
undef(@tmpz);
|
||||
undef(@CDEF);
|
||||
push(@tmp, "AREA:banr_b#00EEEE:Read");
|
||||
push(@tmp, "GPRINT:banr_b:LAST: Current\\: %4.1lf%S\\n");
|
||||
push(@tmp, "AREA:n_banw_b#4444EE:Write");
|
||||
push(@tmp, "GPRINT:banw_b:LAST: Current\\: %4.1lf%S\\n");
|
||||
push(@tmpz, "AREA:banr_b#00EEEE:Read");
|
||||
push(@tmpz, "AREA:n_banw_b#4444EE:Write");
|
||||
if(lc($config->{show_gaps}) eq "y") {
|
||||
push(@tmp, "AREA:wrongdata#$colors->{gap}:");
|
||||
push(@tmpz, "AREA:wrongdata#$colors->{gap}:");
|
||||
push(@CDEF, "CDEF:wrongdata=allvalues,UN,INF,UNKN,IF");
|
||||
}
|
||||
($width, $height) = split('x', $config->{graph_size}->{medium2});
|
||||
if($silent =~ /imagetag/) {
|
||||
($width, $height) = split('x', $config->{graph_size}->{remote}) if $silent eq "imagetag";
|
||||
($width, $height) = split('x', $config->{graph_size}->{main}) if $silent eq "imagetagbig";
|
||||
@tmp = @tmpz;
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
push(@tmp, "COMMENT: \\n");
|
||||
}
|
||||
$pic = $rrd{$version}->("$IMG_DIR" . "$IMG[$e]",
|
||||
"--title=$config->{graphs}->{_zfs7}: $str ($tf->{nwhen}$tf->{twhen})",
|
||||
"--start=-$tf->{nwhen}$tf->{twhen}",
|
||||
"--imgformat=$imgfmt_uc",
|
||||
"--vertical-label=bytes",
|
||||
"--width=$width",
|
||||
"--height=$height",
|
||||
@riglim,
|
||||
$zoom,
|
||||
@{$cgi->{version12}},
|
||||
@{$cgi->{version12_small}},
|
||||
@{$colors->{graph_colors}},
|
||||
"DEF:banr=$rrd:zfs" . $n . "_banr:AVERAGE",
|
||||
"DEF:banw=$rrd:zfs" . $n . "_banw:AVERAGE",
|
||||
"CDEF:banr_b=banr,1024,*",
|
||||
"CDEF:banw_b=banw,1024,*",
|
||||
"CDEF:n_banw_b=banw_b,-1,*",
|
||||
"CDEF:allvalues=banr,banw,+",
|
||||
@CDEF,
|
||||
@tmp);
|
||||
$err = RRDs::error;
|
||||
push(@output, "ERROR: while graphing $IMG_DIR" . "$IMG[$e]: $err\n") if $err;
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
($width, $height) = split('x', $config->{graph_size}->{zoom});
|
||||
$picz = $rrd{$version}->("$IMG_DIR" . "$IMGz[$e]",
|
||||
"--title=$config->{graphs}->{_zfs7}: $str ($tf->{nwhen}$tf->{twhen})",
|
||||
"--start=-$tf->{nwhen}$tf->{twhen}",
|
||||
"--imgformat=$imgfmt_uc",
|
||||
"--vertical-label=bytes",
|
||||
"--width=$width",
|
||||
"--height=$height",
|
||||
@riglim,
|
||||
$zoom,
|
||||
@{$cgi->{version12}},
|
||||
@{$cgi->{version12_small}},
|
||||
@{$colors->{graph_colors}},
|
||||
"DEF:banr=$rrd:zfs" . $n . "_banr:AVERAGE",
|
||||
"DEF:banw=$rrd:zfs" . $n . "_banw:AVERAGE",
|
||||
"CDEF:banr_b=banr,1024,*",
|
||||
"CDEF:banw_b=banw,1024,*",
|
||||
"CDEF:n_banw_b=banw_b,-1,*",
|
||||
"CDEF:allvalues=banr,banw,+",
|
||||
@CDEF,
|
||||
@tmpz);
|
||||
$err = RRDs::error;
|
||||
push(@output, "ERROR: while graphing $IMG_DIR" . "$IMGz[$e]: $err\n") if $err;
|
||||
}
|
||||
if($title || ($silent =~ /imagetag/ && $graph =~ /zfs5/)) {
|
||||
if(lc($config->{enable_zoom}) eq "y") {
|
||||
if(lc($config->{disable_javascript_void}) eq "y") {
|
||||
push(@output, " <a href=\"" . $config->{url} . "/" . $config->{imgs_dir} . $IMGz[$e] . "\"><img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "' border='0'></a>\n");
|
||||
} else {
|
||||
if($version eq "new") {
|
||||
$picz_width = $picz->{image_width} * $config->{global_zoom};
|
||||
$picz_height = $picz->{image_height} * $config->{global_zoom};
|
||||
} else {
|
||||
$picz_width = $width + 115;
|
||||
$picz_height = $height + 100;
|
||||
}
|
||||
push(@output, " <a href=\"javascript:void(window.open('" . $config->{url} . "/" . $config->{imgs_dir} . $IMGz[$e] . "','','width=" . $picz_width . ",height=" . $picz_height . ",scrollbars=0,resizable=0'))\"><img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "' border='0'></a>\n");
|
||||
}
|
||||
} else {
|
||||
push(@output, " <img src='" . $config->{url} . "/" . $config->{imgs_dir} . $IMG[$e] . "'>\n");
|
||||
}
|
||||
}
|
||||
$e++;
|
||||
|
||||
if($title) {
|
||||
push(@output, " </td>\n");
|
||||
push(@output, " </tr>\n");
|
||||
|
|
|
@ -332,8 +332,8 @@ secure_log_date_format = %b %e
|
|||
<zfs>
|
||||
max_pools = 5
|
||||
list = pool1, pool2
|
||||
rigid = 0, 0, 0, 0, 2, 0, 2
|
||||
limit = 1000, 1000, 1000, 1000, 100, 1000, 100
|
||||
rigid = 0, 0, 0, 0, 2, 0, 0
|
||||
limit = 1000, 1000, 1000, 1000, 100, 1000, 1000
|
||||
</zfs>
|
||||
|
||||
|
||||
|
@ -978,6 +978,8 @@ graph_name = system, kern, proc, hptemp, lmsens, gensens, ipmi, ambsens, nvidia,
|
|||
_zfs3 = L2ARC cache
|
||||
_zfs4 = Pool data usage
|
||||
_zfs5 = Pool usage
|
||||
_zfs6 = Operations
|
||||
_zfs7 = Bandwidth
|
||||
_du = Directory usage
|
||||
_net1 = Network traffic
|
||||
_net2 = Network packets
|
||||
|
|
Loading…
Reference in New Issue