Логи и диагностика — Примеры

Пример 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 включённым в продакшене, где уровень, выбранный на один день, тихо заполняет диск, который нужен и приложению.