#bash #apache #shell #pipe
#bash #apache #оболочка #канал
Вопрос:
У меня есть этот формат журнала для моего сервера Apache
LogFormat "%h %l %u %t "%r" status:%>s %O "%{Referer}i" "%{User-Agent}i" %v %h %D %A %>s %T" combined
Я пытаюсь отфильтровать эти журналы на основе значения %T
, превышающего 3, чтобы я мог отправлять их в Loggly. У меня есть огромный объем журналов для управления, и я не могу отправить их все напрямую в Loggly, поскольку это перебор для плана, в котором я участвую.
В итоге я написал эту CustomLog
директиву в своем VirtualHost
CustomLog "|/bin/bash -c '{ read ENTRY <amp;0; if [ ${ENTRY##* } -gt 3 ]; then echo $ENTRY | sed -r 's/status:(d*)//' >> /var/log/apache2/slow.log; fi; }'" combined
Это добавляет правильные записи журнала в slow.log
файл, но также выдает сообщение об ошибке
AH00106: piped log program '/bin/bash -c '{ read ENTRY <amp;0; if [ ${ENTRY##* } -gt 3 ]; then echo $ENTRY | sed -r \'s/status:(\d*)//\' >> /var/log/apache2/slow.log; fi; }'' failed unexpectedly
Это вывод, slow.log
если это поможет
XXX.YYY.ZZZ.WWW - - [06/Oct/2016:10:06:08 0000] "GET / HTTP/1.1" 200 4575 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0" YYY.ZZZ.WWW.XXX ZZZ.WWW.XXX.YYY 4032879 ZZZ.WWW.XXX.YYY 200 4
Примечание, которое я должен был использовать status:%>s
для фильтрации других журналов. Я также пробовал без sed
, но ошибка сохраняется.