Como realizar consultas em vários servidores simultaneamente
Dica publicada em Shell Script / Miscelânea
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:
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
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:
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!
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!