Хвост несколько удаленных файлов
Есть ли способ удаленного хвоста 2 файла?
У меня есть два сервера (a и b) за балансировщиком нагрузки, и я хотел бы сделать что-то вроде этого, если это возможно:
tail -f admin@serverA:~/mylogs/log admin@serverB:~/mylogs/log
Спасибо!
13 ответов
Это сработало для меня:
ssh -n user@hostname1 'tail -f /mylogs/log' &
ssh -n user@hostname2 'tail -f /mylogs/log' &
Мой предпочтительный вариант - пойти с мультитейлом. Я бы запустил что-то вроде:
multitail -l 'ssh user@host1 "tail -f /some/log/file"' -l 'ssh user@host2 "tail -f /some/log/file"'
Вы можете использовать fabric для отслеживания нескольких хостов (а также, если нужно, результатов grep):
$ fab -P -u 'USER' -p 'PASSWORD' --linewise -H host1,host2,host3 -- tail -f /path/to/my/log.log | grep ERROR
Я думал, что это также может быть возможно использовать:
ssh -f user@hostname1 "tail -f /var/log/file" > /tmp/somefile &
ssh -f user@hostname2 "tail -f /var/log/file" > /tmp/somefile &
Параметр -f после ssh позволяет вам ввести пароль до его запуска в фоновом режиме. Тогда вы можете получить построчные результаты в одном файле и выполнить:
tail -f /tmp/somefile
Дадим вам немного больше контроля над текущей командой "tail" на случай, если вы захотите использовать другие опции tail для отображения вывода.
Проверьте этот ответ на stackoverflow - он использует dsh и tail -f.
Взгляните на мультитэйл. Как и в приведенных выше примерах, вы можете передать его в качестве команды для ssh, и тогда у вас будет один экран, отображающий (и буферизующий для простых прокруток) несколько журналов. Это также делает окраску, которая очень полезна для обнаружения аномалий.
Parallel s SSH имеет хорошее решение для этого:
pssh -t0 -H 'host-01 host-02 host-03 host-04' -P tail -f /var/log/app.log
-t0
отключает тайм-аут соединения, иначе pssh закрыл соединение-H '<host>...'
список хостов для запуска команды-P
включить печать стандартного вывода каждого хостаtail -f /var/log/app.log
может быть любой командой, которую может запустить ваша удаленная оболочка
Просто странное решение, но оно работает!
Экран 1
ssh user@hostname1 "tail -f /var/log/file" > /dev/pts/6
Экран 2
ssh user@hostname2 "tail -f /var/log/file" > /dev/pts/6
Вы можете оформить заказ.
Я создал инструмент Java, способный читать локальные и удаленные файлы журналов, используя SSH. Это довольно просто в использовании.
Еще несколько объяснений: https://github.com/pschweitz/DBITail/wiki
Просто загрузите версию, соответствующую вашей операционной системе, с собственным исполняемым файлом jar release в вашей среде выполнения Java (требуется java 8_40 или выше):
https://github.com/pschweitz/DBITail/releases
Вы можете найти полную документацию (встроенную вместе со страницей Github)
Philippe
Что бы вы сказали о чем-то вроде этого? http://gist.github.com/303175
Или вы можете использовать экран, чтобы создать два терминала, а затем разделить их.
SSH на первом хосте, к которому вы хотите подключить файл журнала, и перед запуском tail войдите в экран.
Затем подключите файл на этом хосте.
CTRL + A, c создаст новый экран или окно. Из этого нового окна ssh во 2-й хост и подключите туда файл.
Теперь, чтобы создать разделенный экран
CTRL+A, SHIFT+S, это создаст разделенный экран с текущей оболочкой в верхней части и нижней частью пустой. Чтобы переключиться на нижнюю часть и поместить в нее первый экран,
CTRL + A, TAB, это переместит вас в нижнюю часть. Теперь, чтобы перенести ваш первый сеанс SSH в эту область:
CTRL + A, "(символ кавычки) и выберите первую сессию и нажмите ввод.
Я понимаю, что это может выглядеть как большая гимнастика, и это так, но вы привыкнете к этому, если будете использовать ее несколько раз.
Вот действительно хороший учебник или краткий справочник по командам экрана: http://www.pixelbeat.org/lkdb/screen.html
Кроме того, вы можете создать файл.screenrc, чтобы многое из того, что я описал, можно было автоматизировать при первом входе в экран.
Еще одна приятная вещь - это то, что вы можете просто закрыть сеанс и возобновить его в другом месте. Например, вы на работе, и у вас есть какой-то мониторинг. Вы можете просто закрыть сеанс, не выходя из системы, и возобновить работу, когда вернетесь домой или в другое место.
Продолжая принятый ответ @einstiien, вот скрипт bash, который очищает фоновые процессы с помощью Ctrl-C. Его можно настроить с помощью пользователя и списка серверов. Предполагается, что вы запустите скрипт на одном из серверов в списке.
#!/bin/bash
# Purpose: Continuously tail and combine log files on current and other servers
# configuration:
# servers, need to be hostname:
servers=("jimmy-neutron-01" "jimmy-neutron-02" "jimmy-neutron-03")
# remote user:
user="jneutron"
function ctrl_c_cleanup() {
echo
echo 'Ctrl-C trap: kill remote tail processes:'
plist=`ps -eaf | egrep "ssh .* $user[@].* tail \-f" | awk '{print $2}' | xargs echo`
echo "kill -9 $plist"
echo $plist | xargs kill -9
}
if [ $# -lt 1 ]; then
echo "Purpose: Continuously tail and combine log files on current and other servers"
echo "Example: $ xtail /var/log/nginx/access.log"
else
echo "tail -f $1 across servers: ${servers[@]}"
trap ctrl_c_cleanup INT # trap Ctrl-C and call ctrl_c_cleanup()
host=`uname --nodename`
for server in ${servers[@]}; do
if [[ $server != $host ]]; then
ssh -t "$user@$server" "tail -f $1" &
fi
done
tail -f "$1" # tail local log and wait for Ctrl-C
fi
#EOF
Сохраните это какxtail
, сделайте его исполняемым и доступным по пути.
Пример использования:
$ xtail /var/log/nginx/access.log
tail -f /var/log/nginx/access.log across servers: jimmy-neutron-01 jimmy-neutron-02 jimmy-neutron-03
...continuous log output...
^C
Ctrl-C trap: kill remote tail processes:
kill -9 116919 116921
Вы можете использовать Tail файлы удаленно, используя bash и rsync, я использую его, и это отличный сценарий bash, посмотрите следующее руководство