前言
- 作为站长的你是否也曾想针对站点访问日志信息,分析其中PV、UV、访问地域分布以及访问前十页面等情况。
- 作为开发者的你是否也想记录应用的日志信息,针对top方法进行优化从而提升应用质量。
- 作为运维老大的你是否也曾想过实时监控最近1个小时的服务器响应时间变化,请求客户端负载均衡到某一台机器流量否有异常情况等信息,搞一张数据大屏从而更加直观的获取关键信息
你可能需要这样的图表:
那么阿里云日志服务(Log Service)一定是一个不错的选择!我们提供了日志的一站式解决方案,包含了30多种日志源的采集(Logtail),日志服务的实时分析功能(LogSearch/Analytics),可以使用查询+SQL92语法对日志进行实时分析,并且可以在查询分析结果上支持自带Dashboard、DataV、Grafana、Tableua(通过JDBC)、QuickBI等可视化方式。以上截图中的图表就是日志服务自带的仪表盘功能。
用户名:sls_reader1@1654218965343050
密码:pnX-32m-MHH-xbm
整体结构
日志服务可视化分析流程如图所示:
主要分为3个步骤:
- 数据采集。日志服务支持客户端、网页、协议、SDK/API(移动、游戏)等多种日志采集方式,所有采集方式均基于Restful API实现,除此之外您也可以通过API/SDK实现新的采集方式,参考文档
- 设置数据索引并采用查询分析语法进行查询分析,参考文档
- 可视化展示。日志服务提供基于Restful的开放式API,我们可以选择适合的方式对我们的日志数据进行可视化处理,本文将主要阐述日志服务自带的可视化以及仪表盘(Dashboard)功能
区别
日志服务自身的Dashboard有如下特点:
- 无需事先定义:任何计算方法、任何过滤条件可以应用到任意时间段秒级出图
- 交互式分析:图表<-->原始日志无缝切换,双向打通
- 场景化支持:通过数据接入向导直接生成分析大盘,无需复杂配置
图表类型
目前,日志服务提供的可视化功能包含了如下图表类型:
接下来将分别介绍每种图形适合的场景,然后将我们的日志信息可视化出来。
1. 表格
表格作为最常见的数据展示类型,由一组或多组单元格组成,用于显示数字和其他项以便快速引用和分析,表格中的项被组织为行和列,表格的第一行称为表头,指明表格每一列的内容和意义。
在日志服务中,我们通过查询分析语法得到的结果信息默认以表格方式进行展示。比如我想查看每分钟上传字节总和情况:
* | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as minute, sum(body_bytes_sent) as sum group by minute order by minute desc limit 100000
可以得到如下表格展示,我们可以利用表头上的排序按钮对某一列进行排序
2. 折线图
折线图属于趋势类分析图表,一般用于表示一组数据在一个有序数据类别(多为连续时间间隔)上的变化情况,用于直观分析数据变化趋势
,提供的图表属性如下:
- X轴:一般为有序数据类别(时间序列)
- 左Y轴:可以配置一列或多列对应到左轴数值区间
- 右Y轴:可以配置一列或多列对应到右轴数值区间(右轴图层高于左轴)
- 为柱列:将已选择的左Y轴或者右Y轴中的一列以柱状形式表示
- 图例位置:上右下左
- 间距:坐标轴距离图表边界距离
如分析在最近15分钟内PV、UV已经平均响应时间变化
* | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as minutes, approx_distinct(remote_addr) as uv, count(1) as pv, avg(request_time) as avg group by minutes order by minutes asc limit 100000
选择minutes
作为X轴,pv
、uv
放在左Y轴,avg
为右Y轴并且设置uv为柱状,得到如下图示:
3. 柱状图
柱状图和折线图类似,但是柱状图描述的是分类数据(而不是折线图的有序数据),回答的是每一个分类中『有多少?』这个问题,提供的图表属性如下:
- X轴:一般为分类数据
- Y轴:可以配置一列或多列对应到左轴数值区间
- 图例位置:上右下左
- 间距:坐标轴距离图表边界距离
如分析最近15分钟内不同http_referer
的访问次数:
* | select http_referer, count(1) as count group by http_referer
4. 条形图
条形图即为横向柱状图,适合分析分类数据的top情况,提供的图表属性保持一致
如分析最近15分钟内访问前十的地域信息:
* | select ip_to_province(remote_addr) as address, count(1) as count group by address order by count desc limit 10
5. 饼图
饼图用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小,所有区块(圆弧)的加和等于 100%。提供的图表属性如下:
- 分类:分类数据
- 数值列:分类数据对应的数值
- 图例位置:上右下左
- 间距:坐标轴距离图表边界距离
- 饼图类型:提供饼图(默认)、环图以及南丁格尔玫瑰图
分析最近15分钟访问方法的分布占比
* | select request_method as method , count(1) as c group by method
饼图:
环图
分析最近15分钟访问页面的分布
* | select request_uri as uri , count(1) as c group by uri
南丁格尔玫瑰图:
6. 数字图
数字图作为最简单直接的数据表现形式,直观清晰地将某一个点上的数据展示出来,一般用于表示某一个时间点上的关键信息。提供的图表属性如下:
- 数值列:默认选择该列的第一行数据进行展示
- 颜色:提供字体颜色和背景颜色的colorSelect
- 文案:字号(12px-100px)、单位、单位字号(12px-100px)、数值描述以及数值描述字号(12px-100px)
如统计最近15分钟的PV:
* | select count(1) as PV
7. 面积图
面积图是在折线图的基础之上形成的,它将折线图中折线与坐标轴之间的区域使用颜色进行填充,这个填充即为我们所说的面积
,颜色的填充可以更好的突出趋势信息,提供的图表属性如下:
- X轴:一般为有序数据类别(时间序列)
- Y轴:可以配置一列或多列对应到左轴数值区间
- 图例位置:上右下左
- 间距:坐标轴距离图表边界距离
如统计最近15分钟的平均请求时间变化趋势:
* | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as minute, avg(request_time) as request_time group by minute order by minute
8. 地图
以地图作为背景,通过图形颜色、图像标记的方式展示地理数据信息。日志服务提供了三种地图方式,分别为:中国地图、世界地图以及高德地图(高德地图分为点图和热力图)提供的图表属性如下:
- 位置信息:省份(中国地图)或国家(世界地图)或经纬度(高德地图)
- 数值列:位置信息对应的数据量
日志服务提供了ip地理函数用于地图的绘制,详细参考文档
通过remote_addr
来绘制三种地图,统计前十的访问区域
中国地图:
* | select ip_to_province(remote_addr) as address, count(1) as count group by address order by count desc limit 10
世界地图:
* | select ip_to_country(remote_addr) as address, count(1) as count group by address order by count desc limit 10
高德地图:
* | select ip_to_geo(remote_addr) as address, count(1) as count group by address order by count desc limit 10
9. 流图
不同颜色的条带状分支代表了不同的分类信息,条状带的宽度映射了对应的数值大小。此外,原数据集中的时间属性,映射到X轴上,是一个三维关系的展现。提供的图表属性如下:
- X轴:一般为有序数据类别(时间序列)
- Y轴:配置一列数据对应到左轴数值区间
- 聚合列:需要在第三维上聚合的信息
- 图例位置:上右下左
- 间距:坐标轴距离图表边界距离
- 图表类型:提供面图(默认)、线图以及柱图(层叠)
比如我们统计最近15分钟,不同method
方法请求次数随时间变化趋势情况
* | select date_format(from_unixtime(__time__ - __time__% 60), '%H:%i:%S') as minute, count(1) as c, request_method group by minute, request_method order by minute asc limit 100000
X轴选择minute
,Y轴选择c
,按照request_method
聚合
10. 桑基图
桑基图 (Sankey Diagram),是一种特定类型的流图,用于描述一组值到另一组值的流向。适合网络流量等场景,通常包含3组值source
、target
以及value
。source
和target
描述了点的关系,而value
描述了该source
和target
之间边的关系。
数据示例如下:
source | target | value |
---|---|---|
node1 | node2 | 14 |
node1 | node3 | 12 |
node3 | node4 | 5 |
... | .. | ... |
桑基图就描述了这组数据的关系:
图表属性如下:
- 起点列:描述起始节点
- 终点列:描述终点节点
- 数值列:链接起点节点和终点节点的值
- 间距:坐标轴距离图表边界距离
这里我们举一个负载均衡的例子:
* | select sourceValue, targetValue, sum(streamValue) as streamValue from (select sourceValue, targetValue, streamValue, __time__ from log group by sourceValue, targetValue, streamValue, __time__ order by __time__ desc) group by sourceValue, targetValue
11. 词云
词云,是文本数据的视觉表示,由词汇组成类似云的彩色图形,用于展示大量文本数据。 每个词的重要性以字体大小或颜色显示,能最让用户最快速地感知某一些关键词的权重大小。提供图表属性如下:
- 词列:代表要展示的一组词的信息
- 数值列:每一个词对应的数值信息
- 字号:分为最大字号(50px-80px)和最小字号(12px-24px),合理调整字号范围以适应画布
如统计最近15分钟访问hostname的情况:
* | select hostname, count(1) as c group by hostname order by c limit 100
添加到仪表盘
所有通过查询分析语法获得的可视化图表都可以保存在一个仪表盘(Dashboard)中,再经过灵活的布局调整,就可以做出一张本文第一部分中截图的图表了。
我们可以通过新建标签 -> 仪表盘 中随时查看我们保存好的仪表盘
我们将在3月下旬推出图表和仪表盘嵌入功能,敬请期待