Bash logger варанти застосування

Повсякденні завдання адміністрування Linux потребують автоматизації. Як правило, автоматизація зводиться до написання bash скриптів та їхньої «ротації по крону», або виконання вручну, залежно від завдання. У цій замітці зібрані практики логування bash скриптів, що часто зустрічаються. Цільова аудиторія – системні адміністратори linux. Найпростіший і очевидніший спосіб зберегти висновок скрипта це просто перенаправити його у файл.

Насправді потрібно додати до висновкуSTDERR, тому, як повідомлення про помилки пишуться саме в нього:

Це вважається нормальною практикою і зазвичай задовольняє більшість системних адміністраторів. Але якщо серверів кілька (десятків, сотень) і логування централізовано, зручніше використовуватиlogger. Нагадаю, щоloggerце утиліта, яка надсилає повідомлення вsyslog.

Плюси такого підходу в тому, що можна перенаправляти висновок не лише bash скриптів.

Мінуси - неможливо відокремити повідомлення про помилки від інших інформаційних повідомлень, тому що в цьому прикладі висновок зліплений в один потік і все це потрапляє вsyslogз пріоритетом user.notice(пріоритет за замовчуванням).

Для деяких завдань допустиме застосування наступного варіанта:

У цьому варіанті логується тількиSTDERR(STDOUTперенаправляється в/dev/null) з пріоритетомerror. Також повідомлення позначаються тегом під назвою скрипта. Все це може спростити пошук та усунення несправностей у роботі скриптів.

Мінусом цього підходу і те, що ми втрачаємоSTDOUT. Щоб вирішити цю проблему, можна використовувати перенаправлення потоків виведення безпосередньо всередині скрипта.

Цей приклад ілюструє як можнаперенаправитиSTDOUTіSTDERRнезалежно один від одного. На жаль, цей спосіб породжує несподівану проблему: повідомлення з різних потоків можуть потрапляти вsyslogне так, як були відправлені. Така поведінка пов'язана з тим, що потоки обробляються як два незалежні один від одного процесу. Незважаючи на це, спосіб часто застосовується для логування скриптів, що запускаютьсяcron.

Але іноді потрібно запускати вручну скрипт, і в цьому випадку не завжди зручно стежити за його роботою в syslog.

У цьому прикладіteeкопіює «вхідний» потік уloggerі назад - уSTDOUT(поведінка за умовчанням), а в другому випадку у>STDERR. Таким чином ми отримуємо логування вsyslog+ виведення на консоль під час виконання, що корисно для скриптів, що запускаються вручну.

Логи уsyslog- це просто. Логи вsyslog- це корисно, особливо якщо логування централізоване. При паралельному перенаправленні потоків виведення слід пам'ятати про можливе порушення порядку повідомлень.