如何将日志服务的数据秒级同步到表格存储

原文地址

最近在容器服务的官方镜像中,新增了loghub-shipper的镜像,使用该镜像,可以订阅日志服务中的日志库,以秒级的延时将日志数据从日志服务中读出并转换成结构化数据存储在表格存储中,以满足实时在线服务的精确查询需求。

什么是日志服务?

日志服务(Log Service,Log)是针对日志场景的一站式解决方案,解决海量日志数据采集/订阅、转储与查询功能,比如在海量游戏日志收集与分析场景上的应用。

什么是表格存储?

表格存储(TableStore)提供海量NoSQL数据的存储与实时访问服务,能够支持单表PB级数据量、百万TPS,现在针对不同的场景有两种实例规格可供使用:__高性能实例__,高并发低延时的特点适用于金融风控互联网社交等应用,而__容量型实例__以更具性价比的存储和访问成本,更适用于日志、物联网IoT等场景,比如基于表格存储的高性能监控数据存储计算方案

为什么需要将数据从日志服务结构化到表格存储中?

在日志服务中,日志数据以json形式进行存储,并以日志组为写入与读取的基本单位,这种情况下无法根据特定条件(比如某个App近12个小时的日志数据)对日志做快速的查询和分析,只能拿到一段时间内所有设备、应用的日志信息。

假设日志数据格式如下:

{"__time__":1453809242,"__topic__":"","__source__":"10.170.148.237","ip":"10.200.98.220","time":"26/Jan/2016:19:54:02 +0800","url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1","status":"200","user-agent":"aliyun-sdk-java"}

···

将其写入到表格存储中主键为”ip”、”time”的数据表中,其格式如下:

ip time source status user-agent url
10.200.98.220 26/Jan/2016:19:54:02 +0800 10.170.148.237 200 aliyun-sdk-java POST /PutData…

在表格存储中,很容易对某个ip根据时间对历史数据进行精确的检索。

应用场景

日志数据结构化到表格存储之后,可以充分利用表格存储的高并发、低延时、按量计费的特点提供精确查询的在线服务:
1. 电商、信息类网站的最近浏览记录展示。
2. 推荐引擎的数据源,基于用户历史行为习惯进行分析。
3. 实时推荐计算,根据用户最近浏览实时调整推荐策略。
4. 对某个时间点的日志信息的精确查询,比如某台出故障的机器最近24小时的运行情况。
5. 应用程序API基于时间段的延时统计、分析。

开启数据同步

准备工作

在表格存储上建好两张表:数据表和状态表。

数据表用来存储从日志服务中同步过来的日志数据。教程里我们假设这张表有三个主键列,分别是

rename,类型是 STRING。
trans-pkey,类型是 INTEGER。
keep,类型是 STRING。

状态表用来存储每个日志服务Project以及各个shard上日志数据的同步进度,该表的主键需要按照如下方式设置。 您的服务于多个 project 和 log store 的传送服务可以复用同一张状态表。 我们建议您将这张表的数据生命周期设置为一天或二天,这样可以降低使用成本。 状态表的主键有四列,分别为:

project_logstore,类型为 STRING。
shard,类型为 INTEGER。
target_table,类型为 STRING。
timestamp,类型为 INTEGER。

容器服务控制台创建集群和初始化

TIPS:当已经有ECS服务器时,可以将已购买的云服务器添加到指定集群,添加已有云服务器步骤

您需要对默认设置根据实际情况做一些改动。

  • 低于尽可能和日志服务与表格存储选在同一个区域,这样可以使用私网地址避免公网流量以及公网带来的不确定性。
  • 传送服务并不是一个HTTP服务,不需要暴露任何端口。所以也无需负载均衡。
  • 本教程选择“新增节点”以方便演示。 生产上我们建议您选择“不创建节点”,随后按照添加已有云服务器步骤添加现有的云服务器。
  • 传送服务并不需要高配置的单机。一般情况下,“1核1GB”也足够用了。 传送服务可以完全动态的水平扩容缩容。 这里可以选择任意多台ECS。

集群初始化需要一些时间,请您稍待。您可以点击左侧“集群”进入集群列表界面查看集群的状态。

创建应用

进行基本的应用设置

按照下图的参数填入一些应用环境参数信息,点击页面最后的“创建并部署”来部署传送服务。

  • 选择传送服务的镜像。点击“选择镜像”之后会弹出如上图的选择窗口。搜索"loghub-shipper"来快速找到传送服务的镜像,选中该镜像(左上角蓝底白色的勾),然后“确定”。

为镜像添加配置信息:

  • 部署服务需要一些时间。您可以通过服务列表来查看。就绪的服务如下图。 

到目前为止,传送服务已经搭建好啦,让我们想日志服务中写入一条日志试试看效果吧。

写入一条示例日志数据

LogItem log = new LogItem();
log.PushBack("original", "12345");
log.PushBack("keep", "hoho");
ArrayList logs = new ArrayList<LogItem>();
logs.add(log);
loghub.PutLogs("lhshipper-test", "test-store", "smile", logs, "");

这是一条有两个用户字段的日志,其中**original**字段的值为 "12345",**keep**字段的值为 "hoho"。除此以外还有三个日志服务添加的字段,其中 topic 为 "smile",而 __source__ 和 __time__ 字段随环境变化而变化。

查看数据表的信息

使用工具马上可以看到表格存储中数据表已经有了一条数据(转成json格式方便描述)

[{"rename": "12345", "trans-pkey": 12345, "keep": "hoho"},
{"__topic__": "smile", "original": "12345"}]

其中,rename、trans-pkey、keep为主键列,__topic__与original为属性列。

根据环境变量中的配置:

  • 在 transform 中定义 "rename": "original",日志数据中original 的值为"12345",故表格存储中该行的rename的值也为 "12345"
  • 在 transform 中定义 "trans-pkey": "(->int 10 original)",传送服务将original的值以十进制的方式转成整数写入表格存储中的trans-pkey列
  • keep没有任何转换规则,在表格存储中,属性类keep的值与日志数据中的保持一致
  • 日志数据中的 __source__ 和 __time__ 字段由于在exclusive_columns 中配置了["__source__", "__time__" ],这两个字段的数据不会写入数据表中
  • topic和original两个字段以属性列的方式写入数据表

查看状态表

同时,我们也从状态表中看到了如下数据(转成json格式方便描述):

[{"project_logstore": "lhshipper-test|test-store", "shard": 0, "target_table": "loghub_target", "timestamp": 1469100705202},
{"skip_count": 0, "shipper_id": "fb0d62cacc94-loghub-shipper-loghub-shipper-1", "cu_count": 1, "row_count": 1, "__time__": 1469100670}]

其涵义为传送服务的某个worker("shipper_id": "fb0d62cacc94-loghub-shipper-loghub-shipper-1"), 在2016-07-21T11:31:45.202000Z添加了这条状态("timestamp": 1469100705202)

在之前的五分钟里,该worker从名为 lhshipper-test 的日志 project中的 test-store 这个 log store ( "project_logstore": "lhshipper-test|test-store" ) 0号 shard ( "shard": 0 )消费了一条日志, 其中跳过日志0条( "skip_count": 0 ), 写入数据表的日志1条( "row_count": 1 ),消耗了1个CU( "cu_count": 1 )。

好啦,概耗时15分钟就把日志服务的数据秒级同步到表格存储的传送服务已经搭建好啦,日志类数据就可以使用日志服务的Logtail方便的采集到云上,才通过传送服务方便的将数据同步到表格存储中,支持了不同的业务需要,简直是神器啊~

原文地址

时间: 2024-11-06 09:59:06

如何将日志服务的数据秒级同步到表格存储的相关文章

百度地图Canvas实现十万CAD数据秒级加载

背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScript. 项目大概是需要将一张CAD的图(导出大概三十万条数据)叠加在地图上,在接Canvas之前考虑了很多种方案,最后都否定了.首先我们想利用百度地图原生的JavaScript API实现线和点的加载,但是经过测试,当数据达到2000左右,加载时间就已经达到了数十秒,后来直接测试了一万条数据,浏览

阿里云CDN实时日志服务是什么?

阿里云CDN实时日志服务重磅发布!在飞天技术汇第43期,阿里云发布了CDN实时日志服务,直播及回看地址:https://yq.aliyun.com/live/699?source=5176.11533457&userCode=ahxhg8oc&type=copy --日志秒级交付.一站式投递.多维数据分析和定制能力.一键配置,业务决策尽在运筹帷幄之中. 下面,我们来看看什么是实时日志? 在借助CDN访问各种的图片.文字或者视频资源时,CDN会产生大量的日志数据,CDN会实时采集这些日志数据

阿里云DTS大幅降价,低至400元即可获得实现秒级延迟的数据传输服务

为了释放更多技术红利,进一步普惠广大客户和开发者,阿里云7月上旬宣布数据传输服务(Data Transmission Service,简称DTS) 数据同步功能降价,最高降价幅度高达40%.中国大陆,最低单价低至400元/月,跨境专线同步,最低单价低至1590元/月. 阿里云DTS支持关系型数据库.NoSQL及大数据等同异构数据源之间的的数据迁移同步及增量数据实时订阅.致力于在公有云.混合云场景下,解决远距离.毫秒级异步数据传输难题,用户可以使用数据传输轻松构建安全.可扩展.高可用的数据架构.

万亿级日志与行为数据存储查询技术剖析(续)——Tindex是改造的lucene和druid

五.Tindex 数果智能根据开源的方案自研了一套数据存储的解决方案,该方案的索引层通过改造Lucene实现,数据查询和索引写入框架通过扩展Druid实现.既保证了数据的实时性和指标自由定义的问题,又能满足大数据量秒级查询的需求,系统架构如下图,基本实现了文章开头提出的几个目标. (点击放大图像) Tindex主要涉及的几个组件 Tindex-Segment,负责文件存储格式,包括数据的索引和存储,查询优化,以及段内数据搜索与实时聚合等.Tindex是基于Lucene的思想重构实现的,由于Luc

阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读读后感

阅读文章:阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读 文章网址:https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247488245&idx=1&sn=1c70a32f11da7916cb402933fb65dd9f&chksm=e9292ffade5ea6ec7c6233f09d3786c75d02b91a91328b251d8689e8dd8162d55632a3ea61a1&scene=2

百亿级数据10万字段属性的秒级检索解决方案以及实现

课程下载地址: https://pan.baidu.com/s/1zr5riwZtdRgnVQRetQnG7A 提取码: 5xg8 平台型创业型公司,会有多个品类,像生活信息服务类网站的有:58同城,赶集网等等,他们的类别非常多,每个垂直领域都会分为很多类别,每 个类别下又分很多子类别,每个类别或者子类别的属性都不一样,像这么庞大的数据,字段属性可以达到10万级别,同时数据量可以达到百亿级别 ,很多异构数据的存储需求.基于这么庞大的数据,我们需要达到秒级查询. 那么我们该怎么设计呢?本课程讲手把

秒级容灾,UCloud 内网高可用服务之三代架构演进

快节奏的生活,任何的业务异常 / 中断都是不能容忍的. 在无人化超市选购完成进行结账时,结账页面突然卡住,无法完成购买操作.这时该选择放弃手中的商品 or 继续等待? 酒店办理入住时,管理系统突然崩溃,无法查询预订记录,导致办理入住受到影响,酒店前台排起了长队-- 高可用与我们每个人都是息息相关的,在即将到来的双十一,更是对各个电商的业务可用性提出了更高的要求.对此,UCloud 提供基于内网 VIP 的高可用服务,内网 VIP 通过前后三代广播集群的设计演进,解决了复杂异构 Overlay 网

基于Flink秒级计算时CPU监控图表数据中断问题

基于Flink进行秒级计算时,发现监控图表中CPU有数据中断现象,通过一段时间的跟踪定位,该问题目前已得到有效解决,以下是解决思路: 一.问题现象 以SQL02为例,发现本来10秒一个点的数据,有时会出现断点现象,会少1-2个点甚至更多: 二.问题定位 针对该问题,根据数据处理链路,制定了数据输出跟踪示意图,如下所示: 通过输出的实际数据发现: 1.监控Agent的数据已经正确上报Kafka 2.从Kafka中可以正确取到监控Agent上报的数据 3.从计算完毕的Kafka中取不到丢失点的数据

日志服务Python消费组实战(二):实时分发数据

场景目标使用日志服务的Web-tracking.logtail(文件极简).syslog等收集上来的日志经常存在各种各样的格式,我们需要针对特定的日志(例如topic)进行一定的分发到特定的logstore中处理和索引,本文主要介绍如何使用消费组实时分发日志到不通的目标日志库中.并且利用消费组的特定,达到自动平衡.负载均衡和高可用性. 基本概念协同消费库(Consumer Library)是对日志服务中日志进行消费的高级模式,提供了消费组(ConsumerGroup)的概念对消费端进行抽象和管理