Tail vários arquivos remotos

41

Existe uma maneira de remover remotamente 2 arquivos?

Eu tenho dois servidores (aeb) atrás de um balanceador de carga e gostaria de fazer algo assim, se possível:

tail -f admin@serverA:~/mylogs/log admin@serverB:~/mylogs/log

Obrigado!

Pablo Fernandez
fonte
Por que você apagou a resposta?
Pablo Fernandez
principalmente porque não funcionou :-)
mat
@mat Oh, eu estava prestes a experimentar :). Obrigado de qualquer forma!
Pablo Fernandez
ele não funciona porque a construção <(foo) aguardará a conclusão do comando interno antes de ser substituída por um canal na linha de comando original a partir da qual o software poderá ler, e a cauda nunca concluirá :-)
mat

Respostas:

31

Isso funcionou para mim:

ssh -n user@hostname1 'tail -f /mylogs/log' &
ssh -n user@hostname2 'tail -f /mylogs/log' &
einstiien
fonte
Sim, isso é como eu faço isso, exceto que eu geralmente têm vários gnome-terminais abrir, cada um com uma sessão dentro dele
Tom O'Connor
1
Existe uma maneira de fazer isso sem abrir várias sessões ssh independentes?
tgies
8
Mas isso não permite que você pare com o rejeito Ctrl+C.
22614
@sorin para finalizar os processos, basta trazer cada um de volta ao primeiro plano fg; então você pode ctrl+c. Você faria isso uma vez para cada cauda que está executando. Ou você pode pkill -f sshsegmentar todos eles ao mesmo tempo.
Dale Anderson
34

Minha opção preferida é usar multitail. Eu executaria algo como:

multitail -l 'ssh user@host1 "tail -f /some/log/file"' -l 'ssh user@host2 "tail -f /some/log/file"'
giro
fonte
1
Obrigado! Eu estava procurando um exemplo de como usar multitail sobre ssh / em hosts remotos!
Noah Sussman
Multitail é uma solução muito mais robusta.
obfk
nosso site tem mais de 10 nós de web, e multitail falhar na primeira tentativa com o erro Operation not permitted, com 2 3 nós de web, é ok
Hieu Vo
Eu também recebo Operation not permitted, alguma pista?
Erik Aigner
7

Você pode usar o fabric para ajustar vários hosts (e também resultados grep, se necessário):

$ fab -P -u 'USER' -p 'PASSWORD' --linewise -H host1,host2,host3 -- tail -f /path/to/my/log.log | grep ERROR
jbochi
fonte
6

Eu estava pensando que também seria possível usar:

ssh -f user@hostname1 "tail -f /var/log/file" > /tmp/somefile &
ssh -f user@hostname2 "tail -f /var/log/file" > /tmp/somefile &

A opção -f após ssh permite inserir uma senha antes de ser executada em segundo plano. Em seguida, você poderá obter os resultados linha por linha em um único arquivo e executando:

tail -f /tmp/somefile

Daria um pouco mais de controle sobre o comando "tail" atual, caso você desejasse usar outras opções de tail para exibir a saída.

bjcullinan
fonte
5

Dê uma olhada na multitail . Assim como nos exemplos acima, você pode atribuí-lo como um comando para ssh e, em seguida, você terminará com uma tela exibindo (e armazenando em buffer para facilitar a rolagem) vários logs. Também faz coloração, o que é muito útil para detectar anomalias.

Marcin
fonte
2

O ssh paralelo tem uma boa solução para isso:

pssh -t0 -H 'host-01 host-02 host-03 host-04' -P tail -f /var/log/app.log
  • -t0 desativa o tempo limite da conexão, caso contrário, o pssh fechou a conexão
  • -H '<host>...' é a lista de hosts para executar o comando
  • -P é permitir a impressão do stdout de cada host
  • tail -f /var/log/app.log pode ser qualquer comando que seu shell remoto possa executar
Augusto Hack
fonte
1

Apenas uma solução estranha, mas funciona!

Tela 1

ssh user@hostname1 "tail -f /var/log/file" > /dev/pts/6

Tela 2

ssh user@hostname2 "tail -f /var/log/file" > /dev/pts/6

fonte
isso funcionará, produzindo linhas no terminal / dev / pts / 6 (para descobrir seu próprio terminal: execute: who am i e ele será exibido para você).
Olivier Dulac
1

Você pode fazer o check-out dbitail.

Uma ferramenta Java que criei, capaz de ler arquivos de log locais e distantes usando SSH. É bastante simples de usar.

Mais algumas explicações: https://github.com/pschweitz/DBITail/wiki

Basta baixar a versão correspondente ao seu sistema operacional, da versão nativa do jar executável no Java Runtime (requer java 8_40 ou superior):

https://github.com/pschweitz/DBITail/releases

Você pode encontrar uma documentação completa (incorporada à página do I Github também)

Philippe

Philippe Schweitzer
fonte
0

ou você pode usar a tela para criar dois terminais e depois dividi-los.

SSH no primeiro host do qual você deseja ajustar o arquivo de log e, antes de executar o tail, entre na tela.

Em seguida, finalize o arquivo neste host.

CTRL + A, c criará uma nova tela ou janela. A partir desta nova janela, ssh no segundo host e finalize o arquivo lá.

Agora, para criar a tela dividida

CTRL + A, SHIFT + S, isso criará uma tela dividida com o shell atual na parte superior e a parte inferior vazia. Para alternar para a parte inferior e colocar a primeira tela nela,

CTRL + A, TAB, isso o levará para a parte inferior. Agora, traga sua primeira sessão SSH para essa área:

CTRL + A "" (símbolo de aspas) e selecione a primeira sessão e pressione Enter.

Sei que isso pode parecer um monte de ginástica, e é, mas você se acostuma depois de usá-lo algumas vezes.

Aqui está um tutorial realmente bom ou uma referência rápida aos comandos da tela: http://www.pixelbeat.org/lkdb/screen.html

Além disso, você pode criar um arquivo .screenrc para que muito do que eu descrevi possa ser automatizado na primeira vez que você entra na tela.

Outra coisa boa sobre isso é que você pode simplesmente fechar sua sessão e retomar em outro lugar. Por exemplo, você está no trabalho e tem algum monitoramento em andamento. Você pode simplesmente fechar sua sessão sem sair da sessão e continuar quando chegar em casa ou em outro local.

Quilo
fonte
0

Você pode ajustar os arquivos remotamente usando o bash e o rsync, estou usando e é um ótimo script do bash. Dê uma olhada no seguinte tutorial

Arquivos de cauda remotamente usando bash e rsync

user1381775
fonte
Link não trabalho
czerasz