Объединение хвоста && journalctl

27

Я отслеживаю логи моего собственного приложения и postgres.

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log

Мне нужно включить логи pgpool. Раньше это был системный журнал, но теперь он находится в journalctl.

Есть ли способ связать tail -f && journalctl -f вместе?

Bikey
источник

Ответы:

27

Вы можете использовать:

journalctl -u service-name -f

-ф,

Показывать только самые последние записи журнала и постоянно печатать новые записи по мере их добавления в журнал.

Здесь я добавил «service-name», чтобы отличить этот ответ от других; вы заменяете реальное имя сервиса вместо текста service-name.

Toufic
источник
20

Вы можете переслать свои записи в журнал :

systemd-cat tail -f /tmp/myapp.log /var/log/postgresql.log

а затем используйте journalctl -f... хотя, как упоминал Марк, это напечатает все записи журнала.


Один из способов отфильтровать только сообщения из этих журналов и из этого конкретного модуля - использовать отдельный SYSLOG_IDENTIFIERфайл, т. Е. Отредактировать файл модуля и в [Service]разделе добавить, например:

SyslogIdentifier=my_stuff

перезапустите модуль, затем запустите systemd-catс тем же идентификатором

systemd-cat -t my_stuff tail -f /tmp/myapp.log /var/log/postgresql.log

и, наконец, запросить журнал только для этого конкретного идентификатора:

journalctl -f -t my_stuff
don_crissti
источник
4

Если у вас есть bash, вы можете использовать подстановку процесса в качестве одного из tailпараметров:

tail -f /tmp/myapp.log /var/log/postgresql/postgresql.main.log <(journalctl -f)
Джефф Шаллер
источник
Это элегантный способ, который я тоже пробовал, но он не работает. Хвост показывает, что он использует / dev / fd / xx, но журналы не отображаются.
бики
правильный; / dev / fd / xxx - это временный канал, который bash использует для реализации подстановки процесса; любой вывод journalctl будет отображаться там.
Джефф Шаллер
5
Вы, вероятно, не хотите следить за всем журналом, а только за журналом pgpool. Предполагая, что служба названа pgpool.service, попробуйте journalctl -fu pgpool.service. Кроме того, если вы не используете это как root, убедитесь, что пользователь находится в systemd-journalгруппе!
Марк Стосберг
1

попробуйте что-то вроде:

tail -f /tmp/myapp.log >> /tmp/tail.log &
journalctl -f >> /tmp/tail.log &
tail -f /tmp/tail.log
Павел
источник