Чи добре використовувати хвостик -f для великих журнальних файлів


9

Я хотів би стежити за великим файлом журналу (близько 1 ГБ) щодо помилок. Я хочу, щоб це було близько до реального часу (затримка на кілька секунд - це нормально). Мій план - використовувати tail -f | grep. Чи є проблеми з ефективністю використання такого методу при його застосуванні протягом тривалого часу, скажімо, від нуля байтів до 1 ГБ? Чи є якісь стандартні практики, використовувані для такого моніторингу. Зауважте, що я хотів би зробити це, використовуючи стандартні команди Unix, доступні в Solaris 10.

Якщо це можливо, мій файл навіть перекидається, і я маю ще одну проблему розібратися :). використання tail -F( --follow=name) не є для мене варіантом, оскільки -Fне підтримується на сервері, на якому я хочу запустити це. Мій план полягає у використанні скрипту, який запустить цей хвіст і опитуватиметься, щоб знайти, чи перекидається файл. Якщо так, то вбийте хвіст і перезапустіть його. Будь-який кращий підхід?


Ви маєте на увазі "вбити tail", правда?
Стефан Гіменез

Так, "вбити хвіст", не знайти. Дякую, відредагували питання
Manoj NV,

1
Якщо файл розміром 2 ГБ не містить нового символу рядка, як працює хвостик?

Відповіді:


6

У моїй системі Linux (GNU coreutils 8.12) я зміг перевірити (використовуючи strace), що tail -f¹ використовує lseekсистемний виклик, щоб швидко пропустити більшу частину файлу:

lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 194086
lseek(3, 188416, SEEK_SET)              = 188416

Це означає, що розмір відстежуваного файлу в жодному разі не повинен мати значення.

Можливо, ви можете перевірити, чи те саме стосується вашої системи. (Очевидно, так і має бути.)

-
1. Я також намагався відключити ініціювати підтримку з бездокументованою ---disable-inotifyсправою, про всяк випадок.


2
Справжні чоловіки читають джерело (:
Жил "SO- перестань бути злим"

2
@Gilles. Я не можу навчити ОП (чи читача) як читати джерело, якщо він уже не знає. Набагато простіше сказати йому користуватися strace;)
Стефан Гіменез

Насправді, у системі, де tail -Fвона не підтримується, шанси на те, що straceїї немає ...
Stéphane Gimenez

trussє відповідною утилітою на Solaris.
Жил 'ТАК - перестань бути злим'

і він показує подібні дзвінки для пошуку. llseek (0, 0, SEEK_CUR) = 0, llseek (0, 0xFFFFFFFFFFF5FFF6, SEEK_END) = 7923269
jlliagre

5

Якщо його викликають у звичайному файлі (на відміну від труби), і хвіст GNU, і хвіст OpenBSD (якщо вони не викликаються -n +N) прагнуть до кінця файлу, а потім працює назад, щоб знайти рядок, з якого слід розпочати друк. Я не знаю, чи робить Соларіс те саме, але це розумний підхід, тому я очікую, що більшість уніцій зробить те саме. Тому розмір файлу не має значення для продуктивності.


2

Я роблю це щодня. Я зазвичай сканую десяток журналів на наших тестових і виробничих серверах за допомогою tail -f logs/*.{log,err,out}. Початкове завантаження трохи значно (залежно від кількості файлів в усьому світі), але після цього потокове передавання відбувається в режимі реального часу.

Замість того, щоб надсилати grep, я використовую execфункціонал, screenоскільки я хочу загалом побачити весь вихід (для повних відстежень та повідомлень, пов’язаних із проблемою). Наприклад,

!:sed -n s/.*Exception.*/\007/p

Викликати сигнал (або спалах) терміналу кожного разу, коли буде знайдено слово Виняток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.