Quellcode durchsuchen

subo feed_graphite_sys.pl e incluyo el borrado recursivo, en el servidor de copias, del dataset a copiar, antes de enviar la copia

develop
Pablo vor 3 Jahren
Ursprung
Commit
347f10ccbb
2 geänderte Dateien mit 240 neuen und 0 gelöschten Zeilen
  1. +236
    -0
      feed_graphite_sys.pl
  2. +4
    -0
      zonebackuptozone.sh

+ 236
- 0
feed_graphite_sys.pl Datei anzeigen

@@ -0,0 +1,236 @@
#!/usr/bin/perl

use strict;
use IO::Socket;
use Data::Dumper;

my $graphitehost = "graphite.open6hosting.com";
my $port = "2003";
my $hostname = "o6hsmartos16";
my $grupo = "joyent";

my %ipmistatus = (
"CPU_Temp" => "cpu_temp",
"CPU_Temperature" => "cpu_temp",
"CPU1_Temperature" => "cpu_temp",
"+12V_" => "12v",
"12V" => "12v",
"12V_" => "12v",
"CPU_FAN1" => "cpu_fan1",
"CPU_FAN1_" => "cpu_fan1",
"FAN1" => "cpu_fan1",
"FAN1_" => "cpu_fan1",
);

my %mdbstatus = (
"Kernel_" => "kernel",
"Boot_pages" => "boot_pages",
"ZFS_File_Data_" => "zfs_file",
"Anon_" => "anon",
"Exec_and_libs_" => "exec_and_libs",
"Page_cache" => "page_cache",
"Free_(cachelist)" => "free_cachelist",
"Free_(freelist)" => "free_freelist",
);

# create Socket
my $socket = IO::Socket::INET -> new
(
PeerAddr => $graphitehost,
PeerPort => $port,
Proto => "tcp",
Type => SOCK_STREAM
) or die "Couldn't connect to $graphitehost:$port: $@ \n";

# enviaremos algo asi
# print $socket "$grupo.$hostname.vfsstat.read_s $estructura{read_s} $time\n";
sub enviadatos ($$$$)
{
my $hash = shift;
my $socket = shift;
my $tabla = shift;
my $tiempo = shift;

while ( my ( $keys, $values ) = each %{$hash} )
{
print $socket "$grupo.$hostname.$tabla.$keys ${$hash}{$keys} $tiempo\n";
}
}


########
#
# iostat
#
########


# numero de dispositivos
my $devices = `zpool list -v | grep -c "c[0-9]*" | tr -d '\n'`;

# r/s w/s kr/s kw/s read_t write_t
# iostat -xzr 10 2
# device,r/s,w/s,kr/s,kw/s,wait,actv,svc_t,%w,%b
# sd1,27.9,0.0,111.5,0.0,0.0,0.7,24.6,0,45
my $captura = `iostat -xr 15 2 | awk -F, '\$1 ~ /^sd[0-8]|blkdev/ { print \$1,\$2,\$3,\$4,\$5,\$7,\$8,\$9,\$10 }' | tail -n$devices`;

my @fields = split(" ", $captura);
my @wcfields = @fields;

my %estructura;
my $disco;

foreach (@fields)
{
if ( $_ =~ /^sd[0-9]|blkdev[0-9]/ )
{
$disco = $_;
shift @wcfields;
$estructura{$disco}{r_s} = shift @wcfields;
$estructura{$disco}{w_s} = shift @wcfields;
$estructura{$disco}{kr_s} = shift @wcfields;
$estructura{$disco}{kw_s} = shift @wcfields;
if ( $estructura{$disco}{kr_s} > 0 && $estructura{$disco}{r_s} > 0 )
{
$estructura{$disco}{ars} = $estructura{$disco}{kr_s} / $estructura{$disco}{r_s};
}
if ( $estructura{$disco}{kw_s} > 0 && $estructura{$disco}{w_s} > 0 )
{
$estructura{$disco}{awrs} = $estructura{$disco}{kw_s} / $estructura{$disco}{w_s};
}
$estructura{$disco}{actv} = shift @wcfields;
$estructura{$disco}{svc_t} = shift @wcfields;
$estructura{$disco}{w} = shift @wcfields;
$estructura{$disco}{b} = shift @wcfields;
}
}

my $time = time();

foreach $disco (keys %estructura)
{
&enviadatos (\%{ $estructura{$disco} }, $socket, "iostat.$disco", $time);
}


########
#
# ziostat
#
########


# numero de zonas
my $zonas = `vmadm list -H state=running | wc -l | tr -d '\n'`;

$captura = `ziostat -Z -r 15 2 | awk -F, '\$1 ~ /^[0-9]/ { print \$7,\$1,\$2,\$3,\$4,\$5,\$6 }' | tail -n$zonas`;

@fields = split(" ", $captura);
@wcfields = @fields;

my %ziostat;
my $uuid;

foreach (@fields)
{
if ( $_ =~ /.*[a-z].*/ )
{
$uuid = $_;
shift @wcfields;
$ziostat{$uuid}{r_s} = shift @wcfields;
$ziostat{$uuid}{kr_s} = shift @wcfields;
$ziostat{$uuid}{actv} = shift @wcfields;
$ziostat{$uuid}{wsvc_t} = shift @wcfields;
$ziostat{$uuid}{asvc_t} = shift @wcfields;
$ziostat{$uuid}{b} = shift @wcfields;
}
}

$time = time();

foreach $uuid (keys %ziostat)
{
&enviadatos (\%{ $ziostat{$uuid} }, $socket, "ziostat.$uuid", $time);
}


########
#
# zonememstat
#
########

my $memcommand = `zonememstat -H | awk '{ print \$1,\$2,\$4,\$5,\$6 }'`;

my %zonememstat;
my @memfields = split(" ", $memcommand);
my @wcmemfields = @memfields;
my $memuuid;


foreach (@memfields)
{
if ( $_ =~ /^([a-z0-9]{8}-|global)/ ) {
$memuuid = $_;
shift @wcmemfields;
$zonememstat{$memuuid}{rss} = shift @wcmemfields;
$zonememstat{$memuuid}{nover} = shift @wcmemfields;
$zonememstat{$memuuid}{pout} = shift @wcmemfields;
$zonememstat{$memuuid}{swap} = shift @wcmemfields;
}
}

my $memtime = time();

foreach my $uuid (keys %zonememstat)
{
&enviadatos ( \%{ $zonememstat{$uuid} }, $socket, "zonememstat.$uuid", $memtime );
}

########
#
# cerramos el descriptor
#
########

shutdown($socket,2);

########
#
# collect IPMI sensors
#
########

my $ipmicommand = "ipmitool sdr list | sed 's/|//g' | sed 's/ /_/' | awk '\$1 ~ /CPU_Temp/ || \$1 ~ /CPU1_Temp/ || \$1 ~ /CPU_FAN1/ || \$1 ~ /^FAN1/ || \$1 ~ /12V/ { print \$1,\$2 }'";

open(IPMI, "$ipmicommand |") or die("Could not execute '$ipmicommand': $!");

while (<IPMI>) {
my ($k, $v) = (m/([\+\w\d]*).*?(\d+(?:\.\d+)?)/);
next unless ($k);
if (exists $ipmistatus{$k} ) {
system("echo -n '$grupo.$hostname.ipmi.$ipmistatus{$k} $v $time' | nc -w 0 $graphitehost $port");
}
}

close (IPMI);

########
#
# collect memstat mdb data
#
########

my $mdbcommand = "mdb -ke '::memstat' | sed 's/ZFS File Data/ZFS_File_Data/' | sed 's/Exec and libs/Exec_and_libs/' | sed 's/ /_/' | awk '{ print \$1,\$3 }'";

open(MEMSTAT, "$mdbcommand |") or die("Could not execute '$mdbcommand': $!");

while (<MEMSTAT>) {
my ($k, $v) = (m/([\w_()]+)\s+?(\d+)?/);
next unless ($k);
if (exists $mdbstatus{$k} ) {
system("echo '$grupo.$hostname.memstat.$mdbstatus{$k} $v $time' | nc -w 0 $graphitehost $port");
}
}

close (MEMSTAT);

+ 4
- 0
zonebackuptozone.sh Datei anzeigen

@@ -72,6 +72,10 @@ create_snap()
send_snap ()
{
DATASET=$1
echo "Deleting dataset ${DATASET} on ${BACKUPZ}..."
ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs destroy -r zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}
check_err
echo "done."
echo "Sending snapshot to ${BACKUPZ}..."
zfs send zones/${DATASET}@`date +%Y%m%d` | ssh -i /usbkey/ssh/id_rsa -p 2221 $BACKUPZ zfs receive -F zones/${IDBACKUPZ}/data/${SOURCEGZ}/${DATASET}
check_err


Laden…
Abbrechen
Speichern