Как я могу отслеживать несколько файлов и направлять их вывод в соединение SSH

Насколько я мог судить, FreeBSD ZFS не поддерживает копирование -на запись -. с помощью КП; у родного цп похоже нет такой опции облегченные копии и попытка GNU cp с ошибками --reflinkна система ZFS, которую я пробовал с сообщением об ошибке «cp :не удалось клонировать 'example.bak' из 'example.log' :Операция не поддерживается".

Комментатор упоминает, что Solaris cp имеет переключатель -zдля выполнения таких действий. копии.

Тем не менее, и я надеюсь, что это ответ на ваш основной вопрос, скопировать -в -записать это используется для моментальных снимков файловой системы :скажем, у вас есть 900Гб использовано из 1000Гб доступных, ничто не мешает вам сделать снимок этой файловой системы, снимок не будет занимать 900 ГБ; в на самом деле, изначально он вообще не будет занимать никаких новых блоков данных.

После создания моментального снимка исходной файловой системы, содержащего example.log, вы получите две "копии" :версию только для чтения -в снимок, и вы живая версия в исходном месте. какой происходит, когда копия изменяется, будь то добавление или удаление переделано в -месте? Вот где происходит волшебство :только те блоки которые изменены, копируются и начинают занимать место. Это не случай, когда весь файл копируется, как только он изменяется.

1
08.05.2020, 11:09
2 ответа

Если в little.control.serverустановлен perl, вы можете использовать GNU Parallel, запустив parallel --embedна своем компьютере для разработки:

parallel --lb --tag tail -f ::: /var/log/x/a.log /var/log/x/b.log |
       ssh user@192.168.x.y -T perl -e \''
        $|=1; # if you need less buffering
        open(A, ">", "a.log");open(B, ">", "b.log");
        while(<>) {
           if(s:/var/log/x/a.log\t::) { print A } 
           if(s:/var/log/x/b.log\t::) { print B }
        }'\'

Также загляните в ssh -Mдля мультиплексирования нескольких ssh по одному ssh каналу.

1
19.03.2021, 02:25

Ваше собственное решение:

sh -c tail -f /var/log/x/a.log /var/log/x/b.log | ssh user@192.168.x.y -T 'cat - > /media/z/logs/a.log'

передает всю необходимую журнальную информацию на сервер журналов, сервер (Ubuntu ), который находится под вашим контролем. (Запись в файл a.log кажется немного запутанной, потому что на самом деле запись в файл больше похожа на a -и -b.log .

Таким образом, одним из возможных решений, по-видимому, является :написание сценария, который считывает полученный один файл a -и -b.log с его строками заголовков и записывает два отдельных файла. logs (без строк заголовков, просто используя их для определения того, какому файлу принадлежит каждая строка журнала ). Запустите этот сценарий на сервере журналов, и все будет готово.

Это приемлемый ответ? Он не делает ничего «умного» с SSH,потому что кажется, что это не нужно --tail уже просматривает оба журнала и отправляет все записи журнала через одно SSH-соединение на сервер журналов с заголовками, чтобы определить, из какого журнала они взяты. Я думаю, вам просто нужно разбить их на два файла на сервере журналов.

1
19.03.2021, 02:25

Теги

Похожие вопросы