Логи и диагностика

Что это такое

Диагностика хоста Linux — это в основном чтение того, что он уже записал. Ядро сообщает о событиях оборудования и ресурсов, супервизор служб сообщает о запусках и сбоях, а каждая служба пишет собственный вывод; всё это собирается в одном месте и ротируется, чтобы не заполнить диск. Навык в том, чтобы знать, какой источник отвечает на какой вопрос, и читать от симптома назад, а не гадать вперёд.

Почему это важно

Большинство инцидентов на хосте разрешается строкой журнала, которая уже была там: служба, не сумевшая занять порт, истёкший сертификат, файловая система, у которой кончилось место, отказанное право. Люди, не читающие логи, перезапускают службу и надеются — это работает достаточно часто, чтобы стать привычкой, и отказывает ровно тогда, когда ставки выше всего. Чтение собственного отчёта системы первым быстрее любой гипотезы, и оно оставляет запись о том, что произошло на самом деле.

Ключевые идеи

У каждого вопроса есть источник

Сообщения ядра описывают оборудование, сеть и убийства из-за нехватки памяти. Супервизор сообщает, какая служба запустилась, остановилась или отказала. Собственный журнал службы сообщает, чем она занималась, когда отказала. Начать с симптома — служба не работает, сайт медленный, диск полон — и перейти к источнику, которому принадлежит этот симптом, и есть весь метод.

служба не запускается   -> журнал супервизора для юнита, затем вывод службы
хост перестаёт отвечать -> журнал ядра об исчерпании ресурсов
диск полон              -> использование файловой системы, затем крупнейший журнал или открытый удалённый файл

Время — организующее измерение

Полезное чтение хронологично: что было последним перед симптомом? Сопоставление отметки времени супервизора о перезапуске с последней строкой вывода службы обычно выявляет причину за один шаг. Часовые пояса важны, потому что служба может писать в поясе, отличном от системного, поэтому согласованные отметки времени стоит навязывать.

Ротация — вот что не даёт логам стать инцидентом

Логи растут без границ, если что-то не ротирует, не сжимает и не удаляет их. Обычный отказ — служба, пишущая огромный объём на уровне, которого никто не читает, заполняет диск, что затем вызывает отказ, который наполняет логи ошибками. Осознанно задать хранение и отправлять важные логи с хоста — обе части ответа.

Уровни существуют, чтобы отделить обычное от исключительного

Журнал на уровне debug бесценен при диагностике и гибелен в спокойном состоянии. Задать разумное значение по умолчанию и временно поднять уровень — это дисциплина; оставить debug включённым в продакшене — вот как хост тихо заполняет свой диск.

Отказы записаны и называют решение

Отказы в правах появляются в журнале аудита ядра и в выводе службы, обычно называя пользователя, путь и операцию. Прочитать эту строку куда быстрее, чем подбирать права наугад, и это предотвращает привычку ослаблять доступ, пока что-нибудь не заработает.

Симптом — не причина, а перезапуски уничтожают улики

Перезапуск падающей службы очищает её состояние и часто её временную диагностику, поэтому второй отказ выглядит новым. Читать логи до перезапуска и фиксировать состояние, породившее отказ, — привычка, которая делает повторяющиеся инциденты решаемыми.

Практика

Диагностируйте только по логам

Возьмите службу, которая не запускается, потому что её порт уже занят. Найдите в журнале супервизора и в сообщениях ядра улику, называющую конфликт, ничего не меняя сначала.

Готово, когда: вы можете назвать конфликтующий процесс и строку журнала, которая его выявила.

Задайте хранение осознанно

Настройте ротацию и хранение для логов службы и убедитесь, что старые записи сжимаются и в конце концов удаляются.

Готово, когда: вы можете назвать максимальное место на диске, которое могут занимать логи, и видите, что политика соблюдается.

Частые ошибки

  • Перезапуск до чтения логов — улика о первом отказе пропала; исправить: сначала прочитайте журнал супервизора и вывод службы.
  • Оставленный включённым debug в продакшене — диск заполняется и вызывает следующий отказ; исправить: задайте разумный уровень по умолчанию и поднимайте его временно.
  • Логи, которые никогда не ротируются — рост безграничен, пока диск не откажет; исправить: ротируйте, сжимайте и задавайте хранение осознанно.
  • Ослабление прав, пока ошибка не исчезнет — причина записана как отказ, называющий путь и пользователя; исправить: прочитайте отказ и дайте конкретный доступ.
  • Сравнение отметок времени из разных поясов — события выглядят не по порядку, и сопоставление ломается; исправить: навяжите единый часовой пояс в логах.

Что читать дальше