Ogonuj wiele zdalnych plików


41

Czy istnieje sposób na zdalne pliki tail 2?

Mam dwa serwery (a i b) za modułem równoważenia obciążenia i jeśli to możliwe, chciałbym zrobić coś takiego:

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

Dzięki!


Dlaczego skasowałeś odpowiedź?
Pablo Fernandez

głównie dlatego, że to nie działało :-)
mat

@mat Oh właśnie chciałem spróbować :). W każdym razie dzięki!
Pablo Fernandez

To nie działa, ponieważ <(foo) konstrukt będzie czekać na polecenia wewnętrznego do końca przed zastąpione przez rury w oryginalnej linii komend, z którego oprogramowanie będzie w stanie odczytać, a ogon nigdy nie skończy :-)
mat

Odpowiedzi:


31

To działało dla mnie:

ssh -n user@hostname1 'tail -f /mylogs/log' &
ssh -n user@hostname2 'tail -f /mylogs/log' &

Tak, tak to robię, tyle że zwykle mam otwartych wiele terminali gnomów, z których każda ma jedną sesję
Tom O'Connor

1
Czy można to zrobić bez otwierania wielu niezależnych sesji ssh?
tgies

8
Ale to nie pozwala ci zatrzymać ogonowania Ctrl+C.
sorin

@sorin, aby zakończyć procesy, po prostu przenieś każdy z nich na pierwszy plan fg; możesz to ctrl+czrobić. Zrobiłbyś to raz dla każdego uruchomionego ogona. Lub możesz pkill -f sshskierować wszystkie z nich jednocześnie.
Dale Anderson

34

Moją preferowaną opcją jest skorzystanie z multitail. Prowadziłbym coś takiego:

multitail -l 'ssh user@host1 "tail -f /some/log/file"' -l 'ssh user@host2 "tail -f /some/log/file"'

1
Dzięki! Szukałem przykładu, jak korzystać z multitail przez ssh / na zdalnych hostach!
Noah Sussman,

Multitail jest znacznie bardziej niezawodnym rozwiązaniem.
obfk

nasza strona ma ponad 10 węzłów internetowych, a multitail kończy się niepowodzeniem przy pierwszej próbie z błędem Operation not permitted, z 2 3 węzłami internetowymi, jest w porządku
Hieu Vo

Dostaję też Operation not permittedjakieś wskazówki?
Erik Aigner,

7

Możesz użyć tkaniny do ogonienia kilku hostów (a także wyników grep, jeśli to konieczne):

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

6

Myślałem, że może być również możliwe użycie:

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

Opcja -f po ssh pozwala wprowadzić hasło, zanim uruchomi się w tle. Następnie możesz uzyskać wyniki linia po linii w jednym pliku i uruchomić:

tail -f /tmp/somefile

Dałoby ci to nieco większą kontrolę nad bieżącym poleceniem „ogon”, na wypadek gdybyś chciał użyć innych opcji ogona do wyświetlania wyników.



5

Spójrz na multitail . Podobnie jak w powyższych przykładach, możesz podać to jako polecenie dla ssh, a wtedy skończy się na jednym ekranie wyświetlającym (i buforującym dla łatwego przewijania) wiele dzienników. Robi również kolorowanie, co jest bardzo przydatne w wykrywaniu anomalii.


2

Równoległe ssh ma na to fajne rozwiązanie:

pssh -t0 -H 'host-01 host-02 host-03 host-04' -P tail -f /var/log/app.log
  • -t0 wyłącza limit czasu połączenia, w przeciwnym razie pssh zamknie połączenie
  • -H '<host>...' to lista hostów do uruchomienia polecenia
  • -P jest włączenie drukowania standardowego dla każdego hosta
  • tail -f /var/log/app.log może być dowolną komendą, którą może uruchomić twoja zdalna powłoka


1

To dziwne rozwiązanie, ale działa !:

Ekran 1

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

Ekran 2

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

to zadziała, wypisując wiersze na terminalu / dev / pts / 6 (aby znaleźć własny terminal: wykonaj: who am i i pokaże ci to.)
Olivier Dulac

1

Możesz sprawdzić dbitail.

Stworzyłem narzędzie Java, które potrafi czytać lokalne i odległe pliki dziennika za pomocą SSH. Jest dość prosty w użyciu.

Kilka dodatkowych wyjaśnień: https://github.com/pschweitz/DBITail/wiki

Po prostu pobierz wersję odpowiadającą Twojemu systemowi operacyjnemu, natywnego wydania jar do wykonania w środowisku Java Runtime (wymaga java 8_40 lub wyższej):

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

Możesz znaleźć pełną dokumentację (osadzoną również na stronie I Githuba)

Philippe


0

lub możesz użyć ekranu, aby utworzyć dwa terminale, a następnie podzielić je.

SSH do pierwszego hosta, dla którego chcesz ogonić plik dziennika, a przed uruchomieniem ogona przejdź do ekranu.

Następnie ogon plik na tym hoście.

CTRL + A, c utworzy nowy ekran lub okno. Z tego nowego okna ssh do 2. hosta i ogon tam plik.

Teraz, aby utworzyć podzielony ekran

CTRL + A, SHIFT + S, spowoduje to utworzenie podzielonego ekranu z bieżącą powłoką w górnej części i dolnej części pustej. Aby przejść do dolnej części i umieścić w niej pierwszy ekran,

CTRL + A, TAB, przeniesie Cię do dolnej części. Teraz przenieś swoją pierwszą sesję SSH w ten obszar:

CTRL + A ”(symbol cytatu) i wybierz pierwszą sesję i naciśnij Enter.

Zdaję sobie sprawę, że może to wyglądać na dużo gimnastyki i tak jest, ale przyzwyczajasz się, gdy użyjesz jej kilka razy.

Oto naprawdę dobry samouczek lub szybkie odniesienie do poleceń ekranu: http://www.pixelbeat.org/lkdb/screen.html

Dodatkowo możesz utworzyć plik .screenrc, aby większość tego, co opisałem, mogła zostać zautomatyzowana przy pierwszym wejściu do ekranu.

Kolejną miłą rzeczą jest to, że możesz po prostu zamknąć sesję i wznowić ją w innym miejscu. Na przykład jesteś w pracy i trwa monitorowanie. Możesz po prostu zamknąć sesję bez wylogowywania się i wznowić po powrocie do domu lub w inne miejsce.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.