Linux Labs

Наблюдаемость: метрики, алерты, логи / Ступень 8 из 9

Расследование по журналам

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 6 · на машине · 8 мин

Поля записи

В журнале у записи больше полей, чем видно в строке, и нужные выбирает jq.

Строка журнала показывает время, машину, программу с номером процесса и текст. Сама запись хранит десятки полей, и все их печатает journalctl -o json (в Вики) — по объекту JSON на запись, одной строкой. Вот поля, которые нужны чаще других:

Поле Что в нём
MESSAGE текст записи
PRIORITY уровень числом: 3 — err, 4 — warning, 6 — info
_PID номер процесса
_SYSTEMD_UNIT юнит службы, которая писала
__REALTIME_TIMESTAMP время в микросекундах с 1970 года по UTC

Строка python3[1076] называет программу: если на машине несколько служб на Python, по строке их не различить, а по полю _SYSTEMD_UNIT — можно. Выбирает поля jq: jq -r '._SYSTEMD_UNIT' печатает одно поле без кавычек, select(.PRIORITY == "3") оставляет записи с уровнем err. Значения полей в JSON журнала — строки, поэтому число 3 стоит в кавычках.

bash
sudo journalctl -u lab-shop -o json -n 1 > ~/last.json
jq '{MESSAGE, PRIORITY, _PID, _SYSTEMD_UNIT}' ~/last.json
Проверь себя 1 вопрос

Что напечатает sudo journalctl -k -o json -n 1 | jq -r '._SYSTEMD_UNIT' — поле юнита у последней записи ядра?

  • journald только принимает и хранит запись. Юнит записи — служба, которая её написала, а запись ядра написало ядро.

  • Отсутствующее поле jq ошибкой не считает: для него это значение null, его он и печатает.

  • Слово kernel стоит в поле _TRANSPORT, а поля _SYSTEMD_UNIT у записи ядра нет: её прислала не служба.

У записи ядра нет поля _SYSTEMD_UNIT — его ставит journald записям служб, — и jq печатает null. Поэтому ошибки ядра при подсчёте по юнитам собираются под null.

Полями удобно считать: jq -r печатает поле каждой записи отдельной строкой, а uniq -c сворачивает одинаковые строки в одну с числом впереди — например, сколько записей с ошибками оставила за день каждая служба машины. uniq сворачивает только соседние строки, поэтому перед ним ставят sort, а sort -rn после него поднимает наверх самое большое число. Записи ядра при таком счёте соберутся под null.

Упражнение · сделать

Найди самую шумную службу

На машине несколько служб на Python, и все пишут в журнал под именем python3. Узнай, какая служба записала больше всего записей с уровнем err и серьёзнее, и запиши имя её юнита в ~/noisy.txt.

Войти и начать Машина доступна после входа

Цели · 0 из 1

  • Записать в ~/noisy.txt юнит службы с наибольшим числом ошибок ещё не выполнена

Цели шага

0 из 1
  • Записать в ~/noisy.txt юнит службы с наибольшим числом ошибок — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 1
  • Записать в ~/noisy.txt юнит службы с наибольшим числом ошибок — ещё не выполнена
Загрузка…