开发者社区> 问答> 正文

怎样查看ECS Linux 系统 Apache 服务日志


Apache 服务的日志文件,默认情况下主要有两种


  • /var/log/httpd/access_log 记录用户访问网站的记录信息

  • /var/log/httpd/error_log 记录用户错误请求的信息,包括 Web 服务启动或运行过程中的问题,比如网页找不到、文件权限设置不正确等。  

以下我们就介绍下 Apache 服务日志的分析和优化:


Apache 服务日志的分析


Apache 的访问日志默认存放在 Apache 安装目录的 logs 目录下,名称为 access.log,具体位置可以在 httpd.conf 或 Apache 安装目录下的 conf/vhosts/ 目录中的站点配置文件**.conf 中进行指定
例如日志格式为 : 123.118.235.44 - - [21/Jan/2015:20:23:53 +0800] "GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2524
各字段说明
       项目      样例
       客户端 IP     123.118.235.44
       由客户端 identd 进程判断的 RFC1413 身份(identity)    -
       注意:输出中的符号 "-" 表示此处的信息无效。除非在严格 控制的内部网络中,此信息通常很不可靠,不应该被使用。只有在将 IdentityCheck 指令设为 On 时,Apache 才会试图得到这项信息。
       记录用户HTTP的身份验证    -
       服务器完成请求处理时的时间    [21/Jan/2015:20:23:53 +0800]格式:[日/月/年:时:分:秒 时区]  
       请求方式,请求资源,协议   GET /info.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1
       协议状态码     200
       服务器向客户端发送的字节数   2524
以下列举一些命令便于快速分析日志:
1、获得访问前 10 位的 IP 地址 cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10

2、访问次数最多的文件或页面,取前 10 cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'

3、统计此日志文件中所有的流量 cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024 "G"}'

4、列出输出大于 200000byte (约200kb) 的 exe 文件以及对应文件发生次数 cat access.log |awk '($10 > 200000 && $7~/\.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
5、如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面 cat access.log |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -20

6、列出最最耗时的页面(超过 60 秒的)的以及对应页面发生次数 cat access.log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -20

7.列出传输时间超过 30 秒的文件 cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20

8、统计 404 的连接 awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort |uniq -c
结果太多就看一下前 10 awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort |uniq -c |sort -nr | head -10

9、统计 HTTP Status cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn

10、蜘蛛分析查看是哪些蜘蛛来访问过。 cat access.log |awk '{print $12}' | grep -iE 'bot|crawler|slurp|spider' |sort |uniq -c

查看正在来访的蜘蛛 /usr/sbin/tcpdump -i eth1 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -iE 'bot|crawler|slurp|spider'

Apache 服务日志的优化


在网站逐渐成规模后,Apache 访问日志的记录量(文件大小)会达到数 GB 大小。
ECS服务器的磁盘盘容量有限(根据购买大小而定),如果不进行优化,Apache 的访问日志文件在网站运行一段时间(几周)之后可能会占去系统盘容量的一大部分比例。
由于日志文件是纯文本文件,可以考虑通过压缩日志文件,这样备份下来的日志文件可以减小到数十或数百 MB,可以大大减小磁盘空间的浪费。
1、可以通过修改 /etc/logrotate.d/httpd 文件来实现压缩 Apache 日志的功能。
注意:以实际文件路径为准 [root@www ~]# vim /etc/logrotate.d/httpd/var/log/httpd/*log {missingoknotifemptycompresssharedscriptsdelaycompresspostrotate/sbin/service httpd reload > /dev/null 2>/dev/null || trueendscript}
注意:compress 参数就是指定 Apache 通过 gzip 压缩转储日志
2、也可以配置 Apache 日志自动分割,需要修改 Apache 的配置文件,如 httpd.conf:
注意:以实际需要配置的站点配置文件为准
默认配置为: CustomLog "/www/web_logs/domain_access_log" commonErrorLog "/www/web_logs/domain_error_log"
将其改为: ErrorLog "| /usr/sbin/rotatelogs /www/web_logs/%Y_%m_%d_domain_error_log 86400 480"CustomLog "| /usr/sbin/rotatelogs /www/web_logs/%Y_%m_%d_domain_access_log 86400 480" common
以上两行语句会使 Apache 每天生成一个 error_log 和 access_log,方便您检查日志,也便于您备份网站日志。
修改后重启 Apache 服务即可生效。
注意:rotatelogs 路径需根据用户实际情况修改,实际路径一般可通过 which rotatelogs 命令查看
rotatelogs 配置语法解释: rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
-l
使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。
logfile
它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件滚动的以秒为单位的间隔时间。
offset
相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM
指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。

如果问题还未能解决,您可以到阿里云社区进行 免费咨询,或联系云市场商家 寻求帮助

展开
收起
boxti 2017-10-23 10:09:50 2505 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载