··#·· в соответствии с вашей конфигурацией.
··htdocs="/usr/local/etc/httpd/htdocs/"
··myhome="/usr/home/taylor/"
··cgibin="/usr/local/etc/httpd/cgi-bin/"
··sedstr="s/^/ /g;s|$htdocs|[htdocs] |;s|$myhome|[homedir] "
··sedstr=$sedstr"|;s|$cgibin|[cgi-bin] |"
··screen="(File does not exist|Invalid error redirect|premature EOF"
··screen=$screen"|Premature end of script|script not found)"
··length=5 # Количество отображаемых записей в каждой категории
··checkfor()
··{
····grep "${2}:" "$1" | awk '{print $NF}' \
······| sort | uniq −c | sort −rn | head −$length | sed "$sedstr" > $temp
····if [$(wc −l < $temp) −gt 0]; then
······echo ""
······echo "$2 errors: "
······cat $temp
····fi
··}
··trap "$(which rm) −f $temp" 0
··if ["$1" = "-l"]; then
····length=$2; shift 2
··fi
··if [$# −ne 1 −o! −r "$1"]; then
····echo "Usage: $(basename $0) [-l len] error_log" >&2
····exit 1
··fi
··echo Input file $1 has $(wc −l < "$1") entries.
··start="$(grep −E '\[.*:.*:.*\]' "$1" | head -1 \
····| awk '{print $1" "$2" "$3" "$4" "$5 }')"
··end="$(grep −E '\[.*:.*:.*\]' "$1" | tail -1 \
····| awk '{print $1" "$2" "$3" "$4" "$5 }')"
··/bin/echo −n "Entries from $start to $end"
··echo ""
··### Проверить типичные и хорошо известные ошибки:
··checkfor "$1" "File does not exist"
··checkfor "$1" "Invalid error redirection directive"
··checkfor "$1" "Premature EOF"
··checkfor "$1" "Script not found or unable to stat"
··checkfor "$1" "Premature end of script headers"
··grep −vE "$screen" "$1" | grep "\[error\]" | grep "\[client " \
····| sed 's/\[error\]/\`/' | cut −d\` −f2 | cut −d\ −f4- \
····| sort | uniq −c | sort −rn | sed 's/^/ /' | head −$length > $temp
··if [$(wc −l < $temp) −gt 0]; then
····echo ""
····echo "Additional error messages in log file: "
····cat $temp
··fi
··echo ""
··echo "And non-error messages occurring in the log file: "
··grep −vE "$screen" "$1" | grep −v "\[error\]" \
····| sort | uniq −c | sort −rn \
····| sed 's/^/ /' | head −$length
··exit 0
Этот сценарий сканирует файл журнала error_log на наличие пяти ошибок, указанных в вызовах функции checkfor, с помощью awk извлекая из каждой записи последнее поле, то есть поле с номером в переменной $NF (которая представляет количество полей в данной записи). Затем передает результат последовательности команд sort | uniq −c | sort −rn
, чтобы проще было определить источник ошибок данной категории.
Чтобы гарантировать вывод в каждой категории только соответствующих ошибок, результаты каждого поиска сохраняются во временном файле, который затем проверяется перед выводом сообщения. Все это делает функция checkfor(), находящаяся в начале сценария.
Последние несколько строк сценария находят наиболее распространенные ошибки, не относящиеся к предопределенным категориям, но являющиеся стандартными для формата журнала error_log веб-сервера Apache. Команда grep
представляет собой часть длинного конвейера.
Затем сценарий находит не обнаруженные ранее наиболее распространенные ошибки, которые не являются стандартными для формата журнала error_log веб-сервера Apache. И снова команда grep
составляет часть длинного конвейера.
Чтобы запустить этот сценарий, просто передайте ему в единственном аргументе полный путь к файлу журнала error_log в стандартном формате веб-сервера Apache, как показано в листинге 10.6. Если передать ему дополнительный аргумент −l length, он выведет указанное количество совпадений в каждой категории вместо пяти по умолчанию.
Листинг 10.6.Результаты обработки журнала error_log веб-сервера Apache с помощью weberrors
$ weberrors error_log
Input file error_log has 768 entries.
Entries from [Mon Jun 05 03:35:34 2017] to [Fri Jun 09 13:22:58 2017]
File does not exist errors:
······ 94 /var/www/vhosts/default/htdocs/mnews.htm
······ 36 /var/www/vhosts/default/htdocs/robots.txt
······ 15 /var/www/vhosts/default/htdocs/index.rdf
······ 10 /var/www/vhosts/default/htdocs/clientaccesspolicy.xml
········5 /var/www/vhosts/default/htdocs/phpMyAdmin
Script not found or unable to stat errors:
········1 /var/www/vhosts/default/cgi-binphp5
········1 /var/www/vhosts/default/cgi-binphp4
········1 /var/www/vhosts/default/cgi-binphp.cgi
········1 /var/www/vhosts/default/cgi-binphp-cgi
········1 /var/www/vhosts/default/cgi-binphp
Additional error messages in log file:
Читать дальше