欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

apache日志分析简介 有大用 有大大用 有大大大用

shiping1 的头像

一.日志分析 
如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log 
1.access_log 
access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式 
例如,我的其中一台服务器配置如下 

CustomLog "| /usr/sbin/rotatelogs /var/log/apache2/%Y_%m_%d_other_vhosts_access.log 86400 480" vhost_combined 
 

-rw-r--r-- 1 root root 22310750 12-05 23:59 2010_12_05_other_vhosts_access.log 
-rw-r--r-- 1 root root 26873180 12-06 23:59 2010_12_06_other_vhosts_access.log 
-rw-r--r-- 1 root root 26810003 12-07 23:59 2010_12_07_other_vhosts_access.log 
-rw-r--r-- 1 root root 24530219 12-08 23:59 2010_12_08_other_vhosts_access.log 
-rw-r--r-- 1 root root 24536681 12-09 23:59 2010_12_09_other_vhosts_access.log 
-rw-r--r-- 1 root root 14003409 12-10 14:57 2010_12_10_other_vhosts_access.log



通过CustomLog指令,每天一天生成一个独立的日志文件,同时也写了定时器将一周前的日志文件全部清除,这样可以显得更清晰,既可以分离每一天的日志又可以清除一定时间以前的日志通过制,LogFormat定义日志的记录格式 
 

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedproxy 
LogFormat "%h %l %u %t \"%r\" %>s %b" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent


随意的tail一个access_log文件,下面是一条经典的访问记录 

218.19.140.242 - - [10/Dec/2010:09:31:17 +0800] "GET /query/trendxml/district/todayreturn/month/2009-12-14/2010-12-09/haizhu_tianhe.xml HTTP/1.1" 200 1933 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)" 

一共是有9项,将他们一一拆开 
 

218.19.140.242 
- 
- 
[10/Dec/2010:09:31:17 +0800] 
"GET /query/trendxml/district/todayreturn/month/2009-12-14/2010-12-09/haizhu_tianhe.xml HTTP/1.1" 
200 
1933 
"-" 
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)"


1)  218.19.140.242 这是一个请求到apache服务器的客户端ip,默认的情况下,第一项信息只是远程主机的ip地址,但我们如果需要apache查出主机的名字,可以将 HostnameLookups设置为on,但这种做法是不推荐使用,因为它大大的减缓了服务器.另外这里的ip地址不一定就是客户主机的ip地址,如果 客户端使用了代理服务器,那么这里的ip就是代理服务器的地址,而不是原机. 

2) - 这一项是空白,使用"-"来代替,这个位置是用于标注访问者的标示,这个信息是由identd的客户端存在,除非IdentityCheck为on,非则apache是不会去获取该部分的信息(ps:不太理解,基本上这一项都是为空,奉上原文) 
The "hyphen" in the output indicates that the requested piece of information is not available. In this case, the information that is not available is the RFC 1413 identity of the client determined by identd on the clients machine. This information is highly unreliable and should almost never be used except on tightly controlled internal networks. Apache httpd will not even attempt to determine this information unless IdentityCheck is set to On. 

3) - 这一项又是为空白,不过这项是用户记录用户HTTP的身份验证,如果某些网站要求用户进行身份验证,那么这一项就是记录用户的身份信息 

4) [10/Dec/2010:09:31:17 +0800] 第四项是记录请求的时间,格式为[day/month/year:hour:minute:second zone],最后的+0800表示服务器所处的时区为东八区 

5) "GET /..haizhu_tianhe.xml HTTP/1.1" 这一项整个记录中最有用的信息,首先,它告诉我们的服务器收到的是一个GET请求,其次,是客户端请求的资源路径,第三,客户端使用的协议时HTTP/1.1,整个格式为"%m %U%q %H",即"请求方法/访问路径/协议" 

6) 200 这是一个状态码,由服务器端发送回客户端,它告诉我们客户端的请求是否成功,或者是重定向,或者是碰到了什么样的错误,这项值为200,表示服务器已经成 功的响应了客户端的请求,一般来说,这项值以2开头的表示请求成功,以3开头的表示重定向,以4开头的标示客户端存在某些的错误,以5开头的标示服务器端 存在某些错误,详细的可以参见 HTTP specification (RFC2616 section 10).[http://www.w3.org/Protocols/rfc2616/rfc2616.txt] 

7) 1933 这项表示服务器向客户端发送了多少的字节,在日志分析统计的时侯,把这些字节加起来就可以得知服务器在某点时间内总的发送数据量是多少 

8) - 暂不知 

9) "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)" 这项主要记录客户端的浏览器信息 





2.error_log 
error_log为错误日志,记录下任何错误的处理请求,它的位置和内容由ErrorLog指令控制,通常服务器出现什么错误,首先对它进行查阅,是一个最重要的日志文件 

tail error_log,随意摘取一个记录 

[Fri Dec 10 15:03:59 2010] [error] [client 218.19.140.242] File does not exist: /home/htmlfile/tradedata/favicon.ico 

同样也是分为几个项 
 

[Fri Dec 10 15:03:59 2010] 
[error] 
[client 218.19.140.242] 
File does not exist: /home/htmlfile/tradedata/favicon.ico


1) [Fri Dec 10 15:03:59 2010] 记录错误发生的时间,注意,它跟我们上面access_log记录的时间格式是不同的 

2) [error] 这一项为错误的级别,根据LogLevel指令来控制错误的类别,上面的404是属于error级别 

3) [client 218.19.140.242] 记录客户端的ip地址 

4) File does not exist: /home/htmlfile/tradedata/favicon.ico 这一项首先对错误进行了描述,例如客户端访问一个不存在或路径错误的文件,就会给出404的提示错误 



二.实用的日志分析脚本 
了解日志的各种定义后,这里分享一下从网上淘来的一些对日志分析的脚本 

1.查看apache的进程数 
ps -aux | grep httpd | wc -l 

2.分析日志查看当天的ip连接数 
cat default-access_log | grep "10/Dec/2010" | awk '{print $2}' | sort | uniq -c | sort -nr 

// 查看 它里面 既有 aaa.com 又有 02/Feb/2018 连接数

 cat access_log | grep "aaa.com" | grep "02/Feb/2018" | awk '{print $2}' | sort | uniq -c | sort -nr


3.查看指定的ip在当天究竟访问了什么url 
cat default-access_log | grep "10/Dec/2010" | grep "218.19.140.242" | awk '{print $7}' | sort | uniq -c | sort -nr 

4.查看当天访问排行前10的url 
cat default-access_log | grep "10/Dec/2010" | awk '{print $7}' | sort | uniq -c | sort -nr | head -n 10 

5.看到指定的ip究竟干了什么 
cat default-access_log | grep 218.19.140.242 | awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less 

6.查看访问次数最多的几个分钟(找到热点) (时间段)
awk '{print $4}' default-access_log |cut -c 14-18|sort|uniq -c|sort -nr|head



已有 0 人发表留言,猛击->> 这里<<-参与讨论 


ITeye推荐 


 

相关 [apache 日志 分析] 推荐:

apache日志分析简介

- - 编程语言 - ITeye博客
如果apache的安装时采用默认的配置,那么在/logs目录下就会生成两个文件,分别是access_log和error_log. access_log为访问日志,记录所有对apache服务器进行请求的访问,它的位置和内容由CustomLog指令控制,LogFormat指令可以用来简化该日志的内容和格式. 例如,我的其中一台服务器配置如下. 通过CustomLog指令,每天一天生成一个独立的日志文件,同时也写了定时器将一周前的日志文件全部清除,这样可以显得更清晰,既可以分离每一天的日志又可以清除一定时间以前的日志通过制,LogFormat定义日志的记录格式. 随意的tail一个access_log文件,下面是一条经典的访问记录.

GC 日志分析

- - 码蜂笔记
不同的JVM及其选项会输出不同的日志. 生成下面日志使用的选项: -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:d:/GClogs/tomcat6-gc.log. 最前面的数字 4.231 和 4.445 代表虚拟机启动以来的秒数. [GC 和 [Full GC 是垃圾回收的停顿类型,而不是区分是新生代还是年老代,如果有 Full 说明发生了 Stop-The-World. 如果是调用 System.gc() 触发的,那么将显示的是 [Full GC (System). 接下来的 [DefNew,.

Windows IIS日志文件分析程序

- bababubuliku - 月光博客
  Windows Server具有事件日志记录的功能,其IIS日志文件里记录了包括下列信息:谁访问了您的站点,访问者查看了哪些内容等等. 通过定期检查这些日志文件,网站管理员可以检测到服务器或站点的哪些方面易受攻击或存在其他安全隐患.   不过,目前的日志分析工具并不是很完善,有些功能并不具备,特别是针对某个URL地址进行攻击的分析并不多,下面是一个VB Script程序,保存为VBS程序后可以在服务器上运行,用于分析和检测IIS日志里针对某个URL地址进行攻击的IP地址. targeturl = "/archives/2761.html"  '受攻击网站的URL地址.

日志分析方法概述

- jin - 搜索研发部官方博客
日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等. 日志的内容、规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志. 其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志. 在Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条典型的apache日志:. 211.87.152.44 – - [18/Mar/2005:12:21:42 +0800] “GET / HTTP/1.1″ 200 899 “http://www.baidu.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)”.

谈日志采集和分析

- - 人月神话的BLOG
本篇为杂谈,只谈一个日志采集分析工具实现过程中的关键点. 对于log文件的采集需要支持分布式的集群,从多个集群机器进行日志采集. 同时日志采集需要对日志文件进行类似流处理的增量实时采集,类似flume工具的一种实现模式. 日志采集不是目的,而基于采集后的日志实时处理,实时处理后的实时分析才是重点. 日志文件本身是一个非结构化的文本文件,但是里面又包含了可以结构化出来的信息,因此对于日志文件是最适合采用mongoDB这种数据库进行存储. 首先是对日志文件进行实施的解析和入库,在这里的难点是需要开发对于不同格式的日志文件的解析规则的适配器,如果再做的灵活一点,应该是支持所有日志文件,可以自定义相关的日志解析规则.

搜索引擎日志分析

- - CSDN博客互联网推荐文章
为了提高搜索准确度,为用户提供个性化推荐等目的,每个搜索引擎都会保存用户的搜索历史. 包括查询的query,time, ip, 操作系统和浏览器信息等等. 还有就是记录这个query用户点击查看了哪些搜索结果. 出于商业目的和用户隐私,这些search log是不公开的. 从search log中我们已经可以得到以下结论:. 用户喜欢短query,平均在3.5 words. 大部分的搜索都是由小部分人完成的,而其他大部分人都不怎么进行搜索. 一个query的查询频率是排名的指数关系Frequency(q) = K × Rank(q)^(-α),K是常数,Rank(q)是q的热度排名. 排名在前面的query的查询次数占总查询次数的大部分,而排名靠后的query的查询此时则少的可怜.

shell脚本分析nginx日志

- - 互联网 - ITeye博客
以下脚本都是基于上面日志格式的,如果你的日志格式不同需要调整awk后面的参数. 分析日志中的UserAgent. cat access_20130704.log | awk -F "\""'{print $(NF-3)}'| sort | uniq -c | sort -nr | head -20. 上面的脚本将分析出日志文件中最多的20个UserAgent. 分析日志中那些IP访问最多. 分析日志中那些Url请求访问次数最多. cat access_20130704.log | awk -F "\""'{print $(NF-5)}'| sort | uniq -c | sort -nr | head -20.

jstack Dump 日志文件分析

- - Web前端 - ITeye博客
jstack Dump 日志文件中的线程状态. dump 文件里,值得关注的线程状态有:. Deadlock(重点关注) . 执行中,Runnable   . Waiting on condition(重点关注) . Waiting on monitor entry(重点关注). 暂停,Suspended. 对象等待中,Object.wait() 或 TIMED_WAITING. Blocked(重点关注)  . 下面我们先从第一个例子开始分析,然后再列出不同线程状态的含义以及注意事项,最后再补充两个实例. Waiting to lock 和 Blocked. 2)“ waiting to lock <0x00000000acf4d0c0>”指,线程在等待给这个 0x00000000acf4d0c0 地址上锁(英文可描述为:trying to obtain  0x00000000acf4d0c0 lock).

日志分析方法概述

- - CSDN博客云计算推荐文章
最近几年日志分析这方面的人才需求越来越多,主要伴随数据挖掘的快速发展而迅速增长的. 碰巧又在工作中又接触到一些日志记录方面的工作,就顺便了解一下日志系统的整个流程. 下面这篇文章转自百度同学的一篇文章,针对大规模日志分析,联系到hadoop,hive的解决方案,阐述的比较全面. 另外就是阿里已经开发出类似的系统odps—通过sql语言进行数据的分析处理,详情见:http://102.alibaba.com/competition/addDiscovery/faq.htm. 日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等. 日志的内容、规模和用途也各不相同,很难一概而论.

postgresql 日志分析工具pgbadger

- - x-marker的博客
  虽然有zabbix等工具监控着pg数据库,但还是有很多信息不能监控到,所以想通过定期分析pg的日志来掌握数据库的运行状态. pgbadger是一款开源的日志分析工具,采用perl编写,项目地址为: https://github.com/dalibo/pgbadger ,下面就使用简要记录下. 直接git clone或者下载zip包并上传到pg数据库服务器,然后解压:. 由于我要分析的pg格式是csv格式的日志文件,因此需要安装csv_xs模块:. 安装Text::CSV_XS模块.                              queries and connections.

来自 http://itindex.net/detail/48250-apache-%E6%97%A5%E5%BF%97-%E5%88%86%E6%9E%90

普通分类: