Rewrite LVM check script and add discovery capabilities

This commit is contained in:
Daniel Berteaud 2013-04-14 20:12:49 +02:00
parent 532775e403
commit e7cf5f74cd
3 changed files with 82 additions and 37 deletions

View File

@ -1,8 +1,8 @@
# Type: Agent or Agent (active)
# Key: lvm[key] where key can be snapshot_max_alloc, snapshots, lv or vg
# Type of information: Numeric (integer 64bit)
# Units: depends on the key (snapshot_max_alloc is in %)
# Custom multiplier: Do not use
# Store Value: As is
# Discover LVM volume
# $1 can be groups, volumes or snapshots
UserParameter=vfs.lvm.discovery[*],/usr/bin/sudo /var/lib/zabbix/bin/disco_lvm_sudo $1
UserParameter=lvm[*],/usr/bin/sudo /var/lib/zabbix/bin/check_lvm_sudo $1
# Type: Agent or Agent (active)
# Key: vfs.lvm.lv[volume,key] where volume is the path to a logical volume and
# key can be size, allocation (for snapshots only) or status
UserParameter=vfs.lvm.lv[*],/usr/bin/sudo /var/lib/zabbix/bin/check_lvm_sudo $1 $2

View File

@ -1,38 +1,39 @@
#!/bin/bash
#!/usr/bin/perl -w
PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
use Linux::LVM;
# Return the greatest snapshot allocation
snapshot_max_alloc(){
MAX_PERCENT=0
for PERCENT in $(lvdisplay | grep % | sed -e 's/ Allocated to snapshot //g' -e 's/%//g'); do
if [[ "$PERCENT" > "$MAX_PERCENT" ]]; then
MAX_PERCENT=$PERCENT
fi
done
echo "$MAX_PERCENT"
Linux::LVM->units(B);
if (@ARGV < 2){
usage();
exit(1);
}
# Number of active snapshots
snapshots(){
echo $(lvdisplay | grep % | wc -l)
my $vol = $ARGV[0];
my $what = $ARGV[1];
sub usage {
print<<"EOF";
Usage: $0 <logical volume> [size|allocation|status]
EOF
}
# Number of logical volumes
lv(){
echo $(lvdisplay | grep 'LV Name' | wc -l)
my %info = get_lv_info($vol);
if ($what eq 'size'){
print $info{size};
}
# Number of volume group
vg(){
echo $(vgdisplay | grep 'VG Name' | wc -l)
elsif ($what eq 'allocation'){
my $ret = (defined $info{allocated_to_snapshot}) ? $info{allocated_to_snapshot} : "ZBX_NOTSUPPORTED";
$ret =~ s/,/\./;
print $ret;
}
case $1 in
snapshot_max_alloc|snapshots|lv|vg)
$1
;;
*)
echo 'ZBX_NOTSUPPORTED'
esac
elsif ($what eq 'status'){
print $info{status};
}
else{
usage();
}
exit(0);

44
scripts/disco_lvm_sudo Normal file
View File

@ -0,0 +1,44 @@
#!/usr/bin/perl -w
use Linux::LVM;
use JSON;
my $what = $ARGV[0];
open STDERR, '>/dev/null';
my $json;
if ($what eq "volumes"){
foreach my $group (get_volume_group_list()){
my %lvs = get_logical_volume_information($group);
foreach my $lv (keys %lvs){
push @{$json->{data}}, { "{#LVMVOL}" => "/dev/$group/$lv" };
}
}
}
elsif ($what eq "snapshots"){
foreach my $group (get_volume_group_list()){
my %lvs = get_logical_volume_information($group);
foreach my $lv (keys %lvs){
if (defined $lvs{$lv}->{allocated_to_snapshot}){
push @{$json->{data}}, { "{#LVMSNAP}" => "/dev/$group/$lv" };
}
}
}
}
elsif ($what eq "groups"){
foreach my $group (get_volume_group_list()){
push @{$json->{data}}, { "{#LVMGRP}" => $group };
}
}
else{
print <<"EOF";
Usage: $0 [volumes|snapshots|groups]
EOF
}
print to_json($json);
exit(0);