AWS Elastic Load Balancer AWStats LogFormat

希望有人能指出我试图使用由Amazon ELB生成的访问日志的LogFormat有什么问题。

用于ServerFault可读性的多行:

%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之前被清除。 我使用以下replace:

 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} 

首先,我从端口分离主机,其次我从%time5 ISOdate中删除微秒,最后我尝试从请求中删除绝对URL。

原来,这似乎是AWStats中的%time5 LogFormat选项的一个错误。

我将YYYY-MM-DDTHH:MM:SS转换为YYYY-MM-DD HH:MM:SS并使用%time2 ,并成功parsing日志。

  • 没有点后面是1到3位数字,然后是2点,然后是2到5位数字,但是端口分隔符已经有一个空格

    sed -e“s /(。[0-9] {1,3}):([0-9] {2,5})/ \ 1 \ 2 / g”

  • 没有双点,后面跟着一个点,6位和'Z'

    sed -e“s /(:[0-9] {2})(。[0-9] {6} Z)/ \ 1 / g”

此外,你不需要pipesed的行动,只是分列行动半列s/pat11/pat12/opt1;s/pat21/pat22/opt2;other action