summaryrefslogtreecommitdiff
path: root/LINUX/JOURNALCTL.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/JOURNALCTL.md')
-rw-r--r--LINUX/JOURNALCTL.md160
1 files changed, 160 insertions, 0 deletions
diff --git a/LINUX/JOURNALCTL.md b/LINUX/JOURNALCTL.md
new file mode 100644
index 0000000..f3ba698
--- /dev/null
+++ b/LINUX/JOURNALCTL.md
@@ -0,0 +1,160 @@
+## Синтаксис и опции journalctl
+
+Если утилита не выводит ничего, выполните её от имени суперпользователя:
+
+**journalctl опции**
+
+- **--full, -l** - отображать все доступные поля;
+- **--all, -a** - отображать все поля в выводе full, даже если они содержат непечатаемые символы или слишком длинные;
+- **--pager-end, -e** - отобразить только последние сообщения из журнала;
+- **--lines, -n** - количество строк, которые нужно отображать на одном экране, по умолчанию 10;
+- **--no-tail** - отображать все строки доступные строки;
+- **--reverse, -r** - отображать новые события в начале списка;
+- **--output, -o** - настраивает формат вывода лога;
+- **--output-fields** - поля, которые нужно выводить;
+- **--catalog, -x** - добавить к информации об ошибках пояснения, ссылки на документацию или форумы там, где это возможно;
+- **--quiet, -q** - не показывать все информационные сообщения;
+- **--merge, -m** - показывать сообщения из всех доступных журналов;
+- **--boot, -b** - показать сообщения с момента определенной загрузки системы. По умолчанию используется последняя загрузка;
+- **--list-boots** - показать список сохраненных загрузок системы;
+- **--dmesg, -k** - показывает сообщения только от ядра. Аналог вызова команды dmesg;
+- **--identifier, -t** - показать сообщения с выбранным идентификатором;
+- **--unit, -u** - показать сообщения от выбранного сервиса;
+- **--user-unit** - фильтровать сообщения от выбранной сессии;
+- **--priority, -p** - фильтровать сообщения по их приоритету. Есть восемь уровней приоритета, от 0 до 7;
+- **--grep, -g** - фильтрация по тексту сообщения;
+- **--cursor, -c** - начать просмотр сообщений с указанного места;
+- **--since, -S, --until, -U** - фильтрация по дате и времени;
+- **--field, -F** - вывести все данные из выбранного поля;
+- **--fields, -N** - вывести все доступные поля;
+- **--system** - выводить только системные сообщения;
+- **--user** - выводить только сообщения пользователя;
+- **--machine, -M** - выводить сообщения от определенного контейнера;
+- **--header** - выводить заголовки полей при выводе журнала;
+- **--disk-usage** - вывести общий размер лог файлов на диске;
+- **--list-catalog** - вывести все доступные подсказки для ошибок;
+- **--sync** - синхронизировать все не сохраненные журналы с файловой системой;
+- **--flush** - перенести все данные из каталога /run/log/journal в /var/log/journal;
+- **--rotate** - запустить ротацию логов;
+- **--no-pager** - выводить информацию из журнала без возможности листать страницы;
+- **-f** - выводить новые сообщения в реальном времени, как в команде tail;
+- **--vacuum-time** - очистить логи, давностью больше указанного периода;
+- **--vacuum-size** - очистить логи, чтобы размер хранилища соответствовал указанному.
+
+## Горячие клавиши journalctl
+
+По умолчанию информация лога выводится в формате, в котором её можно листать. Давайте разберем горячие клавиши, которые вы можете для этого использовать:
+
+- **Стрелка вниз, Enter, e** или **j** - переместиться вниз на одну строку;
+- **Стрелка вверх, y** или **k** - переместиться на одну строку вверх;
+- **Пробел** - переместиться на одну страницу вниз;
+- **b** - переместиться на одну страницу вверх;
+- **Стрелка вправо, стрелка влево** - горизонтальна прокрутка;
+- **g** - перейти на первую строку;
+- **G** - перейти на последнюю строку;
+- **p** - перейти на позицию нужного процента сообщений. Например, 50p перенесет курсор на середину вывода;
+- **/** - поиск по журналу;
+- **n** - найти следующее вхождение;
+- **N** - предыдущее вхождение;
+- **q** - выйти.
+
+## Шпаргалка по journalctl
+
+Чтобы найти именно то, что вам нужно, необходимо научится перемещаться по этому списку. Формат вывода лога довольно простой:
+
+**янв 13 20:55:55 sergiy-pc kernel: Linux version 4.15.0-43-generic**
+
+- **янв 13 20:55:55** - дата и время события;
+- **sergiy-pc** - хост, на котором произошло событие;
+- **kernel** - источник события, обычно это программа или сервис. В данном случае ядро;
+- **Linux version 4.15.0-43-generic** - само сообщение.
+
+### 1. Просмотр логов сервисов
+
+Самый частый случай использования journalctl - это когда вы пытаетесь запустить какой-либо сервис с помощью systemd, он не запускается и systemd выдает вам такое сообщение подобного содержания: Failed to start service use journalctl -xe for details. Система сама предлагает вам какую команду надо выполнить:
+
+`sudo journalctl -xe`
+
+Как вы помните из опций, эта команда отображает последние сообщения в журнале и добавляет к ним дополнительную информацию, если она есть. Учитывая, что последнее, что мы делали - был наш сервис, то здесь будут сообщения от него и вы быстро сможете понять почему он не запускается.
+
+Чтобы отфильтровать сообщения только от определенного сервиса можно использовать опцию -u. Например:
+
+`sudo journalctl -eu apache2.service`
+
+### 2. Просмотр логов в режиме tail
+
+С помощью опции -f можно указать утилите, что необходимо выводить новые сообщения в реальном времени:
+
+`sudo journalctl -f`
+
+В этом режиме less не поддерживается, поэтому для выхода нажмите сочетание клавиш **Ctrl+C**.
+
+### 3. Просмотр логов загрузки
+
+В логе journalctl содержатся все логи, в том числе и логи загрузки. Для того чтобы открыть лог последней загрузки используйте опцию -b:
+
+`sudo journalctl -b`
+
+Посмотреть список всех сохраненных загрузок можно командой:
+
+`sudo journalctl -list-boots`
+
+Теперь, чтобы посмотреть сообщения для нужной загрузки используйте её идентификатор:
+
+`sudo journalctl -b 37d5c906c9c6404682f029b2c34ec9dc`
+
+### 4. Фильтрация по дате
+
+С помощью опции **--since** вы можете указать дату и время, начиная с которой нужно отображать логи:
+
+`sudo journalctl --since "2019-01-20 15:10:10"`
+
+Опция **--until** помогает указать по какую дату вы хотите получить информацию:
+
+`sudo journalctl -e --until "2019-01-20 15:05:50"`
+
+Или сразу скомбинируем две эти опции чтобы получить логи за нужный период:
+
+`sudo journalctl --since "2019-01-20 15:10:10" --until "2019-01-20 15:05:50"`
+
+Кроме даты в формате YYYY-MM-DD в этих опциях можно использовать такие слова, как yesterday, today, и tomorrow. Также допустимы конструкции **1 day ago** (один день назад) или **3 hours ago** (три часа назад). Ещё можно использовать знаки + и -. Например **-1h30min** будет означать полтора часа назад.
+
+### 5. Журнал ядра
+
+Если вы хотите посмотреть только сообщения ядра используйте опцию -k:
+
+`sudo journalctl -ek`
+
+### 6. Настройка формата вывода
+
+По умолчанию journalctl выводит информацию с помощью утилиты less, в которой вы можете её удобно листать и просматривать. Но формат вывода можно изменить:
+
+- **short** - используется по умолчанию;
+- **verbose** - также, как и short, только выводится намного больше информации;
+- **json** - вывод в формате json, одна строка лога в одной строке вывода;
+- **json-pretty** - форматированный вывод json для более удобного восприятия;
+- **cat** - отображать только сообщения, без метаданных.
+
+Чтобы указать нужный формат используйте опцию -o. Например:
+
+`sudo journalctl -o json-pretty`
+
+Или:
+
+`sudo journalctl -eo json-pretty`
+
+### 7. Очистка логов
+
+Сначала нужно посмотреть сколько ваши логи занимают на диске. Для этого используйте такую команду:
+
+`sudo journalctl --disk-usage`
+
+Чтобы уменьшить размер лога можно использовать опцию --vacuum-size. Например, если вы хотите, чтобы ваши файлы журналов занимали на диске не более 2 Гб, выполните команду:
+
+`sudo journalctl --vacuum-size=2G`
+
+Теперь старые логи будут удалены, пока общий объем хранилища не будет составлять 2 гигабайта.
+
+Также можно удалять логи по времени. Для этого используется опция --vacuum-time. Например, оставим только логи за последний год:
+
+`journalctl --vacuum-time=1years` \ No newline at end of file