日志服务-一站式配置采集Apache访问日志

日志服务推出了数据接入向导(Wizard)功能以来,不断优化接入向导的功能,支持各种数据的采集、存储、分析、离线投递, 降低用户使用日志服务门槛。本文介绍数据接入向导一站式配置采集Apache日志与设置索引,同时还可以通过默认仪表盘与查询分析语句实时分析网站访问情况。
日志服务-一站式配置采集Apache访问日志

一、Apache日志配置文件

首先我们来分析Apache访问日志的配置文件,寻找到配置所需要的字段。

1、配置文件路径:

在Linux系统下配置文件路径为: /etc/httpd/conf/httpd.conf
在Windows下为apache安装目录下的conf文件, 如:D:\Apache\Software\Apache2.2\conf\httpd.conf

2、日志配置说明:

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    ...
    CustomLog "logs/access_log" combined

先查看LogFormat的配置,这个命令用于定义访问日志的纪录格式,格式为: LogFormat "记录格式说明串" 格式昵称。
(如果要使用%I和%O字段,需要开启mod_logio模块。)

查看Customlog的配置,这个命令用来配置日志记录的存放地址和打印格式,格式为:CustomLog 访问日志文件名 格式昵称。

以上配置为例,日志文件存放的路径为"logs/access_log",纪录格式昵称是combined, 参考LogFormat里combined的配置。

3、作用:用户复制配置内容到相关配置,对生成的日志可以精准匹配到需要的字段。

二、Apache日志格式及字段提取

apache日志配置文件中默认定义里两种打印格式,分别为common通用日志和combined组合日志

common通用日志格式

common记录格式说明串:

LogFormat "%h %l %u %t \"%r\" %>s %b" common

common格式打印示例:

42.120.75.148 - - [06/Aug/2018:09:37:21 +0800] "GET /list HTTP/1.1" 200 274

common日志正则:

([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)\s((?:[^"]|\")+)\s((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s

提取字段:

remote_addr、remote_ident、remote_user、time_local、request_method、request_uri、request_protocol、status、response_size_bytes

combined组合日志格式

combined记录格式说明串:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

combined格式打印示例:

42.120.75.148 - - [06/Aug/2018:09:37:21 +0800] "GET /list HTTP/1.1" 200 274 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"

combined日志正则:

([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)\s((?:[^"]|\")+)\s((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s"((?:[^"]|\")+)"\s"((?:[^"]|\")+)"

提取字段:

remote_addr、remote_ident、remote_user、time_local、request_method、request_uri、request_protocol、status、response_size_bytes、http_referer、http_user_agent

自定义格式

用户也可以选择自定义配置自己的打印格式,这里定义格式昵称为customized,实际操作中格式昵称可自定义命名。

参考配置如下:

    LogFormat "%f %H %k %m %p %q %R %T %U %I %O" customized
    ...
    CustomLog "logs/access_log" customized

格式打印示例:

/var/www/html/name1.php HTTP/1.1 2 GET 80 ?query=1 application/x-httpd-php 0 /name1.php 438 243

customized日志正则:

((?:[^"]|\")+)\s((?:[^"]|\")+)\s(\d+|-)\s(\w+)\s(\d+)\s((?:[^"]|\")+)?\s((?:[^"]|\")+)\s(\d+)\s((?:[^"]|\")+)\s(\d+)\s(\d+)

提取字段:

filename、request_protocol、keep_alive、request_method、remote_port、request_query、response_handler、request_time_sec、request_uri_supple、bytes_received、bytes_sent

三、Apache访问日志推荐配置及配置步骤

应用场景

  个人站长选用apache作为服务器搭建网站,需要通过分析apache访问日志来获取PV、UV、IP区域分布、流量流入流出、错误请求等,以评估网站访问情况。

日志格式

为了更好得满足分析场景,推荐使用以下自定义配置:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %f %k %p %q %R %T %I %O" customized

各个字段含义如下:

序号 字段 字段名 备注
1 %h remote_addr 客户端地址
2 %l remote_ident 客户端日志名称(来自identd)
3 %u remote_user 客户端用户名字
4 %t time_local 服务器时间
5 %r request 请求内容,包括方法名、地址和http协议
6 %>s status 返回的http状态码
7 %b response_size_bytes 返回的大小
8 %{Rererer}i http_referer 来源页
9 %{User-Agent}i http_user_agent 客户端信息
10 %D request_time_msec 请求时间,毫秒为单位
11 %f filename 请求的文件名(带路径)
12 %k keep_alive keep-alive请求数
13 %p remote_port 服务器端口号
14 %q request_query 查询字符串,如果不存在为空字符串
15 %R response_handler 服务器响应的处理程序
16 %T request_time_sec 请求时间,秒为单位
17 %I bytes_received 服务器接收得字节数,需要启用mod_logio模块
18 %O bytes_sent 服务器发送得字节数,需要启用mod_logio模块

配置步骤

步骤1 数据接入向导

apache访问日志采集到日志服务可以采用如下两种方式进入数据接入向导。

  • 新建项目,在项目创建后,根据页面提示点击数据接入向导。
    图1.数据接入向导

日志服务-一站式配置采集Apache访问日志

  • 对于已存在的Logstore,点击列表中数据接入向导图标进入。
    图2.Logstore列表

日志服务-一站式配置采集Apache访问日志

步骤2 选择数据类型

日志服务提供多种数据类型接入(云产品、自建软件、API、SDK等),分析apache访问日志请选择apache访问日志。

步骤3 数据源设置

  1. 按照实际情况填写配置名称和日志路径,选择格式昵称,并将对应的LogFormat信息填写到APACHE日志格式中。
    图3.配置数据源

日志服务-一站式配置采集Apache访问日志

日志服务会自动提取出相应的键名称。

注:在某些配置字段最终打印出来的日志信息内会存在空格,所以请用"来进行分隔,具体如:"%t", "%{Referer}i", "%{User-Agent}i"等。

图4.APACHE键

日志服务-一站式配置采集Apache访问日志

注意:其中%r会被提取称request_methodrequest_urirequest_protocol三个键

  1. 应用到机器组,如果您之前没有创建过机器组,请先根据页面提示创建机器组。

步骤4 查询分析和可视化

确保日志机器组心跳正常的情况下,可以点击右侧浏览按钮获取到采集上来的数据。

图5.预览
日志服务-一站式配置采集Apache访问日志

日志服务提供预设的数据键名称以便分析使用,可以选择实际数据键名称(根据预览数据生成)和默认数据键名称形成映射关系。点击展开可查看键值索引属性。

图6.键值索引属性
日志服务-一站式配置采集Apache访问日志

点击下一步,日志服务会为您设置好索引属性并创建apache-dashboard仪表盘以供分析使用。

步骤5 分析访问日志

开启索引后,默认生成apache仪表盘页面,可以快速看到日志服务为你提供的各个指标的分析情况,如图所示。

图7.仪表盘
日志服务-一站式配置采集Apache访问日志

  • PV/UV统计(pv_uv)

    统计最近的PV数和UV数。


图8.访问PV/UV统计
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select date_format(date_trunc('hour', __time__), '%m-%d %H:%i')  as time,
            count(1) as pv,
            approx_distinct(remote_addr) as uv
            group by time
            order by time
            limit 1000
  • 访问前十地址(top_page)

    统计最近一天访问pv前十的地址。


图9.访问前十地址
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select split_part(request_uri,'?',1) as path, 
            count(1) as pv  
            group by path
            order by pv desc limit 10
  • 请求方法占比(http_method_percentage)

    统计最近一天各种请求方法的占比。


图10.请求方法占比
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select request_method,
            count(1) as pv 
            group by request_method
  • 请求状态占比(http_status_percentage)

    统计最近一天各种http状态码的占比。


图11.请求状态占比
日志服务-一站式配置采集Apache访问日志

统计语句

    status>0 | select status,
                count(1) as pv 
                group by status
  • 访问地域分析(ip_distribution)

    统计访问ip来源情况。


图12.访问地域分析
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select ip_to_province(remote_addr) as address,
            count(1) as c
            group by address limit 100
  • 请求UA占比(http_user_agent_percentage)

    统计最近一天各种浏览器的占比。


图13.请求UA占比
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select  case when http_user_agent like '%Chrome%' then 'Chrome' 
            when http_user_agent like '%Firefox%' then 'Firefox' 
            when http_user_agent like '%Safari%' then 'Safari'
            else 'unKnown' end as http_user_agent,count(1) as pv
            group by  http_user_agent
            order by pv desc
            limit 10
  • 出入流量统计(net_in_net_out)

    统计流量的流入和流出情况。


图14.出入流量统计
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time, 
            sum(bytes_sent) as net_out, 
            sum(bytes_received) as net_in 
            group by time 
            order by time 
            limit 10000
  • 前十访问来源(top_10_referer)

    统计最近一天访问前十的来源信息。


图15.前十访问来源
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select  http_referer,
            count(1) as pv
            group by http_referer
            order by pv desc limit 10
  • 请求时间前十地址(top_10_latency_request_uri)

    统计最近一天请求延时前十的地址。


图16.请求时间前十地址
日志服务-一站式配置采集Apache访问日志

统计语句

    * | select split_part(request_uri,'?',1) as path, 
            request_time_sec as time 
            group by split_part(request_uri,'?',1) 
            order by time desc limit 10

扩展阅读

日志服务-15分钟搞定NGINX访问日志分析

结语

特别感谢Tinsson戴挺远对Apache数据接入向导的开发贡献!如果您对我们的产品有什么意见和建议,欢迎加入钉钉群和我们交流!


日志服务-一站式配置采集Apache访问日志
上一篇:日志服务新版控制台使用指南


下一篇:日志分析图表:同比环比场景和TreeMap