5分钟搭建网站实时分析:Grafana+日志服务实战

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 阿里云日志服务是针对日志类数据一站式服务,用户只需要将精力集中在分析上,过程中数据采集、对接各种存储计算、数据索引和查询等琐碎工作等都可以交给服务。2017年9月日志服务加强日志实时分析功能(LogSearch/Analytics),可以使用查询+SQL92语法对日志进行实时分析。

阿里云日志服务 是针对日志类数据一站式服务,用户只需要将精力集中在分析上,过程中数据采集、对接各种存储计算、数据索引和查询等琐碎工作 等都可以交给服务。2017年9月日志服务加强[日志实时分析功能(LogSearch/Analytics)] ,可以使用查询+SQL92语法对日志进行实时分析。


在结果分析可视化上,除了使用自带Dashboard外,还支持DataV、Grafana、Tableua、QuickBI等对接方式。本文主要通过一个例子,演示如何通过日志服务对Nginx日志进行分析与可视化。


演示:线上Demo, 配置视频

<video width="100%" height="100%"autoplay="autoplay" src="//cloud.video.taobao.com/play/u/2450842572/p/1/e/6/t/1/50039950398.mp4" controls="true">


整体架构


日志从收集到分析的架构如下图:



主要分3个步骤:


  1. 数据采集,参考文档
  2. 索引设置 与控制台查询,参考索引设置与可视化,或最佳实践中网站日志分析案例
  3. 安装Grafana插件,将实时查询SQL转化为视图


我们主要演示步骤3,在做完1、2步骤后,在查询页面可以看到原始日志:



对接Grafana


1. 安装grafana


grafana的详细安装文档参见grafana官方文档


以ubuntu为例,安装命令为:


wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.5.2_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.5.2_amd64.deb


为了使用饼状图,我们需要安装Pie chart插件,官方文档,安装命令如下:


grafana-cli plugins install grafana-piechart-panel


2. 安装日志服务插件


首先确认grafana的插件目录在哪里, ubuntu的插件地址在 /var/lib/grafana/plugins/ ,安装好插件后重启grafana-server。


执行一下命令:


cd /var/lib/grafana/plugins/
git clone https://github.com/aliyun/aliyun-log-grafana-datasource-plugin
service grafana-server restart


3. 配置日志数据源


假设是在本机部署,默认是安装在3000端口,在浏览器打开3000端口。



在左上角点击grafana的logo,在弹出窗口上选择Data Sources:



点击添加新的DataSource 使用grafana和阿里云日志服务进行日志可视化分析



各部分配置分别按照如下配置:


  • datasource名称可以自定义,类型选择[LogService] 。
  • Http Setting部分,url输入样例:http://dashboard-demo.cn-hangzhou.log.aliyuncs.com 。dashboard-demo是project名称,cn-hangzhou.log.aliyuncs.com是project所在地域的endpoint,在配置自己的数据源时,需要特别的替换成自己的project和region地址。endpoint选择内网还是外网,取决于access的配置。Access可以选择Direct,也可以选择Proxy。如果选择Direct,表示从浏览器直接发送请求,需要添加外网endpoint。如果选择proxy,则从grafana部署的机器跳转,如果grafana部署在ecs上,则可以通过内网连接。
  • Http Auth部分,采用默认配置即可。
  • log service details,日志服务详细配置,分别填写project,logstore,以及具备读取权限的accessKey,accessKey可以是主账号的accessKey,也可以是子帐号的accessKey。


配置完成后点击Add,即可完成添加dataSource。接下来添加dashboard。


4. 添加dashboard


在左上角菜单中新加一个dashboard:点击左上角菜单,依次点击Dashboards, New:



4.1 配置模板变量


在grafana中可以配置模板变量,在同一个视图中,通过选择不同的变量值,展示不同的视图,在本文中,我们配置每个时间区间的大小,以及不同域名的访问情况。



点击页面上方设置图标,然后点击Templating,



在当前页面,会显示出已经配置的模板变量,点击New, 创建新的模板



我们首先配置一个时间区间,变量的名称是我们在配置中使用的变量,在这里起名为myinterval, 在查询条件中,要写成$myinterval ,会自动替换成页面选择的模板值。



我们再配置一个域名模板,通常我们在一个vps上可以挂载多个域名,那么我们需要查看不同域名的访问情况,在模板值中,我们输入

*,www.host.com,www.host0.com,www.host1.com, 表示我们可以查看所有域名,也可以分别只查看www.host.com或者www.host0.com或者www.host1.com的访问情况。


配置完成后,可以在dashboard页面上方看到刚才配置的模板变量,通过下拉框可以选择任何一个值。例如time interval,所有可选的值如下:



配置动态的Query template,可以从查询中动态的获取结果。要使用query template,请参考下图进行配置,数据源选择日志服务的数据源,在query条件中,SQL保证只输出一列结果。



4.2 配置PV,UV


点击左侧ADD ROW,新建一行图表:



如果已经有一行row了,可以在左侧的弹出式菜单里选择Add Panel:



grafana可以支持多重类型的视图,对于PV,UV数据,在这里我们创建一个Graph视图:



点击Pannel Title,在弹出的窗口中点击Edit:



在Metrics配置中,选择datasource为logservice,输入Query,Y轴和X轴:



dataSource下拉框中选择之前配置的:logService


Query输入:


$hostname| select approx_distinct(remote_addr) as uv ,count(1) as pv ,__time__-__time__%$$myinterval  as time group by time  order by time limit 1000


上述query中的hostname,在实际展示时,会替换成用户选择的域名。myinterval,则会替换成时间区间,注意myinterval前有两个符号,而hostname有一个。


Y-Column输入:


uv,pv


X-Column输入:


time


UV  PV的值相差比较大,我们需要用两个Y轴来展示,在图标下方,点击uv左侧有颜色的线,可以选择uv是在左Y轴显示,还是在右Y轴显示:



标题需要视图,默认是Panel Title,点击General, 可以修改Title:



4.3 配置出入网带宽


同样的方法,我们添加出入网带宽的流量:



输入 query:


$hostname | select sum(body_byte_sent) as net_out, sum(request_length) as net_in  ,__time__ -__time__% $$myinterval  as time group by time limit 10000


输入Y-Column:


net_in,net_out


输入X-column:


Time


4.4 不同HTTP方法的占比


新建一个Row,视图选择Pie Chart



在配置中输入Query, 和x,y轴


Query输入:


$hostname | select count(1) as pv ,method group by method


Y-column输入:


method,pv


对于所有的饼状图,X-column输入固定值:


pie


4.5 不同HTTP状态码占比


同上,新建一个Row,视图选择Pie Chart:



Query输入:


$hostname | select count(1) as pv ,status group by status


Y-column输入:


status,pv


X-column输入:


pie


4.6 热门来源页面


同上,新建一个Row,视图选择Pie Chart:



Query输入:


$hostname | select count(1) as pv , referer  group by referer order by pv desc


Y-column输入:


referer,pv


X-column输入:


pie


4.7 延时最高页面


为了以表格形式展示url和对应的延时,我们创建时,指定Table这种视图:




Query 输入:


$hostname | select url  as top_latency_url ,request_time order by request_time  desc limit 10


Y-column输入:


top_latency_url,request_time


X-column不填写内容。


4.8 热门页面


同上,新加一个表格视图:



Query输入:


$hostname | select count(1) as pv, split_part(url,'?',1) as path  group by path order by pv desc limit 20


Y-column输入:


path,pv


X-column保留空


4.9 非200请求top页面


同上,新建一个表格视图:



Query输入:


$hostname not status:200| select count(1) as pv , url  group by url order by pv desc


Y-column输入:


url,pv


X-column保留空


4.10 前后端平均延时


新建一个Graph视图:



Query输入:


$hostname | select avg(request_time) as response_time, avg(upstream_response_time) as upstream_response_time  ,__time__ - __time__ % $$myinterval  as time group by time  limit 10000


Y-column输入:


upstream_response_time,response_time


X-column输入:


time


4.11 客户端统计


新建一个饼图:



Query输入:


$hostname | select count(1) as pv, case when  regexp_like(http_user_agent , 'okhttp') then 'okhttp' when  regexp_like(http_user_agent ,  'iPhone') then 'iPhone' when regexp_like(http_user_agent ,  'Android')  then 'Android' else 'unKnown' end as http_user_agent group by  http_user_agent order by pv desc limit 10


Y-column输入:


http_user_agent,pv


X-column输入:


pie


4.12 各省份占比统计



选择pie视图:


Query输入:


*| select ip_to_province(remote_addr) as province, count(1) as pv group by province order by pv desc  limit 10


Y-Column输入:


province,pv


X-column输入:


pie


4.13 保存和发布dashboard


点击页面上方的保存按钮,发布dashboard:



大功告成


打开dashboard首页查看效果,demo地址


在页面上方,可以选择统计的时间范围,也可以选择统计的时间粒度,或者选择不同的域名。



这样整个nginx访问统计的dashboard就完成了,我们可以从视图中挖掘有价值的信息。



更多精彩内容


十分钟构建双十一交互分析大盘


日志服务用户手册,最完整的资料


日志服分析Demo,Nginx日志、CDN日志、DDOS日志、SLB日志Demo,grafana、Datav大屏Demo


自建ELK和日志服务全方位对比


通过jdbc查询和可视化日志


10.11杭州Clouder lab 十分钟搭建共享应用 2:如何通过日志服务实现用户的日志收集与分析


10分钟精通Nginx访问日志分析统计


相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
5天前
|
SQL 存储 监控
|
5天前
|
监控 关系型数据库 MySQL
|
5天前
|
分布式计算 Hadoop Java
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱
|
5天前
|
分布式计算 监控 大数据
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
|
5天前
|
SQL 监控 安全
|
13天前
|
存储 缓存 安全
【实战指南】轻松自研嵌入式日志框架,6大功能亮点一文读懂
本文介绍了如何自研一个嵌入式日志框架,涵盖了6大功能亮点:日志分级管理、异步处理与并发安全性、详尽上下文信息记录、滚动日志归档策略、高效资源利用和便捷API接口。设计上,通过日志过滤器、共享环形缓冲区和独立的日志管理进程实现日志管理。在并发环境下,使用信号量保证线程安全。日志文件按大小滚动并有序归档,同时考虑了资源效率。对外提供简洁的API接口,便于开发人员使用。文章还简述了实现细节,包括实时存储、日志滚动和共享内存管理。测试部分验证了日志回滚和实时打印功能的正确性。
|
1月前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的日志管理与分析
【5月更文挑战第11天】MongoDB日志管理与分析至关重要,包括系统日志和操作日志,用于监控、故障排查和性能优化。合理配置日志详细程度、存储位置和保留策略,使用日志分析工具提升效率,发现性能瓶颈和安全性问题。日志分析有助于优化查询、调整配置,确保数据安全,并可与其他监控系统集成。面对日志量增长的挑战,需采用新技术如分布式存储和数据压缩来保障存储和传输。随着技术发展,不断进化日志管理与分析能力,以支持MongoDB的稳定高效运行。
【MongoDB 专栏】MongoDB 的日志管理与分析
|
1月前
|
存储 监控 关系型数据库
PHP编写的电脑监控软件:用户登录日志记录与分析
使用PHP编写简单但功能强大的电脑监控软件,记录用户登录日志并进行分析。代码示例展示了如何获取并存储用户IP地址和登录时间到数据库,然后进行登录数据的分析,如计算登录频率和常见登录时间。此外,还介绍了如何通过定时任务自动将监控数据提交到网站,以便实时监控用户活动,提升系统安全性和稳定性。
106 0
|
1月前
|
数据可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
R语言两阶段最小⼆乘法2SLS回归、工具变量法分析股息收益、股权溢价和surfaces曲面图可视化
|
1月前
|
存储 消息中间件 Java
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)

相关产品

  • 日志服务