关于apache的日志配置和模板格式分析
2016-01-07 19:35
691 查看
apache上跑的日志一直没有去管。基本就是一个文件走天下,好处在于不需要再去其它地方找了,找一个文件就好了
。问题在于日志越来越大,打开查看就要好几十分钟了,要具体的查询某一个时间点的日志再去分析——这基本上属于不可能的工作。So,这个工作到了必须要处理一下的时候了。
其实这个事情已经开始几天了,但年纪大了学东西有点慢,又不愿意搞个半懂不懂。所以可能会有点慢。分上下两部分吧。
这一部分主要讲配置和模板的格式分析。
一、最简单的apache日志设置。
直接在虚拟主机设置里添加
ErrorLog "/路径/error_log"
CustomLog "/路径/access_log" common
即可针对每个虚拟主机设置单独的日志文件。
不过问题是,这还是仅仅是把单个虚拟主机的日志从总体日志里分离出来,要具体管理还是不可能。
二、对日志进行分割管理
apache提供了日志管理程序rotatelogs,主要用来把日志文件分割管理。
这个命令提供了两种分割的方法,
第一种是按时间,以秒为基准算的,86400就是一天。
第二种是以文件大小,给出的例子是5M。
正常情况下一般是采用日期对日志进行管理的。所以在虚拟主机配置中加入以下的设置
ErrorLog "| /apache安装路径/bin/rotatelogs /路径/%Y_%m_%d_error_log 86400 480"
CustomLog "| /apache安装路径/bin/rotatelogs /路径/%Y_%m_%d_access_log 86400 480" common
%Y,%m,%d这三个都很明显,分别表示的是年月日。
在86400后面的480其实是UTC的时间偏移量,毕竟我们的时区是东八区和日界线UTC时间差了八小时,如果没有写480,会按最原始的时候进行分割,这和我们要记录的时间不一样。这里的时间单位是分钟,8小时,即480分钟。
common,其实是access_log的模板名称。这个在http.conf文件里有记录。规定了access_log文件的记录格式。如:
OK,保存好配置之后,重启apche,对相对应的虚拟主机访问一下,日志文件就会产生了。
三、关于模板的解读和access_log记录的对照分析。
下面分析一下access_log和error_log两个日志的内容,毕竟日志写了如果看不懂基本等于无用功。
先access_log,没别的,这个文件有一个默认模块,识图认字比较容易。
common模板(好吧。再出现一次)
如上所示。我们对上面八个选项逐个分析,分别是:
%h,%l,%u,%t,%r(不是\"%r\",那两个\其实就是转译符,两个"是当字符出现的),%>s,%b
%h 主要显示的是访问的域名/IP,一般来说是IP地址
%l 远程登录的名字,不过是由identd提供,所以一般都是空
%u 登录用户,这个有可能不是空,但我没见过
%t 这个是访问时间
%r 这个是访问的方法+资源+协议,有点难懂吧?等下看过日志就明白了,不过看过之后更加不明白了。
%>s 内部重定向的请求,如果没加>是原来的请求,加了>是后来的请求。比如200是确认的正常返回码,404是页面无法访问
%b 已经发送的字节数(这个最好懂)
OK。进入日志具体分析
115.236.140.12 - - [07/Jan/2016:11:21:41 +0800] "GET / HTTP/1.1" 200 1933
以此条日志信息为例,得出的日志分析是
115.236.140.12 在 北京时间(+0800) 2016年1月07日,上午11:21:41 访问了站点的 / 协议为HTTP/1.1 请求状态码是200,已发送字节 1933。
这里除了登录用户名(第三项)为空之外(第二个远程登录名一般是由identd提供的邮箱,常年为空,当不存在了),其它的都好理解,相对比较麻烦的就是 访问的方法+资源+协议这项,即 "GET / HTTP/1.1" 。其实协议也好办,最难理解的是第一个方法,这整个一项也是日志最核心的东西——也就是对方到底做了什么。
分析如下的日志
第一行,其实是我对站点进行访问——自然也就访问了站点的 / ,所以这里用方法是GET,因为是访问所以发出的字节是 1933
第二行,是我在页面登录,提交了登录信息。这里很奇怪没有登录用户名,但可以看到方法已经变成了POST,访问是资源是/index.php——其实就是在index.php。由于是提交所以发出的字节是0。(之前传出的1933,应该就是index.php)
而登录完成之后的日志如下:
系统后来直接跳转访问的其它页面陆续出来,不过用的也是方法GET。
不过方法GET并不仅仅表示系统对页面的直接访问和加载,其实更直接的是对某个页面的直接访问,这个无论是系统还是其它人为。为什么这么说?因为网络还是很危险的,某位朋友对我的服务器好像采取了摸鱼式的扫描。
用的自然也是GET方法。当然,这些最后返回的全是404,网络世界真可怕。
从这几天的观察,方法值在GET居多,POST时有,还出现CONNECT和HEAD,但是还出现了一个不知道什么鬼的\x16\x03\x03\x03\x0c\x01。
现在POST和GET 方法内容基本清楚,CONNECT,HEAD还有\x16\x03\x03\x03\x0c\x01,以及还未出现的其它方法,估计要查询之后再才能得出答案。
error_log
这个文件的格式是固定的,相对简单一点
错误时间 错误类型 对方地址 具体的错误信息
前面这三个基本上一目了然,最关键的最后后的具体错误信息,一天之内找到了如下的几个
File does not exist: 这种一般是找不到文件,后面接的一般是服务器内真实的绝对路径。
script 'XXX.php' not found or unable to stat 这种和上面差不多都是找不到文件,但文件脚本本身是apache可以加载识别的
client denied by server configuration 这种错误一般和服务器的配置有关,错误都比较直接可以很快找到问题所在。但要明白的是,如果是配置过而错误,那是配置的问题;如果没有配置还出现错误,那就是被人家扫描了。
还有两个不知道什么意思:
client sent HTTP/1.1 request without hostname
Invalid URI in request \x16\x03\x01\x03\x0c\x01
这一节大概到这里吧。大概搞清了日志的分割设置方法和基本的解读。下一节分析一下模板的可选项,自己做一个模板然后是日志的备份。
。问题在于日志越来越大,打开查看就要好几十分钟了,要具体的查询某一个时间点的日志再去分析——这基本上属于不可能的工作。So,这个工作到了必须要处理一下的时候了。
其实这个事情已经开始几天了,但年纪大了学东西有点慢,又不愿意搞个半懂不懂。所以可能会有点慢。分上下两部分吧。
这一部分主要讲配置和模板的格式分析。
一、最简单的apache日志设置。
直接在虚拟主机设置里添加
ErrorLog "/路径/error_log"
CustomLog "/路径/access_log" common
即可针对每个虚拟主机设置单独的日志文件。
不过问题是,这还是仅仅是把单个虚拟主机的日志从总体日志里分离出来,要具体管理还是不可能。
二、对日志进行分割管理
apache提供了日志管理程序rotatelogs,主要用来把日志文件分割管理。
这个命令提供了两种分割的方法,
第一种是按时间,以秒为基准算的,86400就是一天。
第二种是以文件大小,给出的例子是5M。
正常情况下一般是采用日期对日志进行管理的。所以在虚拟主机配置中加入以下的设置
ErrorLog "| /apache安装路径/bin/rotatelogs /路径/%Y_%m_%d_error_log 86400 480"
CustomLog "| /apache安装路径/bin/rotatelogs /路径/%Y_%m_%d_access_log 86400 480" common
%Y,%m,%d这三个都很明显,分别表示的是年月日。
在86400后面的480其实是UTC的时间偏移量,毕竟我们的时区是东八区和日界线UTC时间差了八小时,如果没有写480,会按最原始的时候进行分割,这和我们要记录的时间不一样。这里的时间单位是分钟,8小时,即480分钟。
common,其实是access_log的模板名称。这个在http.conf文件里有记录。规定了access_log文件的记录格式。如:
OK,保存好配置之后,重启apche,对相对应的虚拟主机访问一下,日志文件就会产生了。
三、关于模板的解读和access_log记录的对照分析。
下面分析一下access_log和error_log两个日志的内容,毕竟日志写了如果看不懂基本等于无用功。
先access_log,没别的,这个文件有一个默认模块,识图认字比较容易。
common模板(好吧。再出现一次)
如上所示。我们对上面八个选项逐个分析,分别是:
%h,%l,%u,%t,%r(不是\"%r\",那两个\其实就是转译符,两个"是当字符出现的),%>s,%b
%h 主要显示的是访问的域名/IP,一般来说是IP地址
%l 远程登录的名字,不过是由identd提供,所以一般都是空
%u 登录用户,这个有可能不是空,但我没见过
%t 这个是访问时间
%r 这个是访问的方法+资源+协议,有点难懂吧?等下看过日志就明白了,不过看过之后更加不明白了。
%>s 内部重定向的请求,如果没加>是原来的请求,加了>是后来的请求。比如200是确认的正常返回码,404是页面无法访问
%b 已经发送的字节数(这个最好懂)
OK。进入日志具体分析
115.236.140.12 - - [07/Jan/2016:11:21:41 +0800] "GET / HTTP/1.1" 200 1933
以此条日志信息为例,得出的日志分析是
115.236.140.12 在 北京时间(+0800) 2016年1月07日,上午11:21:41 访问了站点的 / 协议为HTTP/1.1 请求状态码是200,已发送字节 1933。
这里除了登录用户名(第三项)为空之外(第二个远程登录名一般是由identd提供的邮箱,常年为空,当不存在了),其它的都好理解,相对比较麻烦的就是 访问的方法+资源+协议这项,即 "GET / HTTP/1.1" 。其实协议也好办,最难理解的是第一个方法,这整个一项也是日志最核心的东西——也就是对方到底做了什么。
分析如下的日志
第一行,其实是我对站点进行访问——自然也就访问了站点的 / ,所以这里用方法是GET,因为是访问所以发出的字节是 1933
第二行,是我在页面登录,提交了登录信息。这里很奇怪没有登录用户名,但可以看到方法已经变成了POST,访问是资源是/index.php——其实就是在index.php。由于是提交所以发出的字节是0。(之前传出的1933,应该就是index.php)
而登录完成之后的日志如下:
系统后来直接跳转访问的其它页面陆续出来,不过用的也是方法GET。
不过方法GET并不仅仅表示系统对页面的直接访问和加载,其实更直接的是对某个页面的直接访问,这个无论是系统还是其它人为。为什么这么说?因为网络还是很危险的,某位朋友对我的服务器好像采取了摸鱼式的扫描。
用的自然也是GET方法。当然,这些最后返回的全是404,网络世界真可怕。
从这几天的观察,方法值在GET居多,POST时有,还出现CONNECT和HEAD,但是还出现了一个不知道什么鬼的\x16\x03\x03\x03\x0c\x01。
现在POST和GET 方法内容基本清楚,CONNECT,HEAD还有\x16\x03\x03\x03\x0c\x01,以及还未出现的其它方法,估计要查询之后再才能得出答案。
error_log
这个文件的格式是固定的,相对简单一点
错误时间 错误类型 对方地址 具体的错误信息
前面这三个基本上一目了然,最关键的最后后的具体错误信息,一天之内找到了如下的几个
File does not exist: 这种一般是找不到文件,后面接的一般是服务器内真实的绝对路径。
script 'XXX.php' not found or unable to stat 这种和上面差不多都是找不到文件,但文件脚本本身是apache可以加载识别的
client denied by server configuration 这种错误一般和服务器的配置有关,错误都比较直接可以很快找到问题所在。但要明白的是,如果是配置过而错误,那是配置的问题;如果没有配置还出现错误,那就是被人家扫描了。
还有两个不知道什么意思:
client sent HTTP/1.1 request without hostname
Invalid URI in request \x16\x03\x01\x03\x0c\x01
这一节大概到这里吧。大概搞清了日志的分割设置方法和基本的解读。下一节分析一下模板的可选项,自己做一个模板然后是日志的备份。
相关文章推荐
- apache目录的访问控制
- linux服务器 Apache服务的源码安装与基本配置
- Linux 安装apache
- SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块
- Apache以及PHP的默认编码问题解决(详解)
- 安装apache遇到的问题总结
- Linux Ubuntu 下 apache 配置
- org.apache.catalina.Lifecycle
- Storm Caused by: org.apache.thrift7.transport.TTransportException
- 阿里云Linux之CentOS从0配置APACHE+MYSQL+PHP
- Apache配置压缩优化时报错——undefined symbol: inflateEnd
- Apache Thrift之java入门例子
- 使用Apache Benchmark给自己的网站进行测试
- What are the differences between Apache Kafka and RabbitMQ?
- apache poi导出Excel或Pdf文件
- Apache静态缓存配置
- wampserver部署笔记 设置apache使得外网可以访问
- apache服务器
- Apache-2.2.31编译安装
- yum 安装Apache,mysql