Надеюсь, что кто-то сможет указать, что не так с LogFormat, который я пытаюсь использовать с журналами доступа, созданными Amazon ELB.
Многострочность для чтения ошибок сервера:
%time5 %elb %host %host_port %host_r %host_r_port %request_processing_time
%backend_processing_time %response_processing_time %code
%backend_status_code %received_bytes %bytesd %methodurl
Пример записи в журнале (после очистки):
2014-08-28T17:59:14 awseb-e-2-AWSEBLoa-AAAAAAAA 123.123.123.123 44153 10.123.123.123 80 0.000046 0.536613 0.000045 200 200 0 13129 "GET /path/to/web/app HTTP/1.1"
Перед отправкой в AWStats журналы очищаются. Использую следующие замены:
cat ${s3_logs_dir}/* \
| sed -e "s/\(\.[0-9]\{1,3\}\):\([0-9]\{2,5\}\)/\1 \2/g" \
| sed -e "s/\(:[0-9]\{2\}\)\(\.[0-9]\{6\}Z\)/\1/g" \
| sed -e "s/http:\/\/www\.example\.com:80//g" \
> ${combined_log} 2>>${log_file}
Сначала я отключаю хост от порта, затем удаляю микросекунды из даты ISO% time5 и, наконец, я попытался удалить абсолютный URL-адрес из запроса.
Доброе утро, теперь это устарело, но с расширенной веб-статистикой awstats 7.7 (сборка 20180105) и вашими правилами синтаксического анализа с этим критерием он также соответствует агенту.
В текущих журналах elb также есть тип запросов, даже не задокументированный, поэтому новый формат
LogFormat = "% other% time5% other% host% host_port% host_r% host_r_port% request_processing_time% backend_processing_time% response_processing_time% code% backend_status_code% Received_bytes% bytesd% methodurl% uaquot"
% time5 сейчас работает.
спасибо за публикацию.
С уважением Дэвид
Оказывается, это ошибка с %time5
Параметр LogFormat в AWStats.
Я преобразовал YYYY-MM-DDTHH: MM: SS в YYYY-MM-DD HH: MM: SS и использовал %time2
, и журналы были успешно проанализированы.
в образце нет точки, за которой следуют от 1 до 3 цифр, за которыми следуют 2 точки, а затем от 2 до 5 цифр, но пробел для разделителя портов уже есть
sed -e "s / (. [0-9] {1,3}): ([0-9] {2,5}) / \ 1 \ 2 / g»
нет двойной точки, за которой следует 2 цифры, за которыми следует точка, 6 цифр и 'Z'
sed -e "s / (: [0-9] {2}) (. [0-9] {6} Z) / \ 1 / g"
...
Кроме того, вам не нужно передавать действие sed, просто разделите действие полуколонкой s/pat11/pat12/opt1;s/pat21/pat22/opt2;other action