Шесть дорогостоящих ловушек в сборе журналов: от местных ошибок управления до надвигающихся системных сбоев

Шесть дорогостоящих ловушек в сборе журналов: от местных ошибок управления до надвигающихся системных сбоев

15 августа 2025 г.

Фон

При мониторинге статуса работы системы и устранения комплексных проблем с устранением неполадок журналы давно служили незаменимым методом наблюдения. Научные стратегии управления местным журналом не только сохраняют более полные исторические записи на местном уровне и минимизируют накладные расходы на производительность, но и облегчают сбор журналов и последующий анализ. Однако в реальном O & M мы часто сталкиваемся с контрпримерами. Проблемы сбора, вызванные такими дефектами управления, не могут быть идеально решены с помощью основных инструментов сбора, таких как LoingCollector (ранее ilogtail), FileBeat, Fluentbit, Vector и Collector Collector. Лучшая практика - решить основную причину. Здесь мы суммируем наш опыт, надеясь дать некоторое вдохновение и коллективно улучшить утилиту для всех.

1. Использование режима усечения копирования для вращения журнала может привести к потере журнала или дубликату из-за неатомных операций и создания новых файлов.

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

  1. Новые файлы, сгенерированные операцией копирования, могут быть неоднократно собираться в качестве нового контента. Из -за изменений INODE в файловой системе коллекционер может не идентифицировать это как вращающийся старый файл.
  2. Журналы, сгенерированные между операциями копирования и усечения, могут быть потеряны. Существует временное окно между этими двумя операциями, в течение которых написанное содержимое не существует ни в скопированном файле, ни в исходном файле (так как оно будет очищено операцией усечения).
  3. Операция усечения может уменьшить размер файла и изменить содержание заголовка. Сокращение файла или изменение подписи заголовка заставит коллекционера неправильно объект его в качестве нового файла, что приведет к дублирующей коллекции.

Следовательно, режим усечения копирования может привести к таким проблемам, как дубликат сбора журналов, потеря контента или несоответствие.

Рекомендуется использовать режим создания для вращения журнала, то есть для создания нового файла и переименования старого файла, который обеспечивает целостность и непрерывность файла. Если неизбежно используйте точное имя пути при настройке настроек сбора.

2. Использование NAS или OSS для хранения журналов может привести к усечению или прекращению сбора журналов из -за непоследовательных метаданных и плохой производительности списка файлов.

Сетевое хранилище (NAS) обычно использует возможную модель согласованности, которая является общим дизайном в распределенных системах. В сценариях сбора в режиме реального времени это может вызвать следующие проблемы:

  1. Несоответствие между метаданными объектами и фактическим содержанием. Из -за возможной согласованности метаданные, такие как размер файла, могут быть обновлены до фактического контента.
  2. Читать операции возвращают отверстия для файлов. Если метаданные показывают, что файл вырос, но фактический контент не был синхронизирован, операция чтения может вернуть 0 символов (отверстия файла).
  3. Задержка данных. Результаты операций записи могут быть не сразу видны для чтения операций, что приводит к задержке сбора.
  4. Потеря данных. NAS не поддерживает INOTIF, а объекты перечислены на низкой скорости, поэтому файлы не могут быть обнаружены, что приводит к потере данных.

Эти проблемы могут привести к тому, что собранные данные не соответствуют конечному содержанию.

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

3. Multi-Process Writing Log может привести к неполному сбору данных из-за перезаписи взаимных данных.

Это обычная, но не рекомендуемая практика для нескольких процессов для записи в один и тот же файл журнала одновременно, что может привести к следующим проблемам:

  1. Чередовое содержимое файла. Запись по нескольким процессам может пересекаться друг с другом, вызывая расстройство в записях журнала.
  2. Неполная коллекция. Когда в файле происходит событие записи, коллекционер начинает собирать данные. Однако, если другие процессы продолжают писать данные в процессе сбора, это недавно написанное содержимое может быть пропущено.
  3. Файл блокировки. Multi-Process Writes может привести к конкурсу блокировки файлов, что влияет на производительность и надежность записи.

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

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

4. Создание отверстий файлов для выпуска места в файле журнала может привести к тому, что дубликат сбора журналов или потеря данных из -за изменений в подписи и контенте файла.

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

  1. Измененная подпись файла. LoingCollector (ранее ilogtail) дополнительно использует содержание заголовка файла в качестве основы для определения уникальности файла, чтобы предотвратить пропущенную коллекцию из -за повторного использования INODE. Создание отверстий может изменить эту подпись, заставляя коллекционера неправильно оценить их как новый файл.
  2. Проблемы целостности данных. Создание отверстий по существу заменяет исходный контент на 0 символов, что может привести к потере важных исторических журналов.
  3. Фрагментация файловой системы. Частое создание отверстий может привести к фрагментации файловой системы, ухудшению производительности чтения и записи.

Эта практика может привести к дублированию сбора данных и потери исторических данных.

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

5. Частое перезапись файлов может привести к неполным или непоследовательным собранным данным из -за постоянно изменяющегося содержимого файла.

Часто перезаписывать весь файл журнала является небезопасным методом управления журналами. Это может вызвать следующие проблемы:

  1. Непоследовательные метаданные и содержание. В процессе перезаписи метаданные, такие как размер файла, могут быть обновлены до фактического контента. В результате коллекционер читает неполный или непоследовательный контент.
  2. Риск потери данных. Если во время сбора журнала происходят операции по перезаписи, собранные данные могут быть беспорядочными или потерянными.
  3. Сложность сохранения исторических данных. Частое перезапись вызывает неспособность сохранить исторические журналы, что не способствует выпуска трассировки и анализа. Эта практика может привести к несоответствию между собранным контентом и конечным содержанием файла или полной потере содержимого файла.

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

6. Сохранение файлов, отредактированных с помощью VIM, может вызвать дубликат коллекции журналов из -за создания новых файлов для замены исходных.

Когда вы используете VIM для редактирования и сохранения файла, его механизм сохранения может вызвать следующие проблемы:

  1. Изменение INODE. Когда VIM создает новый файл для замены исходного, новый файл имеет другой INODE из оригинала, что может привести к тому, что коллекционер неправильно оценивает его как новый файл.
  2. Измененная подпись файла. Содержание заголовка нового файла может отличаться от содержимого исходного файла, который изменяет подпись файла. В результате коллекционер не может правильно идентифицировать файл.
  3. Потеря содержимого файла. Когда VIM заменяет файл, программа записи не может переключаться на недавно сохраненный файл журнала, что может привести к потере содержимого журнала.

Этот режим редактирования может привести к дублированию сбора журналов или потери данных.

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

Краткое содержание

Журнал - это «черный ящик» системных операций, и его качество управления напрямую влияет на эффективность устранения неполадок и надежность системы. Избегая анти-паттернов, упомянутых в этой статье, и следования передовым методам, таким как использование вращения логического магазина, локальное написание дисков и однопоточное добавление, вы можете значительно снизить риски сбора лога и улучшить наблюдаемость. Есть надежда, что эта статья может дать практические ссылки для команд по созданию надежной и эффективной системы управления журналами.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE