日志服务推出了数据接入向导(Wizard)功能以来,不断优化接入向导的功能,支持各种数据的采集、存储、分析、离线投递, 降低用户使用日志服务门槛。本文介绍数据接入向导一站式配置采集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.数据接入向导
- 对于已存在的Logstore,点击列表中数据接入向导图标进入。
图2.Logstore列表
步骤2 选择数据类型
日志服务提供多种数据类型接入(云产品、自建软件、API、SDK等),分析apache访问日志请选择apache访问日志。
步骤3 数据源设置
- 按照实际情况填写配置名称和日志路径,选择格式昵称,并将对应的LogFormat信息填写到APACHE日志格式中。
图3.配置数据源
日志服务会自动提取出相应的键名称。
注:在某些配置字段最终打印出来的日志信息内会存在空格,所以请用"来进行分隔,具体如:"%t", "%{Referer}i", "%{User-Agent}i"等。
图4.APACHE键
注意:其中%r会被提取称request_method
、request_uri
和request_protocol
三个键
- 应用到机器组,如果您之前没有创建过机器组,请先根据页面提示创建机器组。
步骤4 查询分析和可视化
确保日志机器组心跳正常的情况下,可以点击右侧浏览按钮获取到采集上来的数据。
图5.预览
日志服务提供预设的数据键名称以便分析使用,可以选择实际数据键名称(根据预览数据生成)和默认数据键名称形成映射关系。点击展开可查看键值索引属性。
图6.键值索引属性
点击下一步,日志服务会为您设置好索引属性并创建apache-dashboard
仪表盘以供分析使用。
步骤5 分析访问日志
开启索引后,默认生成apache仪表盘页面,可以快速看到日志服务为你提供的各个指标的分析情况,如图所示。
图7.仪表盘
- PV/UV统计(pv_uv)
统计最近的PV数和UV数。
图8.访问PV/UV统计
统计语句
* | 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.访问前十地址
统计语句
* | 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.请求方法占比
统计语句
* | select request_method,
count(1) as pv
group by request_method
- 请求状态占比(http_status_percentage)
统计最近一天各种http状态码的占比。
图11.请求状态占比
统计语句
status>0 | select status,
count(1) as pv
group by status
- 访问地域分析(ip_distribution)
统计访问ip来源情况。
图12.访问地域分析
统计语句
* | select ip_to_province(remote_addr) as address,
count(1) as c
group by address limit 100
- 请求UA占比(http_user_agent_percentage)
统计最近一天各种浏览器的占比。
图13.请求UA占比
统计语句
* | 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.出入流量统计
统计语句
* | 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.前十访问来源
统计语句
* | select http_referer,
count(1) as pv
group by http_referer
order by pv desc limit 10
- 请求时间前十地址(top_10_latency_request_uri)
统计最近一天请求延时前十的地址。
图16.请求时间前十地址
统计语句
* | 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
扩展阅读
结语
特别感谢Tinsson戴挺远对Apache数据接入向导的开发贡献!如果您对我们的产品有什么意见和建议,欢迎加入钉钉群和我们交流!