Вопрос или проблема
journalctl
показывает логи в следующем формате
<ДАТА> <ВРЕМЯ> <ИМЯ ХОСТА> <ИМЯ ЕДИНИЦЫ> <СООБЩЕНИЕ>
Когда мне нужно было получить логи от одной единицы, я добавлял флаг -u
journalctl -u <ИМЯ ЕДИНИЦЫ>
. Это работает в большинстве случаев, но не для Flatpak. Важно отметить, что “решение” с grep
или awk
не принимается, так как оно отправляет все логирование от всех единиц в простой текстовый фильтр. Это требует от пользователя создания более сложного фильтра, чтобы другие логи от других приложений не были извлечены. Будет полезно объяснить, почему отображаемые имена в логах не всегда можно использовать с флагом -u
.
Пример:
> journalctl -b -1 -xe
...
Dec 29 18:05:51 hostname io.github.mrvladus.List.desktop[2999]: [DEBUG] Notifications: Check
Dec 29 18:05:51 hostname io.github.mrvladus.List.desktop[2999]: [DEBUG] Notifications: Check
Dec 29 18:05:51 hostname io.github.mrvladus.List.desktop[2999]: [DEBUG] Notifications: Check
Dec 29 18:05:51 hostname io.github.mrvladus.List.desktop[2999]: [DEBUG] Notifications: Check
...
> journalctl -b -1 -u io.github.mrvladus.List.desktop[2999]
Failed to add filter for units: No data available
> journalctl -b -1 -u io.github.mrvladus.List.desktop
-- No entries --
> journalctl -b -1 -u List.desktop
-- No entries --
> journalctl -b -1 -u flatpak-app-io.github.mrvladus.List.desktop
-- No entries --
> journalctl -b -1 -u flatpak-app-io.github.mrvladus.List.scope
-- No entries --
из https://unix.stackexchange.com/a/170396/416910 я узнал, что
systemctl list-unit-files --all
перечислит все единицы, которые могут генерировать логи. В этом выводе нет ничего похожего на io.github.mrvladus.List
в моем случае. Как она может генерировать логи, если её нет в этом списке?
Этот вопрос похож на Почему journalctl не отображает сообщения лога, если я использую фильтрацию по единице?, но автор утверждает, что это была ошибка, которая была исправлена в версии 236. Он так и не уточнил, решил ли обновление его проблему.
> journalctl --version
systemd 257 (257.1-1-arch)
+PAM +AUDIT -SELINUX -APPARMOR -IMA +IPE +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK +BTF +XKBCOMMON +UTMP -SYSVINIT +LIBARCHIVE
Ответ или решение
Для устранения проблемы с фильтрацией логов Flatpak приложений в journalctl
с использованием флага -u
, важно понять, почему текущий подход не работает.
Почему -u
не отображает логи Flatpak приложений
Архитектура и специфика Flatpak
Flatpak приложения запускаются в изолированных контейнерах, что позволяет обеспечивать безопасность и управляемость приложений. Эти приложения не являются полноценными системными юнитами, а их процессы могут быть запущены под другим пользователем и/или с использованием других механизмов, чем у традиционных системных служб, управляемых systemd
.
Юниты в systemd
Когда вы используете флаг -u
в journalctl
, вы фильтруете логи по определенному системному юниту systemd
. Однако Flatpak приложения не всегда имеют соответствие в виде systemd
юнитов, поэтому попытки фильтрации с использованием известных стратегий на уровне юнитов не дают результата.
Почему отображаемые имена логов не всегда фильтруются
-
Иерархия имён: Имена Flatpak приложений, такие как
io.github.mrvladus.List.desktop
, часто логируются не как юнит, а как идентификатор процесса или логический объект, управляемый другим механизмом. -
Отсутствие регистрации в
systemd
: Flatpak процессы могут не регистрироваться как отдельные юниты в системеsystemd
, что объясняется отсутствием их в списке выведенном командойsystemctl list-unit-files --all
.
Как получить нужные логи без grep
или awk
Если использовать стандартные методы, такие как grep
или awk
, неприемлемо, вам следует обратить внимание на следующие подходы:
-
Использование
flatpak ps
: Этой командой можно определить запущенные Flatpak приложения и их процессы. -
Прямое обращение к логам приложения: Если возможно, обратитесь к логам во внутренних каталогах приложения, поскольку многие Flatpak пакеты ведут собственные логи.
-
Анализ пространства имён процессов: Определите простор использования системных ресурсов и выполните таргетирование процессов, запущенных через Flatpak.
-
Использование утилит мониторинга, поддерживающих Flatpak: Некоторые утилиты и интеграции системы могут лучше справляться с такой спецификой за счёт дополнительных плагинов или модулей, специально разработанных для работы с контейнерами.
Подведение итога
Несмотря на то, что journalctl
не позволяет напрямую отфильтровать логи для Flatpak приложений из-за особенностей их реализации и управления процессами, есть альтернативные подходы для мониторинга и захвата логов. Разработка подходов для работы с journalctl
непосредственно через доработки может быть ограниченной, поэтому важно воспользоваться интеграциями и утилитами, более ориентированными на работу с контейнерами и Flatpak окружениями.
Для профессионалов ИТ важно рассматривать системные логи через призму экосистемы приложения, а не только системных процессов, особенно в случае распространённых технологий контейнеризации.