Como realizar consultas em vários servidores simultaneamente

Publicado por Alexandre Gonçalves Monteiro da Silva em 18/12/2011

[ Hits: 5.283 ]

Blog: https://www.vivaolinux.com.br/~alexandre_gms

 


Como realizar consultas em vários servidores simultaneamente



Galera, para quem atua com muitos servidores e necessita fazer uma checagem de processos, uma verificação do tamanho de pastas/arquivos, consultar se o rotacionamento de logs foi realizado com sucesso, analisar strings em arquivos de log, fazer cópia e/ou remoção de arquivos/pastas, etc.

Já utilizei bastante este tipo de consulta e sem dúvida é um grande poupador de tempo para quem atua com grande quantidade de servidores.

Para este caso estou utilizando chave pública em todos os servidores, ou seja, você não precisa utilizar senha para se conectar.

I- Primeiro exemplo:

Tenho uma grande quantidade de servidores contidos no arquivo "servers.txt" e necessito apenas consultar os servidores de desenvolvimento, do qual diferencia-se dos demais pela string 'dev' em seu hostname.

Nestes servidores eu quero consultar se a mensagem 'Server started in RUNNING mode' foi gerada no log da aplicação em  "/usr/application1/servers/Fast_01D/logs/Fas_01D.runlog".

O retorno seria da seguinte forma:
t01devadm.corporate.com: Aplicação iniciada com sucesso

t03devadm.corporate.com: Problema no start da aplicação

t07devadm.corporate.com: Aplicação iniciada com sucesso

...

...

Vamos realizar esta consulta em apenas uma linha de comando:

# for i in `cat servers.txt | grep dev`; do ssh $i "grep -i 'Server started in RUNNING mode' /apps/scripts/paths | grep -v grep; if [ $? -eq 0 ]; then echo '$i: Aplicação iniciada com sucesso; else echo '$i: Problema no start da aplicação'; fi"; done

II- Segundo exemplo:

Imagine que tenho a aplicação wtop do qual o processo é exibido da seguinte maneira:

# ps -ef | grep wtop
   demeg  3357     1  0 Dec15         00:00:04 /opt/wtop/bin/wtop.binary -listen tcp:8025 -permanent -http 8107 -logfile /usr/application/wtop/log/wtop.log

Esta aplicação roda em todos os servidores que iniciam com o prefixo 'w01', 'w02', 'w03' até 'w09'.

Eu quero o retorno do servidor, usuário e PID que iniciou a aplicação, ficaria assim:
w01hostprod.corporate.com
demeg 1397

w02hostprod.corporate.com
demeg 1003

w03hostprod.corporate.com
xwek 4592

...
...
...

Vamos ao comando:

# for i in cat $(servers.txt | grep ^w0[1-9] ); do ssh $i "echo -e '\n$i'; ps -ef | grep wtop | grep -v grep | cut -d' ' -f1,3"; done

Bom, estas são apenas algumas das formas que podemos utilizar no terminal shell.

Se necessitar automatizar para rodar, pode-se criar scripts e gerar logs para cada execução.

Espero ter ajudado!

Outras dicas deste autor

Como economizar na digitação do seu prompt?

Qual o maior número da variável RANDOM?

Leitura recomendada

Sistema de backup em shell script

if/then/elif/else - Escrevendo de outra maneira em bash

Caracteres Gráficos no Emulador de Dos

Resolvendo waiting ou idle transaction no PostgreSQL

Comentar em bloco

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts