主要功能
支持数值类(Double/Long)索引与查询,使用说明
- 对于日志中延时、位置和精度等数据提供多维度过滤
- 支持与文本类数据进行多维数据查询(最大30维)
通过技术大幅优化降低了成本,启用新计费模式(3月20日生效,费用下降10%-85%),与其他方案成本对比:
- 与开源搭建的日志查询方案对比:是Elastic Search(ELK)成本 20%,Hive成本 50%
- 自定义TTL时长,具备100 PB 级长时间存储能力
数值类索引与文本类查询有什么不同?让我们来看2个例子:
Case1 性能分析与问题调查
以常见日志作为例子,我们一般会通过监控系统配置当前的流量(Inflow),Status(是否500),以及平均延时(Latency)等数据。
browser:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 host:cdn-mutil-object.cn-hangzhou.oss-cdn.aliyun-inc.com in_len:777 ip:10.194.147.190 length:20193 method:GET ref_url:"https://icuntao.taobao.com/serviceorder2/my?spm=a3132.7971294.a31hl.1.a1kW9V" request_id:58D263EC3AE736792F3BC3FB requester:- response_time:13 status:200 sync_request:- time:22/Mar/2017:19:45:48 url:"/g/aliww/web.ww/scripts/webww.js?_=1490183146160 HTTP/1.0"
监控系统这类利用事先定义好(Predefined)流计算方案如果遇到一些突发性需求(例如告诉我一个网站目录,或某个特殊方法下延时)就比较被动,例如我们需要动态(Ondemand)去表达一些多维的查询与分析需求。
通过SLS的数值类+文本查询功能,可以非常容易地表达如下需求:
统计某个URL目录下,所有状态码在404 和 500之间的请求,延时大于 1秒的请求
url:"/stat/object*" and status in (404 500] and latency > 1000000
也可以指定某一个操作,查看某一个站点下是否有500错误,或计算站点卡顿率等等
method:Get and Status>500 and host="cdn-mutil-object.*"
参考结果如下:
Case2 地理位置精度查询
我们拿纽约出租车的轨迹日志,试验下如何针对万级别出租车8年的行驶记录日志进行查询与分析。该数据可以从纽约政府官网交通数据类目上找到。
出租车行驶轨迹格式:
{
VehicleID:1001, (Manually Added)
VendorID:2
lpep_pickup_datetime: 2016/1/1 0:29
Lpep_dropoff_datetime: 2016/1/1 0:39
Store_and_fwd_flag: N
RateCodeID:1
Pickup_longitude:-73.92864227
Pickup_latitude:40.68061066
Dropoff_longitude:-73.92427826
Dropoff_latitude: 40.69804382
Passenger_count:1
Trip_distance:1.46
Fare_amount:8
Extra:0.5
MTA_tax:0.5
Tip_amount:1.86
Tolls_amount:0
Ehail_fee:
improvement_surcharge: 0.3
Total_amount: 11.16
Payment_type: 1
Trip_type: 1
}
数据量与规模:
- 一条数据有21个字段,其中VehicleID 为了隐私考虑,没有进行公开,但原始数据是可以拿到的
- 一个月数据累加约有1.8 GB
- 总共数据集有8年,约1万亿条,数据量为15TB
这个量级对SLS来说是秒查,即30个维度内的条件组合查询都可以在1-2秒内完成。最重要是这些数据存储成本极为低廉,在提供随机查询情况下,存储成本只有30元/天,并且查询费用是忽略不计的。
我们对如下字段建立索引:
字段 | 含义 | 索引类型 |
---|---|---|
VehicleID | 车辆ID | Text |
Pickup_longitude | 上车-经度 | Double |
Pickup_latitude | 上车-纬度 | Double |
Dropoff_longitude | 下车-经度 | Double |
Dropoff_latitude | 下车-纬度 | Double |
Passenger_count | 乘车人数 | Long |
查询的两个需求示例:
统计某个时间段,从一个区域出发,到另外一个区域的车辆
Pickup_longitude in [-73.92864 -73.91864] and Pickup_latitude in [40.68061066 40.6815] and Dropoff_longitude in [-73.92851 -73.918635] and Dropoff_latitude in [40.670 40.6819] and Passenger_count>=2
找到特定车辆后,可以根据车辆ID检索到对应的车辆长时间轨迹记录
VehicleID:1001 and lpep_pickup_datetime>="2016/1/1 0:29" and lpep_pickup_datetime<="2016/1/1 23:29"