开发者社区> 简志> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

日志系列--计量日志处理方案

简介: 使用云服务最大好处是按量付费,无需预留资源,因此各云产品都有计量计费需求。这里我们介绍一种基于[日志服务](http://www.aliyun.com/product/sls/)计量计费方案,该方案每天处理千亿级计量日志,被众多云产品使用:
+关注继续查看

使用云服务最大好处是按量付费,无需预留资源,因此各云产品都有计量计费需求。这里我们介绍一种基于日志服务计量计费方案,该方案每天处理千亿级计量日志,被众多云产品使用:

计量日志生成计费结果过程

计量日志记录了用户涉及计费的项目,后台计费模块根据计费项和规则进行运算,产生最后账单。例如如下原始访问日志记录了项目(Project)使用情况:

microtime:1457517269818107 Method:PostLogStoreLogs Status:200 Source:10.145.6.81 ClientIP:112.124.143.241 Latency:1968 InFlow:1409 NetFlow:474 OutFlow:0 UserId:44 AliUid:1264425845278179 ProjectName:app-myapplication ProjectId:573 LogStore:perf UserAgent:ali-sls-logtail APIVersion:0.5.0 RequestId:56DFF2D58B3D939D691323C7

计量计费程序读取原始日志,根据规则生成用户在各维度使用数据(包括流量、使用次数、出流量等):

image.png

让我们看下几个计量日志计费场景:

  • 电力公司:每10秒会收到一条日志,记录该10秒内每个用户ID下该周期内功耗、峰值、均值等,每天、每小时和每月给用户提供账单
  • 运营商:每隔10秒从基站收到时间段内某个手机号码的动作(上网、电话、短信、VoIP),使用量(流量),时长等信息,后台计费服务统计出该区间内消耗资费
  • 天气预测API服务:根据用户调用接口类型、城市、查询类型、结果大小等对用户请求进行收费

要求与挑战

既要算对,又要算准是一件要求很高的事情,系统要求如下:

  • 准确可靠:多算用户吃亏,少算我们吃亏
  • 灵活:支持补数据等场景,例如一部分数据没有推过来,当需要修正时可以重新计算
  • 实时性强:能够做到秒级计费,对于欠费场景快速切断

其他需求(Plus):

  • 账单修正功能:在实时计费失败时,我们可以通过理想计费进行对账
  • 查询明细:支持用户查看自己消费明细

现实中还有两类不小的挑战:

  • 不断增长数据大量:随着用户以及调用上升,数据规模会越来越大,如何保持架构的弹性伸缩
  • 容错处理:计费程序可能有Bug,如何确保计量数据与计费程序独立

这里我们讨论一种阿里云基于日志服务开发计量计费方案,该方案已在线上稳定运行多年,从未出现过一粒算错,延迟等情况,供单价参考

系统架构

阿里云日志服务的LogHub功能为例:

  1. 使用LogHub进行计量日志实时采集与计量程序对接:LogHub 支持的30+种API和接入手段,接入计量日志非常容易
  2. 计量程序每隔固定时间消费LogHub中步长数据,在内存中计算结果生成计费数据
  3. (附加)对明细数据查询需求,可以将计量日志配置索引查询
  4. (附加)将计量日志推送至OSS、MaxCompute进行离线存储,进行T+1等对账与统计

image.png

实时计量程序内部结构:

  1. 根据LogHub读取接口GetCursor功能,选定某个时间段日志(例如10:00-11:00)Cursor
  2. 通过PullLogs接口消费该时间段内数据
  3. 在内存中进行数据统计与计算,拿到结果,生成计费数据

(我们可以以此类推,把选择时间计算逻辑修改为1分钟,10秒钟等)

image.png

性能分析:

  • 假设有10亿条/天计量日志,每条长度为200字节,数据量为200GB
  • LogHub 默认SDK或Agent都带压缩功能,实际存储数据量为40GB(一般至少有5倍压缩率),一个小时数据量为40/24 = 1.6GB
  • LogHub读取接口一次最大支持读1000个包(每个包最大为5MB),在千兆网条件下2秒内即可读完
  • 加上内存中数据累计与计算时间,对1小时计量日志进行汇总,不超过5秒

数据量大如何解决,例如一天十万亿

在一些计费场景下(例如运营商、IoT等)计量日志量会很大(例如十万亿,数据量为2PB/Day),折算压缩数据后一小时有16TB,以万兆网络读取需要1600秒,已不能满足快速出账单需求。

这里一般使用2种手段:

1. 控制产生的计费数据量

我们对于产生计量日志程序进行改造(例如Nginx),先在内存中做了聚合,每隔1分钟Dump一次该时间段聚合的汇总计量日志结果。这样数据量就和总体的用户数相关了:假设Nginx该时间段内有1000个用户,一个小时数据点也才1000 200 60 = 12GB(压缩后为 240 MB)

5. 将计量日志处理并行化

LogHub下每个日志库可以分配不同Shard(分区),我们可以分配3个分区,3个计量消费程序。为了保证一个用户计量数据总是由一个消费程序处理,我们可以根据用户ID Hash到固定Shard中。例如杭州市西湖区用户写在1号Shard,杭州上城区用户数据写在2号Shard,这样后台计量程序就可水平扩展。

image.png

其他问题

1.补数据怎么办?

LogHub 下每个Logstore可以设置生命周期(1-365天),如果计费程序需要重新消费数据,在生命周期内可以任意根据时间段进行计算。

2. 计量日志散落在很多服务器(前端机)怎么办

  1. 使用Logtail Agent实时采集
  2. 使用机器标示定义一套动态机器组弹性伸缩

3. 查询明细需求如何满足

对LogHub中数据可以创建索引,支持实时查询统计分析,例如我们想调查有一些特别大的计量日志:

Inflow>300000 and Method=Post* and Status in [200 300]

在对Loghub中数据打开索引后,即可实时实时查询与分析

image.png

也可以在查询后加上统计分析:

Inflow>300000 and Method=Post* and Status in [200 300] | select max(Inflow) as s, ProjectName group by ProjectName order by s desc

image.png

4. 存储日志并进行T+1对账

日志服务提供LogHub中数据投递功能,支持自定义分区、自定义存储格式等将日志存储在OSS/MaxCompute上,利用E-MapReduce、MaxCompute、HybridDB、Hadoop、Hive、Presto、Spark等进行计算。

image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
网站流量日志埋点收集—日志格式、日志切分|学习笔记
快速学习网站流量日志埋点收集—日志格式、日志切分
0 0
结构化日志和业务审计日志
结构化日志和业务审计日志
0 0
日志服务(SLS)数据加工功能发布
日志服务用户,您好! 针对日志生命周期内存在的各种数据规整、分发、富化、清洗场景需求,阿里云日志服务(SLS)新推出了“数据加工”功能。 推荐在日志服务上进行数据规整、加工或联合其它数据源做分析的数据工程师使用。
5611 0
日志服务数据加工: 性能指南
本篇介绍日志服务数据加工的性能主要因素, 以及如何合理规划源logstore, 目标logstor和加工任务配置来满足数据加工的性能要求.
1511 0
日志服务数据加工:快速开始(SLB日志加工实战)
日志服务数据加工上线,本文以SLB日志加工实战为例,覆盖规则编写、控制台交互、权限配置、监控排错等
3915 0
日志服务数据加工:功能概述
日志服务数据加工:功能概述
12458 0
日志处理方案
环境:springboot 日志:logback 可以实现不同业务的日志在不同文件里存放 依赖 org.springframework.boot spring-boot-starter-logging 自定义配置 在resources目录下建立logback-spring.
624 0
日志系列--程序日志处理挑战与方案
程序日志(AppLog)有什么特点? * 内容最全:程序日志是由程序员给出,在重要的地点、变量数值以及异常都会有记录,可以说线上90%以上Bug都是依靠程序日志输出定位到 * 格式比较随意:代码往往经过不同人开发,每个程序员都有自己爱好的格式,一般非常难进行统一,并且引入的一些第三方库的
6832 0
日志系列-常见处理方案
我们以[阿里云日志服务](https://www.aliyun.com/product/sls)为基础,介绍一些常用日志处理方案
2866 0
日志监控告警系统的设计与实现
日志监控告警系统 基于的日志进行监控,监控需要一定规则,对触发监控规则的日志信息进行告警,告警的方式,是短信和邮件。 log4j---->error,info,debug 应用程序程序的日志  error级别 TimeOutException 角标越界IndexXXXException ......Error   com.alibaba.jstorm.daemon.worker.Work
2498 0
+关注
简志
阿里云计算高级专家,擅长领域日志分析与处理。 微博: http://weibo.com/sandbeach 博客: https://aboutlog.wordpress.com/
文章
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
日志数据采集与分析对接
立即下载
数据采集:日志数据上传
立即下载
Kubernetes下日志实时采集、存储与计算实践
立即下载