На главную
- Инструкции для UNIX-систем
- Обзор
- Подключение к серверу по SSH
- Подключение к серверу по SFTP
- Авторизация по SSH-ключу
- Смена или сброс пароля root
- Смена пароля root для MySQL
- Добавление пользователей
- Управление правами доступа
- Защита SSH от подбора пароля. Fail2ban
- Создание дампа базы и восстановление данных
- Установка LAMP на Ubuntu
- Установка phpMyAdmin на Ubuntu с LAMP
- Установка SSL-сертификата на Nginx
- Установка модулей PHP (CentOS)
- Установка модулей PHP (Debian / Ubuntu)
- Настройка параметров PHP (CentOS)
- Настройка параметров PHP (Debian / Ubuntu)
- Настройка перенаправлений
- Настройка перенаправлений (Nginx)
- Настройка FTP в Ubuntu 20.04
- Оптимизация MySQL с помощью MySQLTuner
- Сканирование с помощью ClamAV
- Управление службами в systemd
- Логирование в systemd
- Аудит системных событий
- Добавление дополнительного IP
- Настройка статического IP
- Добавление и удаление диска
- Изменение размера диска
- Монтирование резервных копий
- Создание swap, изменение его размера
- Установка и удаление программ. Менеджеры пакетов
- Установка графической оболочки XFCE на Ubuntu
- Настройка iptables
- Настройка OpenVPN
- Установка произвольной ОС на сервер
- Удаленный доступ к MySQL
- Установка QEMU-агента
- Установка Zabbix-агента
- Установка и работа с PostgreSQL
- Установка почтового сервера iRedMail
- Настройка почтового сервера iRedMail
- Установка SSL на сервер с Keitaro
- Запуск Wordpress на сервере c Ubuntu
- Запуск бота в фоновом режиме
- Установка сертификатов Минцифры
- Подготовка образа для создания облачного сервера
- Создание и развертывание образа с помощью утилиты dd
- Установка Minecraft на CentOS 7
- Запуск сервера Minecraft
- Запуск сервера с CS 1.6 и EngineGP
- Запуск сервера RageMP
- Настройка Outline VPN
- Диагностика и решение проблем
- Инструкции для Windows
- Панели управления
Логирование в systemd
Системный менеджер systemd присутствует в большинстве современных Linux-дистрибутивов, в том числе, в Ubuntu, Debian и CentOS. С помощью systemd выполняется управление сервером и службами (например, их запуск и остановка), а также — ведение логов. В журнал systemd (компонент journal) собираются все системные сообщения — от ядра, служб и приложений. Логирование systemd может использоваться параллельно с syslog либо заменить его.
Для работы с логами используется утилита journalctl.
Просмотр и фильтрация логов
Отображение времени в логах
Просматривать записи логов можно как с указанием местного времени, так и с указанием UTC — достаточно внести в команду опцию --utc.
По умолчанию в выводе будет указано местное время. Чтобы убедиться, что часовой пояс задан верно, можно выполнить:
timedatectl status
Корректное местное время должно быть выведено в строке Local time.
Если требуются изменения, можно просмотреть весь список часовых поясов:
timedatectl list-timezones
После чего установить нужный:
timedatectl set-timezone часовой_пояс
Далее можно еще раз выполнить проверку с помощью timedatectl status.
Фильтр по определенной загрузке
Вывод событий из последней (то есть текущей) загрузки выполняется с помощью опции -b:
journalctl -b
Если нужно указать UTC вместо местного времени:
journalctl -b --utc
Вывод списка доступных загрузок:
journalctl --list-boots
Пример вывода:
-2 b94zf405f9424a1d39b667ce0bdbcff7 Wed 2020-07-08 08:34:12 MSK—Wed 2020-07-08 08:41:22 MSK
-1 t80dc883d180dc04z5db0abcb0dc5fa2 Wed 2020-07-08 09:01:46 MSK—Wed 2020-07-08 09:28:08 MSK
0 8cabc9420ea34a8d868e3014895269d8 Wed 2020-07-08 11:56:57 MSK—Wed 2020-07-08 13:51:27 MSK
Чтобы просмотреть данные конкретной загрузки из списка, необходимо указать ее порядковый номер (первая колонка в выводе) или ID (вторая колонка):
journalctl -b -1
# Или:
journalctl -b t80dc883d180dc04z5db0abcb0dc5fa2
Если по умолчанию данные предыдущих загрузок не сохраняются, необходимо внести изменения в конфигурационный файл:
sudo nano /etc/systemd/journald.conf
И заменить значение для Storage на persistent:
[Journal]
Storage=persistent
Фильтр по временному промежутку
Если интересующий нас период не совпадает с той или иной загрузкой, можно указывать конкретное время. Для этого используются:
- опции --since (начиная с) и --until (до)
- время в формате: "ГГГГ-ММ-ДД ЧЧ:ММ:СС"
- ключи yesterday, today, now (вчера, сегодня, сейчас)
Например, вывод событий с указанного времени по текущий момент:
journalctl --since "2020-07-06 07:00:00"
Вывод событий за конкретный период:
journalctl --since "2020-07-06 07:00:00" --until "2020-07-06 08:00:00"
Вывод событий со вчерашнего дня:
journalctl --since yesterday
Фильтр по службе (юниту)
Если нас интересуют только события конкретной службы, можно использовать:
journalctl -u имя_службы
Дополнительно могут быть внесены временные параметры. Например, чтобы просмотреть события Nginx за определенные часы, выполним:
journalctl -u nginx.service --since 10:00 --until 16:00
Можно указывать более одного юнита:
journalctl -u nginx.service -u php-fpm.service --since today
Фильтр событий ядра
Можно отдельно вывести только события kernel. Для этого используется -k.
Например, чтобы просмотреть такие события в одной из предыдущих загрузок, выполним:
journalctl -k -2
Фильтр по пользователю, группе или процессу
Есть возможность просматривать данные для конкретного PID, UID, GID:
journalctl _PID=id_процесса
journalctl _UID=id_пользователя
journalctl _GID=id_группы
Например, чтобы вывести только сегодняшние события, связанные с определенным процессом, выполним:
journalctl _PID=544 --since today
Получить список всех ID, записи о которых есть в логах, можно с помощью:
journalctl -F _UID
# Аналогично для GID:
journalctl -F _GID
Фильтр по приоритету
С помощью опции -p можно вывести только события, начиная с определенного уровня приоритета. Уровни следующие:
- 0: emerg (авария, неработоспособность системы)
- 1: alert (тревога, требует немедленного внимания)
- 2: crit (критическое состояние)
- 3: err (ошибка)
- 4: warning (предупреждение)
- 5: notice (уведомление)
- 6: info (информация)
- 7: debug (отладка)
В команде можно указывать как название уровня, так и его числовое обозначение.
Например, следующей командой мы можем вести все события в текущей загрузке, имеющие уровень 3 (ошибка) и выше:
journalctl -p err -b
# Или:
journalctl -p 3 -b
Настройка отображения
Базовые настройки
Сокращение строк по ширине окна терминала:
journalctl --no-full
Запись в стандартный вывод (чтобы сделать возможной обработку другими утилитами, например, grep, или сохранение в текстовый файл):
journalctl --no-pager
Форматы вывода
Специфический формат вывода можно указать с помощью -o:
journalctl -o формат
Доступные форматы:
- cat — только само сообщение из лога, без служебной информации;
- export — бинарный формат, подходящий для экспорта или бэкапов логов;
- json — стандартный .json, с одной записью на строку;
- json-pretty или json-sse — удобный для чтения .json;
- short — формат вывода syslog;
- short-iso — формат вывода syslog с метками времени по стандарту ISO8601;
- short-monotonic — формат вывода syslog с монотонными временными метками;
- short-precise — формат вывода syslog с указанием времени с точностью до микросекунд;
- verbose — максимально подробный вывод, со скрытыми полями.
Пример использования:
journalctl -b -u nginx.service -o json-pretty
Отображение недавних событий
По умолчанию будут выведены последние 10 событий:
journalctl -n
Их количество можно уточнить, например:
journalctl -n 20
Вывод на экран событий в режиме реального времени:
journalctl -f
Управление журналом
Занимаемый объем
Узнать, сколько места на диске занимает журнал на текущий момент, можно с помощью:
journalctl --disk-usage
Ограничение объема
Вы можете настроить лимиты для журнала, отредактировав его конфигурационный файл:
sudo nano /etc/systemd/journald.conf
Можно настроить следующие параметры:
- SystemMaxUse= Максимальный объем на диске, который может занимать журнал.
- SystemKeepFree= Объем, который должен оставаться свободным на диске после сохранения логов.
- SystemMaxFileSize= Максимальный объем файла лога, при достижении которого он должен быть удален.
- RuntimeMaxUse= Максимальный объем, который могут занимать логи в файловой системе /run.
- RuntimeKeepFree= Объем, который должен оставаться свободным в файловой системе /run после сохранения логов.
- RuntimeMaxFileSize= Максимальный объем файла лога, при достижении которого он должен быть удален из файловой системы /run.
Удаление старых записей
Для удаления старых логов и уменьшения объема журнала можно использовать два способа.
1. Можно указать объем, к которому нужно привести журнал. Это запустит удаление старых записей до тех пор, пока журнал не будет уменьшен до указанного объема. Например:
sudo journalctl --vacuum-size=1G
2. Можно указать период, данные за которые должны быть сохранены. В этом случае все записи, которые будут старше указанного периода, удалятся. Например:
sudo journalctl --vacuum-time=1years
В этом случае будут удаляться все записи, кроме тех, что были созданы за последний год.