场景
用户使用ECS搭建网站,网站的访问日志(Nginx,Apache访问日志)收集到阿里云日志服务中供查询。为了从访问日志中挖掘出更多价值,日志服务提供了一个docker镜像,用于实时统计和展示网站访问的一系列指标,例如PV,UV,延时,地理,状态码,爬虫,网络流量等指标。
指标
PV
分别以5分钟、1小时、1天为统计周期,统计每个周期内的日志总数。
UV
分别以1小时、1天为统计周期,统计每个周期内的IP总数。
页面
以天为统计周期,统计访问最多的页面路径,以及访问最多的参数。例如请求/fonts/fontawesome-webfont.woff?v=4.2.0,提取出页面/fonts/fontawesome-webfont.woff 和参数v = 4.2.0
方法
方法指的是HTTP方法,包括GET,POST,DELETE,PUT等。以小时和天为统计周期,统计每个周期内每个方法的日志条数。
地理
统计每个IP所属的省份,展示所选时间段内每个省份的分布图。
状态码
状态码指的是HTTP状态码,包括200,401,403,500等常见状态码。以小时和天为统计周期,统计每个周期内的状态码次数。
浏览器
浏览器分为多个子指标,分别统计每一个子指标出现的次数。包括
-
终端类型
- 移动终端
- 非移动终端
-
浏览器类型
- chrome
- safari
- IE
- firefox
-
操作系统
- mac
- window
- linux
-
浏览器内核
- webkit
- gecko
爬虫
统计常见的爬虫访问量,常见爬虫包括百度、Google、360、今日头条。
来源页
根据referer统计的来源域名,统计来源最高的20个域名。
延时
- 统计每5分钟内的网络请求的延时的平均值和最大值。
- 统计每天分布最多的延时的分布情况。出现次数较少的延时区间不会加入统计,比如一天内只有一次延时为8s,大部分的延时都在0.3s 到 0.5s之间,那么只会统计0.3->0.4, 0.4->0.5的延时分布。
流量
以小时为单位,根据request_length字段和response_length字段,统计访问的入网流量和出网流量的大小。
使用视频
必要条件
- Nginx/Apache访问日志必须接入到阿里云日志服务
- 开通日志服务
- 开通容器服务(或自己安装docker镜像)
- 有阿里云AccessKey可以访问日志服务(可以是子帐号)
帐号权限
如果您使用子帐号授权,请参考下边的权限配置,将${your_project}替换成你的Project名称,${your_logstore}替换成您的访问日志所在的Logstore。
{
"Version": "1",
"Statement": [
{
"Action": [
"log:Get*",
"log:List*"
],
"Resource": "acs:log:*:*:project/${your_project}/logstore/${your_logstore}",
"Effect": "Allow"
},
{
"Action": [
"log:CreateConsumerGroup",
"log:ListConsumerGroup",
"log:ConsumerGroupUpdateCheckPoint",
"log:ConsumerGroupHeartBeat",
"log:GetConsumerGroupCheckPoint"
],
"Resource": "acs:log:*:*:project/${your_project}/logstore/${your_logstore}/consumergroup/*",
"Effect": "Allow"
}
]
}
非必要条件
- 自建mysql或者RDS(默认使用docker镜像内的mysql)
实施步骤
实施步骤以ubuntu系统为例,其他系统请以本文档做参考
通过容器服务:
- 访问日志接入到阿里云日志服务,具体接入方法请参考阿里云日志服务文档。
- 开通容器服务。
- 在容器服务中创建集群,操作系统选择ubuntu。
-
在容器服务中创建应用。
- 应用名称输入dashboard(或自定义)。
- 部署集群选择刚刚创建的集群。
- 点击“使用镜像创建”。
- 点击选择镜像,选择阿里云镜像,搜索dashboard。选中出现的aliyunlog/dashboard镜像。
- 在【web路由规则】中,容器端口输入80,域名输入dashboard,点击“添加”。
- 点击确定。
- 在【服务】中,找到刚刚创建的服务(dashboard,或自定义服务名称),点击服务名称,在出现的基本信息中找到访问端点,例如访问端点。
通过ECS安装镜像:
docker pull registry.aliyuncs.com/aliyunlog/access_log_stat_dashboard
docker run --dns 223.5.5.5 -p 80:80 -d registry.aliyuncs.com/aliyunlog/access_log_stat_dashboardaccess_log_stat_dashboard
- 在浏览器中打开上述URL,开始使用。
- 首次打开dashboard,需要使用日志服务的帐号信息登录,包括包括region,project ,AccessId, AccessKey。
-
登录完成后,首次使用dashboard要求配置:
- 日志信息。包括region,project ,AccessId, AccessKey,LogStore。比登录信息多了一个LogStore。
- 日志内容字段映射,docker镜像为使用一些默认的名称来描述访问日志的一些字段,如果您在接入日志服务时使用不同的字段名称,请在这里做字段映射,保证您的字段的含义能够被分析程序识别。例如latency字段,假如您接入日志服务时配置该字段的名称为request_time,那么需要在这里填写request_time。一段日志样例:
192.168.1.101 - - [17/Mar/2016:10:28:30 +0800] "GET /fonts/fontawesome-webfont.woff?v=4.2.0 HTTP/1.1" 0.021 1207 304 0 "https://sls.console.aliyun.com/css/lib.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
后台处理key | 字段样例 |
---|---|
ip | 192.168.1.101 |
method | GET |
path | /fonts/fontawesome-webfont.woff?v=4.2.0 |
latency | 0.021 |
request_length | 1207 |
status | 304 |
response_length | 0 |
referer | https://sls.console.aliyun.com/css/lib.css |
user_agent | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 |
高级选项
镜像计算结果的数据保存在镜像的mysql中,如果您释放您的容器,那么历史计算结果会丢失,为了保证所有的历史结果,请您使用自己的mysql:
-
创建一个mysql用户,允许这个用户从docker中访问这个mysql
grant all privileges on *.* to loguser@'%' identified by '123456789'; flush privileges;
- 上述用户名和密码根据自己的需求自定义
- 修改/etc/mysql/my.conf ,注释掉bind-address 0.0.0.0这一行
-
重启mysql
sudo service mysql restart
- 点击dashboard页面上方的『计算结果临时保存在docker容器中,若需永久保存,请更改数据库』,进入配置mysql。填写mysql的地址和账户信息,点击【迁移】。