Pular para o conteúdo

Como realizar consultas em vários servidores simultaneamente

Dica publicada em Shell Script / Miscelânea
Alexandre Gonçalves Monteiro da Silva alexandregms
Hits: 5.950 Categoria: Shell Script Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

Como economizar na digitação do seu prompt?

basename - Inserindo ponto separador de milhar em expressão numérica

Usando comandos *nix portados para Windows

Apagar Todo o Histórico do Terminal

Mplayer 1.0pre6a (script de instalação)

"Bleeding Edge" para o seu Ubuntu 32 bits

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.