Логи и диагностика — Примеры
Пример 1 — Юнит, который не запускается, диагностированный по записи
После развёртывания юнит api не запускается. Три выдержки — всё, что у вас есть. Назовите процесс, который держит порт, приведите строку, которая это доказывает, и укажите следующий шаг, сохраняющий улики.
супервизор: юнит api: запрошен запуск
супервизор: юнит api: основной процесс завершился, код 1
вывод api: bind: address already in use
ядро: процесс слушает порт 8443 (pid 2210, worker)
Решение
какой источник отвечает на что:
супервизор -> юнит отказал и с каким кодом возврата
вывод api -> почему отказал: порт уже занят
ядро -> кто его держит: pid 2210, worker
следующий шаг: остановите или перенастройте pid 2210, затем запустите юнит снова
не делайте: не перезапускайте юнит первым; код возврата и его вывод — это улики
У каждого вопроса есть источник, и чтение трёх строк по порядку выявляет конфликт, ничего не меняя, что сохраняет улику о первом отказе в записи. Время здесь — организующее измерение: отметка времени перезапуска у супервизора совпадает с сообщением ядра, поэтому два события — одно и то же. Обычная ошибка — перезапустить до чтения, что очищает вывод и заставляет второй отказ выглядеть новой проблемой.
Пример 2 — Ограничение объёма логов, пока он не стал отказом
Служба пишет на уровне debug и за один вечер произвела несколько гигабайт. Задайте политику хранения и назовите максимальное место, которое могут занимать логи.
наблюдалось (иллюстративно): уровень debug, за один вечер произведено 9 GB
том: /var/log лежит на корневом монтировании, всего 40G
Решение
уровень по умолчанию: info; поднимайте до debug только на время расследования
ротация: ротируйте ежедневно, храните 7 сжатых поколений, удаляйте восьмое
максимум: семь поколений сжатого объёма одного дня плюс текущий файл
также: отправляйте важные строки с хоста, чтобы этот предел не был единственной копией
Ротация — вот что не даёт логам стать инцидентом, который они затем записывают: уровень ограничивает скорость, а хранение ограничивает итог, поэтому максимальное занятое место — число, которое вы можете назвать. Отправка важных строк в другое место означает, что этот предел стоит вам истории, а не улик. Обычная ошибка — оставить debug включённым в продакшене, где уровень, выбранный на один день, тихо заполняет диск, который нужен и приложению.