Я пытаюсь отправить журналы на удаленный сервер с помощью curl. Я попробовал следующую команду, но ничего не произошло
journalctl -o json -f | curl -H "content-type: application / json" -d @ - http: // logs
Есть идеи?
Похоже, что правильный способ получения событий JSON через Интернет, скорее всего, будет systemd-journal-gatewayd
. Вам нужно будет переписать другой конец, чтобы получать события с сервера, но согласно документации сервер может передавать данные JSON в поток, если вы добавите параметр follow
к URL-адресу:
curl -H 'Accept: application/json' 'http://localhost:19531/entries?follow'
Если ваше принимающее приложение отслеживает полученные события, оно может использовать заголовок диапазона, чтобы избежать получения повторяющихся событий при повторном подключении:
-H 'Range: cursorname:number_of_events_to_skip'
из документации не ясно, каким должно быть cursorname
, я подозреваю, что это уникальное имя, которое вы придумали, чтобы gatewayd мог сохранить отслеживание событий, которые оно показало вашему приложению, по сравнению с каким-либо другим приложением, которое также может требовать записи журнала.
В качестве альтернативы вы можете использовать systemd-journal-remote
для получения записей журнала в собственном формате на удаленном компьютере, затем используйте journalctl локально для получения данных JSON.
Вам может понадобиться -X POST
там, чтобы быть уверенным, как данные отправляются на сервер, хотя, похоже, это подразумевается в -d
.
Использование вами -f
в journalctl заставляет его работать так же, как tail -f
, в котором поток остается открытым. Это говорит о том, что вы намерены создать постоянный HTTP-туннель, который отправляет новые строки журнала на сервер журнала через http. Согласно справочной странице:
В обычных рабочих ситуациях curl будет использовать стандартный поток вывода с буферизацией, что приведет к тому, что данные будут выводиться фрагментами, а не обязательно точно в момент поступления данных.
Такое поведение не соответствует действительности. не соответствует твоим намерениям. Вы, вероятно, захотите также запустить с параметрами -N
или - no-buffer
, чтобы каждая строка передавалась по конвейеру для скручивания по мере поступления.