Как передать вывод journalctl в cURL? [закрыто]

Я пытаюсь отправить журналы на удаленный сервер с помощью curl. Я попробовал следующую команду, но ничего не произошло

journalctl -o json -f | curl -H "content-type: application / json" -d @ - http: // logs

Есть идеи?

-2
задан 14 October 2014 в 00:01
2 ответа

Похоже, что правильный способ получения событий 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.

4
ответ дан 5 December 2019 в 21:04

Вам может понадобиться -X POST там, чтобы быть уверенным, как данные отправляются на сервер, хотя, похоже, это подразумевается в -d .

Использование вами -f в journalctl заставляет его работать так же, как tail -f , в котором поток остается открытым. Это говорит о том, что вы намерены создать постоянный HTTP-туннель, который отправляет новые строки журнала на сервер журнала через http. Согласно справочной странице:

В обычных рабочих ситуациях curl будет использовать стандартный поток вывода с буферизацией, что приведет к тому, что данные будут выводиться фрагментами, а не обязательно точно в момент поступления данных.

Такое поведение не соответствует действительности. не соответствует твоим намерениям. Вы, вероятно, захотите также запустить с параметрами -N или - no-buffer , чтобы каждая строка передавалась по конвейеру для скручивания по мере поступления.

3
ответ дан 5 December 2019 в 21:04

Теги

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