sexta-feira, 11 de outubro de 2013

df distribuído

Tenho me deparado muito com discos cheios em diversas máquinas. Então, resolvi encontrar uma maneira de identificá-los mais rapidamente. Juntanto Perl e Plink (a versão de linha de comando do Putty), cheguei a uma solução bem simples.


my $servers={
  srv01 => {user=>user1, pass=>pass1},
  srv02 => {user=>user2, pass=>pass2}
};

foreach $server (keys %$servers) {
  my $pass=$servers->{$server}->{pass};
  my $user=$servers->{$server}->{user};
  print "$server\n";
  my $data=`plink -pw $pass $user\@$server df -h -l`;
  my @lines=split(chr(10), $data);
  for my $line (splice(@lines,1)) {
    my @cols=split(/\s+/, $line);
    (my $pct=$cols[4])=~s/\D//g;
    print "\t$cols[0] -> $cols[4] ($cols[5] has $cols[3] free)\n" if $pct>90;
  }
}


Através do plink, executo um "df -h -l" em cada máquina. Depois, basta processar o resultado, que será parecido com isto:


srv01
  /dev/sda1 -> 95% (/ has 500MB free)
srv02
  /dev/sdc1 -> 98% (/home has 25MB free)


Só são mostrados os discos com mais de 90% de uso.

2 comentários:

Anônimo disse...

Muito util! Mas usr/pwd? Autoriza tua chave nos servers, bem mais tranquilo ...

Adicionalmente: conheces o New Relic? Mesmo com um free account vc pode receber alertas no DumbPhone se alguma condicao requer atencao num server, como disco perigosamente cheio, uso de CPU anormalmente alto, etc etc etc ...

forinti disse...

Sim, já usei o New Relic. Muito bacana, mas junto com o Grid Control do Oracle, já tenho sobrecarga de alertas. O objetivo de script é encontrar o disco problemático num momento de crise aguda.