以apache为例
访问日志记录过程
apache日志大致分为两类:访问日志和错误日志
访问日志记录的过程:
-
客户端向web服务器发送请求,请求中包含客户端的IP、浏览器类型(User-Agent)、请示的URL等信息
-
web服务器向客户端返回请示的页面
-
web服务器同时将访问信息和状态信息记录到日志文件中
Apache的访问日志目录在其配置文件中已经定义好了,CentOS中apache的配置文件位置为/etc/httpd/conf/httpd.conf
,默认的访问日志存放在/var/log/httpd/access_log
中
访问日志格式分析
apache中访问日志功能由mod_log_config模块提供,以默认的CLF来记录访问日志,如LogFormat "%h%l%u%t %r"
127.0.0.1 - - [13/Apr/2022:23:34:30 +0800] "GET /images/apache_pb.gif HTTP/1.1" 200 4897 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
域 | 内容 | 含义 |
---|---|---|
127.0.0.1 | 远程主机IP地址,%h | |
- | 占位符,%l | |
- | 占位符,%u | |
13/Apr/2022:23:34:30 | 服务器完成请示处理时间,日/月/年:小时:分:秒:时间,%t | |
+0800 | 时区 | |
GET | 请示方法(GET,POST),%r\ | |
/images/apache_pb.gif | 请示的资源URL | |
HTTP/1.1 | 协议 | |
200 | 返回状态,%s | |
1961 | 发送给客户端的总字节数,%b | |
- | 此页面的链接地址(Referer),%{Referer}i\ | |
Mozilla/5.0 ... | 客户端使用的浏览器信息,%{User-Agent}i\ |
cat access_log | awk '{print }'
awk '{print $1}' - 每行按空格或TAB分割,输出文本中的第1项,因为在access_log中的IP是第一项,所以这里用$1表示
对IP排序cat access_log | awk '{print }' | sort
打印每一重复行出现的次数
cat access_log | awk '{print }' | sort | uniq -c
uniq用于检查及删除文本中重复出现的行列,一般与sort结合使用
-c - 在每列旁边显示该行重复出现的次数
排序并统计行数
cat access_log | awk '{print }' | sort | uniq -c | sort -rn | wc -l
sort 用于对文本文件内容进行排序,默认以ASCII码的次序排列
-r 以相反的顺序来排序
-n 依照数值的大小排序
wc用于打印文件的文本行数、单词数、字节数等
-l 打印指定文件的文本行数
显示访问前10位的IP地址cat access_log | awk '{print }' | sort | uniq -c | sort -rn | heade -10
显示指定时间以后的日志
cat access_log | awk '$4>="[10/Apr/2022:01:00:01]"' access_log
找出访问量最大的IP,并封掉
cat access_log | awk '{print }' | sort | uniq -c | sort -rn | more
iptables -I INPUT -s 192.168.1.10 -j DROP
iptables -I INPUT -s 192.168.1.0/24 -j DROP
找出下载最多的文件
cat access_log | awk '( ~/.exe/){print "" "" "" }' | sort -n | uniq -c | sort -nr | head -10
或找出文件大于10MB的文件:
cat access_log | awk '($10 > 10000000 && $7 ~/.exe){print $7}' | sort -n | uniq -c | sort -nr | head -10
简单统计流量
cat access_log | awk '{sum+=}'
统计401访问拒绝的数量
cat access_log | awk '(/401/)' | wc -l
查看某一时间内的IP连接情况
grep "2022:04" access_log | awk '{print }' | sort | uniq -c | sort -nr
Apache错误日志分析
默认的错误日志位置/var/log/httpd/error_log
错误日志记录了服务器运行期间遇到的各种故障,以及一些普通的诊断信息,如服务器启动/关闭的时间
日志文件记录信息级别的高低,控制日志文件记录信息的数量和类型,这是通过LogLevel
指令实现的,该指令默认设置的级别是error
级别越高,记录的信息越多,日志量越大
紧急程序 | 等级 | 说明 |
---|---|---|
0 | emerg | 出现紧急情况使得该系统不可用,如系统宕机 |
1 | alert | 需要立即引起注意的情况 |
2 | crit | 关键错误,危险情况的警告,由于配置不当所致 |
3 | error | 一般错误 |
4 | warn | 警告信息,不算是错误信息,主要记录服务器出现的某种信息 |
5 | notice | 需要引起注意的情况 |
6 | info | 值得报告的一般消息,如服务器重启 |
7 | debug | 由运行于debug模式的程序所产生的消息 |
最常见的错误日志文件有两类:
-
文档错误
文档错误和服务器应答中的400系列代码对应,最常见的是404错误
-
CGI错误
CGI程序输出到STDERR(Standard Error,标准错误设备)的所有内容都将直接进入错误日志
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)