1. SLS介绍
日志服务SLS是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升研发、运维、运营、安全等场景的数字化能力。
2. 需求场景描述
基于阿里云OSS为源站,并结合三方CDN,可以搭建起对外提供公网的服务。将三方CDN回源阿里云OSS的监控数据存储在日志服务SLS中,需要SLS中获取三方CDN回源OSS的相关监控数据,用于业务统计分析。
相应的监控日志简化样例如下:
不同业务场景(CDN)、域名和运营商之间的对应关系示例如下:
具体需求:基于存储在SLS中的三方CDN回源阿里云OSS的监控数据,需要得到按照运营商纬度,来区分不同业务类型(CND)下回源OSS的带宽月95量级数据,用于业务统计分析。
3. SLS解决方案呈现
3.1 前置资源准备
- 已创建Linux系统ECS服务器
- 已创建用于存储不同业务场景(CDN)、域名和运营商之间对应关系的CSV格式文件
- 已创建对象存储OSS,并把CSV文件上传至OSS
- 已开通SLS服务,创建Project并在该Project下创建Logstore1和Logstore2
3.2 构造模拟日志
为验证基于SLS满足该需求的解决方案可行性,按照日志样例在阿里云Linux服务器上构造模拟日志,在root/usr/local/logs路径下创建cdn.log文件,在文件中输入JSON格式的日志数据如下。
3.3 Logtail采集日志
在SLS中创建Project,创建Logstore1用来存放采集的Linux服务器模拟日志,Logtail的采集配置如下:日志路径为usr/local/logs/cdn.log,模式为JSON模式。由于构造的模拟日志不是实时产生的,因此在模拟日志接入Logstore1后,需要vim cdn.log打开日志文件编辑并关闭一次之后,数据才会被采集到Logstore1。
Logstore1中成功采集到的模拟日志数据如下所示:
3.4 外表数据导入
由于需求是想得到按照运营商纬度,区分不同业务类型(CND)下回源OSS的带宽月95量级数据。因此需要创建一个外表用于存储业务场景(CDN)、域名和运营商之间的对应关系,并把外表数据导入到俞Logstore1相同Project下的Logstore2中,用于跨两个Logstore之间的数据联合查询分析。
首先创建CSV格式文件,用于存储业务场景(CDN)、域名和运营商三者之间的对应关系。并把CSV文件导入到Logstore2中,导入配置中的数据格式选择为CSV。
查询分析配置如下,关闭全文索引。
Logstore2中查询到的日志数据如下:
3.5 联合查询分析
通过使用估算函数approx_percentile(x, percentage),对月带宽值进行正序排列,返回大约处于95位置的数值,具体为approx_percentile(get_throughput, 0.95)。
估算函数approx_percentile结合join、group_by、oder_by子句,在Logstore1的查询框里输入如下语句:
返回如下结果:第一列为不同运营商、第二列为不同业务类型(CDN)、第三列尾运营商纬度下不同业务类型(CDN)的月带宽95量级。
在统计图表中的运营商列,检索框中输入CMM,即可得到运营商为中国移动情况下,SCDN、TCDN和PCDN三个业务类型下的月带宽95量级数据,从而可满足统计分析的需求。
4. 解决方案举一反三
若具体需求是想得到按照业务类型(CDN)纬度,区分不同运营商情况下回源OSS的带宽月95量级统计数据。则查询分析的SQL语句修改如下(仅调换字段的顺序即可)。
返回如下结果:第一列为不同业务类型(CDN)、第二列为不同运营商、第三列尾业务类型(CDN)纬度下不同运营商的月带宽95量级。
在统计图表中的业务类型列,检索框中输入SCDN,即可得到自建CDN情况下,中国移动、中国电信和中国联通三个运营商的月带宽95量级数据,从而可满足统计分析的需求。
5. 总结
阿里云SLS支持的SQL语法中的JOIN子句用于连接多个表,支持跨Logstore和MySQL、Logstore和OSS、Logstore和Logstore之间数据的联合查询,以满足不同业务分析统计场景的需求。