前言
作为站长的你是否也曾想针对站点访问日志信息, 分析其中 PVUV 访问地域分布以及访问前十页面等情况
作为开发者的你是否也想记录应用的日志信息, 针对 top 方法进行优化从而提升应用质量
作为运维老大的你是否也曾想过实时监控最近 1 个小时的服务器响应时间变化, 请求客户端负载均衡到某一台机器流量否有异常情况等信息, 搞一张数据大屏从而更加直观的获取关键信息
你可能需要这样的图表:
那么阿里云日志服务 (Log Service) 一定是一个不错的选择! 我们提供了日志的一站式解决方案, 包含了 30 多种日志源的采集(Logtail), 日志服务的实时分析功能(LogSearch/Analytics), 可以使用查询 + SQL92 语法对日志进行实时分析, 并且可以在查询分析结果上支持自带 DashboardDataVGrafanaTableua(通过 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 分钟内 PVUV 已经平均响应时间变化
* | 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 轴, pvuv 放在左 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 组值 sourcetarget 以及 valuesource 和 target 描述了点的关系, 而 value 描述了该 source 和 target 之间边的关系
数据示例如下:
source | target | value |
---|---|---|
node1 | node2 | 14 |
node1 | node3 | 12 |
node3 | node4 | 5 |
... | .. | ... |
桑基图就描述了这组数据的关系:
图表属性如下:
起点列: 描述起始节点
终点列: 描述终点节点
数值列: 链接起点节点和终点节点的值
间距: 坐标轴距离图表边界距离
这里我们举一个负载均衡的例子:
* | select sourceValue, targetValue, streamValue group by sourceValue, targetValue, streamValue order by streamValue
11. 词云
词云, 是文本数据的视觉表示, 由词汇组成类似云的彩色图形, 用于展示大量文本数据 每个词的重要性以字体大小或颜色显示, 能最让用户最快速地感知某一些关键词的权重大小提供图表属性如下:
词列: 代表要展示的一组词的信息
数值列: 每一个词对应的数值信息
字号: 分为最大字号 (50px-80px) 和最小字号(12px-24px), 合理调整字号范围以适应画布
如统计最近 15 分钟访问 hostname 的情况:
* | select hostname, count(1) as c group by hostname order by c limit 100
添加到仪表盘
所有通过查询分析语法获得的可视化图表都可以保存在一个仪表盘 (Dashboard) 中, 再经过灵活的布局调整, 就可以做出一张本文第一部分中截图的图表了
我们可以通过新建标签 -> 仪表盘 中随时查看我们保存好的仪表盘
我们将在 3 月下旬推出图表和仪表盘嵌入功能, 敬请期待
来源: https://yq.aliyun.com/articles/552764