
暂无个人介绍
1 背景伴随着物联网(IoT)的快速发展,软硬件交互场景越来越普及,在自用和商用的空间场域中,我们智慧园区、未来酒店的智能化场景也得到了极大的丰富,打造出多款智能有科技感的产品,如人脸门禁、云前台、入住自助机、无线AP、云打印等等。空间域中围绕“人”、“设备”、“空间”打造的“智能化场景”有着特殊的物理空间上的分散和连接,硬件终端的异地分散部署、终端与云端(或边缘端)的连接通信,服务端-云端-硬件终端的远程指令控制等。物理空间上的分散和连接,增加了监控运维的难度,时常出现用户的各种问题反馈:设备离线固件升级后服务不可用终端应用升级后服务不可用卡死、白屏、样式错乱业务功能异常、服务异常上游依赖应用系统服务异常基于阿里巴巴最佳实践打造的智慧园区和未来酒店产品,已逐步走向商业化输出,问题也从内部用户反馈扩大到外部客户反馈,如果问题总是通过客户反馈才能被动感知到,必然会导致客户对我们的产品逐渐失去信心。如何才能变被动为主动,使得运维、开发和测试同学具备感知线上问题、诊断定位根因、快速应急止血的能力,是一件很必要的事情。 附拓扑结构图2 核心问题&挑战基于IoT打造的交互场景,从部署架构看,除了长链路的特性外,还有大规模分散部署的硬件终端,以及跑在终端上的软件系统。通常来说,智能终端软硬件交互系统是交付和长期运维的重难点,一方面存在硬件的不同厂商、不同型号、物理性损耗、ROM升级、摩尔定律等引发的五花八门的偶现问题,另一方面存在软件升级、依赖不可用等引发的重大问题。我们从日常具体问题中抽象提炼出2大核心问题:终端问题难感知:终端日志缺失、偶发难发现、质量度量视图缺失长链路问题难定位:质量分析模型不准确、端到端的日志断连全链路日志和质量度量视图,是解决问题的关键所在。但要在智能终端软硬件交互系统中建设全链路日志和通用质量度量视图有一定的挑战,具体挑战如下:3 解决方案基于IoT的智能终端交互系统,设备终端一般由交付同学来运维和升级,终端软件由客户端开发同学运维和升级,服务端由后端开发运维和升级。系统问题可能发生在硬件终端上、可能发生在终端应用软件上、也可能发生在服务端依赖上。多职能角色的协同,长链路的调用,导致问题“发现-定位-止血”的耗时远高于纯软件系统。结合日常问题的分析经验,我们期待的问题发现定位方式是:首先能够实现终端问题的快速准确感知,其次基于业务场景指标呈现质量概览,并通过不同维度的质量分析模型进行下钻,最终通过全链路的调用日志明细确定根因。这样从业务场景出发,发现异常问题,串联全链路,任何职能角色都可以方便易懂的感知,关注和分析系统质量情况。同时我们的解决方案要满足以下要求才能真正的解决用户的难度和痛点。针对上述的问题解决方式和要求,通过调研分析发现集团内普遍存在服务端应用的长链路监控预警和分析诊断工具,但串联终端应用在内的端到端的长链路诊断分析工具比较少。终端应用和服务端应用使用的技术栈差别很大,即使在同一个业务场景的逻辑实现中,日志也是独立埋点的,调用链路也是断开的。要建设一套各种技术栈兼容的通用埋点工具成本很高,经过内外部的多方调研,我们选择在自有业务中引入“狄仁杰”——它是专注于业务场景的全链路日志分析,轻量级的sdk接入,通过一行代码即可将系统中基于slf4j接口的业务日志全部用鹰眼traceId串起来,还支持“业务场景”语义的标识传递,可实现从终端到服务端的全链路染色。使用狄仁杰将日志进行全链路串联后,一键接入基于IoT的实时质量工具魔洛哥,可实现基于专家经验设计的业务质量大盘等质量视图,以及自动配置的终端异常感知预警模版,整个方案采用魔洛哥产品化接入和数据服务(参考5.2 数据服务)的能力实现不同产品通用质量视图的分钟级创建,同时根据质量大盘指标自动配置预警规则和模版,做到终端异常的实时准确感知和问题的快速定位分析,整体方案如下:整体方案以上2个核心问题的解决方案,已在“魔洛哥”承载的多个业务产品中应用实践,详见4.1和4.2。为了支撑不同IoT产品的实时质量建设的差异化诉求,“魔洛哥”平台本身的基础能力也在持续打磨中。4 “魔洛哥”中的落地策略&最佳实践4.1 终端异常感知智能终端系统由于其特殊性有很多偶现性的"疑难杂症",同时"疑难杂症"难发现难定位。经过分析发现导致这一问题的两个因素:基于终端的质量度量视图缺失(终端链路质量,终端设备质量等)智能终端多职能角色的协同(客户端开发、前端开发,算法开发,硬件开发,硬件供应商,硬件部署运维团队等)因此我们需要一种工具能够像服务端的Sunfire、云监控、eagleeye工具平台一样,能够快速感知智能终端异常,同时精准定位出异常的链路模块,使得异常模块的负责人可快速的进行问题的接手和处理。通过调研我们开发了基于IoT的实时质量工具-魔洛哥,针对智能终端异常难感知采用了以下策略:智能终端监控预警通过基于专家经验定义终端系统的异常指标来实时监控异常并触发预警。首先将种类繁多且分散的智能终端系统日志进行SLS云化存储,其次借助魔洛哥平台的数据服务能力,直接通过SLS编写指标查询SQL来生成HSF/HTTP服务,最后使用魔洛哥平台配置基于专家经验且通用的终端预警模版和规则,最终实时匹配预警规则产生告警。魔洛哥平台详细实践操作流程如下:智能终端实时质量首先智能终端系统存在多角色的协调,一旦发现了终端异常后,需要多角色参与进行分析,导致问题的止血时间较长,因此我们需要一种工具除了能够反馈终端异常外,还能返回终端链路的过程质量,使得问题发生后,通过链路模块实时质量,能够精准的感知到异常链路模块,以此来提升异常的感知能力。其次智能终端系统还存在很多偶发性问题,而偶发性问题很难触发预警,但确非常影响用户使用体验(例如一台门禁设备人脸识别成功率低,导致高峰通行时段极差的通行体验),因此也需要一种工具能够及时透出偶发的设备异常问题,通知运维或者开发同学进行优化,提升终端用户的体验。综上分析,我们需要提供一种标准化的运维工具,将终端硬件和系统的质量情况实时透出,帮助开发和运维同学快速感知问题,首先将种类繁多且分散的智能终端系统日志进行SLS云化存储,然后定义出基于硬件智能终端的链路质量度量模型,借助魔洛哥平台的数据服务能力,直接生成基于智能终端系统的实时质量。详细方案如下:魔洛哥平台详细实践流程如下:4.2 基于业务场景的全链路实时质量通用实时质量视图实时质量的度量分析已经存在很多成熟的产品,比如主要用于服务端的Sunfire、云监控、eagleeye和用于前端的体验+等,那为什么我们不直接使用这些平台,而要着重提到基于业务场景的全链路实时质量呢?在我们实践业务质量保障的过程中,发现单纯的服务端和前端实时质量度量及监控不能完全满足我们想从用户实际体验的角度来度量和发现质量问题的诉求,主要体现在以下方面:产品视角维度:割裂的服务端和前端实时质量,从技术栈上就天然的把产品分开了,但是对于用户来说,不论是服务端问题、前端问题或者设备问题,都可能造成用户有损的体验。因此,我们需要一个和用户视角一致的维度来"看见"产品的质量。业务场景视角维度:举个例子,用户在长链路场景中,会访问多个前端页面和服务端接口,前置步骤操作成功(包含接口及页面)是最终业务成功的必要条件。按照比较常规的做法,我们会去看最后一个接口的成功率,但是这样就过滤掉了前面失败的用户。优化一下,我们用最后一个接口成功的数量比上业务起始接口的调用数量,但是如果前端出现了一些不影响流程但是确实影响用户体感的问题(比如:最后一个接口调用成功跳转的提示页面展示错误),也就无从感知了。因此,我们需要一个涵盖前后端的业务场景质量视角。当然,除了我们定义的产品视角和业务场景视角,基础的服务端和前端应用视角对于完整的质量全方位保障也是必不可少的,所以我们提炼了如下产品模块:产品质量概览:从业务场景入手,通过业务实时成功率,平均耗时以及日环比和周环比来反馈业务的整体质量情况;同时产品质量概览中细分出了服务端和前端实时质量概览大盘,服务端和前端质量主要是通过展示应用的接口调用成功率和耗时来进行实时质量的反馈。通过点击详情可以对单应用的质量指标进行详细分析。业务场景质量:业务场景的实时质量情况,以及异常的页面列表和错误码分布,同时根据错误码进行明细日志查询,最后进行全链路Trace分析。服务端实时质量:基于单应用一段时间内的服务端质量情况,包括接口异常率,异常率趋势,异常API分布等,通过异常API分布情况可进行异常API的详细分析,包括耗时和错误码分布等,根据错误码分布可直接进行明细日志查询,以及全链路Trace查询。前端实时质量:基于单应用一段时间内的前端质量情况,包含API,JS等的异常数,以及异常页面排行。业务应用实践使用狄仁杰埋点的业务,一键接入魔洛哥,分钟级透出通用实时质量视图,包含产品质量、业务场景质量分析、服务端质量分析、前端质量分析、质量查询、多维分析(建设中)等,目前菲住布渴、餐配中台等多个业务已经接入使用。菲住布渴产品在接入平台后,经过对业务场景数据的分析发现:在小程序入住办理场景中,真正能走到最后一步且成功的用户占比很低,很多用户被前置流程的规则阻断了。再深入下去,发现酒店房间未准备好的问题最多,反馈业务方之后,正在进一步讨论优化方案。餐配中台在接入平台后,经过对业务场景数据的分析发现消费退款失败较多,一部分失败是因为在之前就餐消费失败时,会直接去调退款接口,近期迭代做了优化,代扣结果未返回支付成功便直接异步调用撤销支付请求,并返回代扣失败。订单实际上支付未成功,因此去调用退款接口无可退订单,导致大量退款异常。另一部分失败是因为查询到订单状态是否支持退款的逻辑判断不精准,部分订单状态无法调用退款。5 技术架构根据上述的目标,在业务接入时,我们需要实现低成本快速接入,同时展示业准确的全链路实时质量情况,因此从技术角度出发要解决的问题有三点:低成本快速接入实时数据全链路指标串联根据上述的三点,从技术实现上来说有一定的复杂度,首先要解决实时性,其次要能够将全链路日志进行串联,最后还要实现低成本接入,最终通过一定的调研分析,整体的技术方案如下:5.1 狄仁杰 为了能够将全链路指标进行串联,我们需要在业务应用中引用狄仁杰SDK,通过一行代码即可将系统中基于slf4j接口的业务日志全部用鹰眼traceId串起来,并将收集到的日志发送到应用自定义的SLS中。5.2 数据服务为了降低接入成本,我们开发实现了基于SLS的数据服务工具,通过一条SQL即可将SLS数据查询结果生成一个可调用的API。数据服务能力参考了DFaaS(Data Function As Service)的数据服务能力,提供数据函数即服务,使用户无需编码而直接可生成服务,降低研发门槛、实现低成本接入,使得开发同学更快捷、持续的交付业务以及产品需求。6 总结和展望通过基于IoT的全链路实时质量,业务使用狄仁杰进行全链路埋点后,可一键接入魔洛哥平台,实现终端问题的实时感知和链路分析,以及智能终端系统业务场景的全链路实时质量。整体方案接入成本低(分钟级别接入),可实现全链路的实时质量分析,以及精准的终端预警能力。帮助开发运维同学实时发现问题,快速问题的定位分析。但目前整体方案还在持续建设中,还有部分能力需要持续进行迭代优化:离线加速:目前采用的数据服务直接调用sls SDK进行全链路日志实时查询以及生成可调用API,对于数据量较大的业务(亿级数据量的查询)查询时间较长,正在优化中,预计本月底可上线预警规则模版自动生成:业务接入魔洛哥后,直接具备基于专家经验配置的预警模版和规则,该方案还在迭代实现中,预计下个月可上线多维分析:基于业务场景任意指标和维度的分析能力,目前正在开发实现中。
2022年7月29日,阿里云宣布发布全新数据存储生态计划,面向行业ISV伙伴,通过产品集成和认证方式共建联合解决方案,借助该计划,伙伴可享受相应的扶持策略,阿里云将帮助伙伴不断提升技术与方案竞争力,携手共赢。据了解,此次数据存储生态计划首批会聚焦关注数据湖&云数仓、物联网、可观测&智能运维这三大业务领域,基于阿里云新一代存储引擎,加速商业智能数据分析,构建万物互联的系统,实现IT系统的高效运维与管理。在近期的合作伙伴大会上,阿里云确定了“坚持伙伴优先”的生态策略,并发布了“云合行动”。据阿里云透露,本次“数据存储生态计划”将是云合行动在数据存储业务领域的践行方案之一。“阿里云在过去让云计算变得更成熟稳定,这是基本功。阿里云的IAAS一直保持着技术领先,而存储作为IAAS的核心组成部分,我们希望以被集成的方式让伙伴利用好这些原子能力,为客户构建丰富的数据存储解决方案。”阿里巴巴集团研究员,阿里云智能基础产品资深产品总监Alex Chen表示。此外,围绕此次数据生态计划,在FY23财年将重点扶持50家生态伙伴,提供专属产品技术支持、减免优惠与商务激励策略,市场营销与品牌流量加持的生态权益,为伙伴从产品研发到商业化变现的全链路帮助,加速伙伴拥抱云原生转型。第一,提供专属的技术服务团队保障,提供技术架构1V1的深度交流咨询与拜访,加快伙伴适配阿里云产品技术的进度;优先开放产品新特性的使用,领先构建行业产品竞争力;提供产品需求专属对接,让产品从设计之初就能洞悉行业方案痛点。第二,为解决合理规划云资源的预估和使用问题,帮助伙伴更顺利的将业务在云上构建和迁移,阿里云提供专属的产品集成测试补贴,减免应用在上线前的测试成本;针对SAAS伙伴提供生态专属的产品折扣,让云资源的成本可预期;同时,阿里云云市场将提供限期的佣金减免政策,让伙伴产品在云上的售卖更易开启。第三,面向不同客户群体实现品牌与解决方案的联合营销活动。提供品牌联名曝光、峰会活动、联合解决方案官网展示等不同等级的营销推广计划。帮助初创企业和行业ISV快速触达阿里云百万级用户。第四,该计划会针对联合方案,与阿里云内部与外部的销售通路配合,实现联合销售。另外通过线上流量同伙伴共建商机,最终在云市场实现转化,主要流量渠道将覆盖阿里云存储产品控制台、技术文档最佳实践、云栖社区技术论坛、阿里云数据存储生态方案专区等。值得关注的是,截止目前,已有二十余家合作伙伴加入了数据存储生态计划。在数据湖与云数仓领域,如石原子科技、SelectDB、偶数科技、酷克数据、Starburst等;在物联网数据服务领域,如EMQ映云科技、西门子等;在可观测和智能运维领域,面向ItOps场景,有云杉网络、观测云等;针对SecOps场景,IBM、绿盟科技等代表加入,此外,还有FinOps场景的佳杰云星与畅捷通。未来,阿里云希望能以核心技术力量为支撑,推动更多企业实现数据应用创新,与生态伙伴共同构建健康繁荣的生态体系。点击该链接获取更多详情,或加入数据存储生态计划( https://hd.aliyun.com/form/1944 )。
1. 背景程序员学习每一门语言都是从打印“hello world”开始的。这个启蒙式的探索,在向我们传递着一个信息:“当你踏进了编程的领域,代码和日志将是你最重要的伙伴”。在代码部分,伴随着越来越强大的idea插件、快捷键,开发同学的编码效率都得到了较大的提升。在日志部分,各个团队也在排查方向进行创新和尝试。这也是研发效能领域重要的组成部分。阿里集团本地生活,在支撑多生态公司,多技术栈的背景下,逐渐沉淀了一款跨应用、跨域的日志排查方案-Xlog。目前也支持了icbu、本地生活、新零售、盒马、蚂蚁、阿里cto、阿里云、淘特、灵犀互娱等团队。也获得了sls开发团队的点赞。希望本文可以给正在使用或准备使用sls的同学带来一些输入,帮助团队尽快落地日志排查方案。其中第一部分重点讲了在微服务框架下,日志排查面临了怎样的挑战,以及我们是如何解决的。第二部从细节角度讲了方案设计的几个难点和攻克策略。第三部分讲的是Xlog当前具备的能力。第四部分是在围绕主要能力,如何进行生态能力建设的。1.1 Xlog解决的问题在通过日志进行问题排查的时候,相信有几个步骤大家再熟悉不过:1. 登陆跳板机。 2. 切换跳板机。3. 登陆阿里云平台sls。 4. 切换阿里云sls project logstore。循环往复。举个例子,下面这张图显示了一个长链路系统的片段(真实链路会复杂更多) :Application1, Application2, Application3。其中Application1与Application2是同一个域(类似于:一个子团队),Application3属于另外一个域。那本次查询就涉及到跨应用查询,跨域查询两个场景。Application1的负责人接手了该问题后,通过跳板机或者sls日志,发现需要上游同学帮忙协助排查。这个时候无论是切换跳板机还是sls,亦或联系Application2的负责人协助查询,都需要1min->3min的响应时间。如果是从Application2的负责人寻找Application3的负责人将会更难,因为可能不清楚Application3的sls信息(我们bu就有十万级别的logstore信息),又没有跳板机登陆权限,又不知道Application3的负责人。于是排查时间大幅度增加。环境准备的时间(无效排查时间)甚至远大于有效排查的时间。刚才的例子只展示了3个应用的查询场景,往往真实链路要比这个复杂很多很多。所以是不是有一个平台,可以一键式、一站式地查询出需要的日志呢?于是致力于解决长链路下,跨应用和跨域搜素频繁切换的Xlog就诞生了!1.2 Xlog支持的场景微服务框架下的跨应用查询,跨域融合背景下的跨域查询。- 如果你们的团队使用了sls,或者准备将日志采集到sls;- 如果你们的希望可以拥有更好的日志检索、展示能力;- 如果你们希望可以跨应用,跨域搜索日志;本文为大家介绍 xlog,帮助集团内业务构建更大生态的,简便易用无侵入,并且随着越来越多的域接入之后,可以连点成线、并线为面,共同打造一个经济体,或者更大生态的日志全链路方案。1.3 Xlog当前体系建设针对已经采集到sls的应用,我们可以做到对代码零改造、对部署环境无侵入,并且采集的结构、采集的渠道都是自由的。基本上,只要已经接入了sls的,就可以接入Xlog了。通过对结构的归一、格式归一、和跨域能力打通,Xlog支持了排查问题最常使用的几个场景:应用内跨文件搜索,域内跨应用搜索,跨域搜索。《持续交付2.0》的作者乔梁提到:一致性,是研发效能提升必经之路。整个经济体发展20多年,一致性的全量覆盖难如登天,但Xlog创新地提出了一种方案,将不一致转化成一致,无论对查询还是对其他基于日志的技术体系建设,都有里程碑的意义。2. 方案设计这个段落将会详细讲述Xlog的设计思想和发展过程,如果是已经接入sls的可以直接跳到2.2;如果当前还未接入sls,可以读2.1 会有一些创新的思路。2.1 最初的方案:创新与独善其身2019年saas刚成立,很多基础建设都有待完善,与很多团队一样当时我们查询日志主要通过两种方式:1. 登陆跳板机查询:使用Traceid->鹰眼->机器ip->登陆跳板机->grep 关键字 的查询链路。缺点:每次查询4-6分钟,日志检索和可视化差,无法跨应用查询,历史日志无法查看。2. 登陆阿里云sls web控制台查询:登陆sls->关键字查询。缺点:每次查询1-2分钟,日志可视化差,无法跨应用查询,无法跨域查询。基于这样的背景,我们做了3件事来提升查询效率:- 日志格式统一: 针对logback中的pattern使用了一套标准。%d{yyyy-MM-dd HH:mm:ss.SSS} {LOG_LEVEL_PATTERN:-%5p}{LOG_LEVEL_PATTERN:-%5p}{PID:- } --- [%t] [%X{EAGLEEYE_TRACE_ID}] %logger-%L : %m%n其中:%d{yyyy-MM-dd HH:mm:ss.SSS}:时间精确到毫秒${LOG_LEVEL_PATTERN:-%5p}:日志级别,DEBUG,INFO,WARN,ERROR等${PID:- }:进程id---:分隔符无特别意义[%t]:线程名[%X{EAGLEEYE_TRACE_ID}]:鹰眼跟踪id%logger:日志名称%m%n:消息体和换行符一个域内使用相同的日志格式,事实证明这带来的收益远超出预期。对全链路的分析,监控,问题排查,甚至对将来的智能排查都带来极大便利。sls结构设计与统一:将域内所有应用的采集格式统一成一套结构,和正则方式提字段,方便采集和配置。在docker的基础镜像里面生命logtail的配置,这样域内所有应用可以继承同样的日志采集信息。sls采集结构下沉:这里我们创新的提出了一个概念下沉的理念。并通过这样的方式可以非常便捷的实现跨应用查询。如下图所示,sls结构可以理解为4层:account, project, logstore, logtail。 其中logstore这一层很关键,关系着关系查询的维度。常见的方案是使用一个应用对应一个losgtore,这就导致在多个应用查询的时候,需要频繁切换logstore。因此我们创新的提出了概念下沉的理念。让每一个环境对应一个logstore,这样只需要确定了查询的环境,就能清楚的知道在哪个logstore中查询,从而实现跨应用查询的效果。这套方案在解决单应用、域内跨应用有着非常好的性能表现,只需要完成一次api的调用。如果你所在的团队正在准备使用sls,如果sls的数据只用于做排查(监控类的sunfire可以直接读服务器本地日志)我们依然建议采用这样的方案。可以很好的完成排查的需要。同样基于这样几个条件的解决方案已经沉淀到Xlog中,可以直接接入Xlog,从而享有Xlog全套的能力。2.2 现在的方案:创新与兼济天下刚才的方案在解决自己域的排查问题的时候有着很好的表现。但2020年,saas开始支撑多个生态公司,面临的场景不再是自己域内的,还需要多个域共同串联。这时我们面临着两大考验:接入成本:我们规定了一套sls采集方式和日志格式,按照这样的形式可以方便的进行数据的采集和高效的查询、展示。但是在其他部门进行接入的时候发现,由于已有系统已经配置了监控、报表等模块,导致日志格式不能修改。由于有些系统之前已经采集到sls导致采集结构也不能修改。这两个信息不一致导致接入成本很大。跨域场景:在系统日趋复杂的情况下,跨域场景也越来越多。拿本地生活的业务场景举例。在入淘的大背景下,部分系统完成淘系迁移,仍有部分系统在蚂蚁域;两个域的打通需要经过网关。在口碑和饿了么深度融合的情况下,互相调用也需要经过网关。目前也在和收购的isv打通,同样需要经过网关。由于各个公司采用的链路追踪方案不通,导致traceid等信息不一致,无法全链路排查。所以如何解决跨域场景日志搜索成为第二大问题。因此,在之前的方案上,我们把Xlog进行了升级,重新定义了目标:- 核心能力:应用->跨应用->跨域->全域多场景日志排查。从只能查一个应用的日志,到可以在域内查一条链路的日志开启真正全链路日志排查的大门。- 接入成本方面: 十分钟接入。通过代码逻辑降低对现有日志格式和采集方式的改动。支持logtail、produce、sdk等多种采集方式。- 侵入性方面:零侵入,对应用代码无侵入,直接与sls交互,实现解耦。- 自定义方面:支持查询界面自定义,展示结果界面自定义。2.2.1 模型设计由于调用sls api查询日志的单元是logstore,我们可以将多种多样的采集结构拆结为一下3种单元的组合(当然绝大多数域可能就是其中一种结构)。- 1. 一个环境对应一个logstore,(比如:在这个域内,所有应用在日常环境的日志都在一个logstore中)。如下图所展示的域A。- 2. 一个应用对应一个logstore,(比如A应用日常环境对应logstore1, A应用预发环境对应logstore2, B应用日常环境对应logstore3)。如下图所展示的域B。- 3. 一个文件对应一个logstore,(比如A应用的a文件在日常环境对应logstore1,A应用的b文件在日常环境对应logstore2)。如下图所展示的域C。有了这样的原子结构,只需要在xlog上配置的时候,创建好一个域、环境、应用、文件=> logstore的映射关系即可。这样就可以在域内进行应用粒度、文件粒度的查询。同样在不经过网关跨域场景可以通过组合两个域的logstore 完成跨域的查询。如上图所示:在域A中指定两个应用,可以转换成logstore加过滤条件。在域B中指定两个应用,可以转换成两个logstore。在域C中指定两个应用可以先寻找应用下的文件,然后找到文件对应的logstore 集合。至此就有了需要在阿里云sls查询日志的所有logstore。将查询结果进行组合和排序就可得到最终的结果。同理,如果想进行跨域的搜索,只需要将多个域的logstore进行拼接。然后进行查询即可。2.2.2 性能优化通过2.2.1模型设计的讲述,无论是环境类型的、应用类型的还是文件类型的sls结构,以及单应用、多应用、多个域的查询都可以转换成一组logstore,然后遍历执行logstore。但是这样就会引入新的问题,如果logstore很多,如何才能提效。举个例子,在对接某团队日志的时候发现,他们的logstore有3000个,每个环境有1000个应用。假设每次查询需要150ms,1000个应用需要执行150s(2.5分钟)。试想如果不指定应用在全域搜索一次日志都需要2.5分钟,那将是多大的成本。针对这样的问题,我们进行了性能方面的优化。主要采用了以下几个方式,如下图所示:- Logstore链接池预加载:将logstore进行去重和链接,减少每次查询创建链接的时间。针对活跃度不高的logstore进行降级,惰性加载。- 多线程并发:针对多个logstore的场景进行并发查询,减少查询时间。- 算法优先队列:针对查询人员进行亲疏算法优化,精简logstore查询数量,从而减少开销。- 前端组合排序:后端只做查询操作,排序和查找等操作均在前端完成,减少后端并发压力。如上图所示,当用户通过前端选择对应的操作域,以及查询条件之后。后端分析获取需要查询的logstore列表(图中A,B,C,D,E所示)。再通过分析用户的亲密应用来进行排序和筛选,从而得到优先级队列(图中B,A,C)。针对优先级队列使用已经创建好的链接池进行并发查询,从而得到一组日志结果。最后由前端完成排序和组装,并渲染出来,完成一个周期。本文主要讲解其中线程池并发和算法优化模块。2.2.3 线程池并发相较于传统的线程池并发执行没有太大差异。将需要查询的logstore,按照顺序插入到线程池队列。通过该手段可以在单次查询logstore数量较小(小于核心线程数)的时候,有效的降低查询时间。针对数量较大的场景,由算法优化进行支持。针对查询后的补偿操作,也使用异步的处理方式,减少查询耗时。- 结构后处理:在环境结构的域中,配置过程无需配置应用和文件。这些数据来源于每次查询之后,不断将缺失的数据自动填充进结构的处理操作。针对这些不影响当次查询结果的操作,作为后处理添加到异步线程池中。- 算法后处理,在处理人员亲疏关系和应用亲疏关系的评分逻辑中,使用的是不断训练的方式。该部分也不影响当次查询的结果,也放到异步线程池中。2.2.4 算法优化针对满足条件的logstore较多(超过核心线程数)的场景,通过线程池并发进行查询也不能较快的拿到结果。经过日志快排一年数据的积累和分析,我们发现即便是没有指定应用和搜索条件,也可以通过查询人员的操作习惯或者关注应用习惯,定位到最有可能的logstore序列。举个例子,在商家saas中心,应用数量有500个左右。同学A负责的系统是 Application1, 查询次数较多的应用还有Application11,Application12。除此之外,与Application1处于紧密上下游关系的应用是Application2,Application3。如果是这样,我们可以认为同学A,对应用Application1,Application11,Application12,Application2,Application3的关注度会高于其他应用。针对这几个应用,可以进行优先查询。从而将的500个查询任务降低成5个。结合日常生活中的状况,每个开发同学关注的应用数量大概率会控制在30个以内。通过以上的分析,我们建立了两套亲疏关系网络用于定位查询批次和梯队。- 人员亲疏关系当用户每次调用的时候,都可以将查询条件,查询结果和用户进行分析和关系创建。由于查询条件中可以指定应用,也可以不指定应用。如果是指定应用的,说明用户明确查询该应用内容。将该用户和该应用的亲密度加5分。如果没有指定应用,根据关键字查询,可以分析查询出的结果。将查询结果的各条日志对应的应用提取出来,然后加1分(由于不是明确指定的,而是根据关键字辐射到的)。至此,经过多次的用户操作,就可以获取到用户与各个应用的亲密度。当遇到多logstore查询的场景,可以根据用户筛选出与之亲密度最高的15个应用。作为第一批查询对象。- 应用亲疏关系:应用之间也存在着亲密度关系。亲密度越高的应用,被关联搜索出来的概率就越大。举个例子,center与prod 两个应用在系统设计上就有这紧密的关联关系。如果用户A的亲属关系中包含应用center,那么在其查询日志的时候就有较大概率辐射到应用prod。基于这样的思路,就可以通过分析每次查询日志的结果进行关系矩阵的创建。在每次获取通过关键字查询的日志结果之后,将涉及到的应用进行两两亲密度加1。相当于在一个链路上的应用亲密度都加1。方便以后查询时不会因为人员亲密度丧失应用亲密度的信息,导致链路失真。上面大致概括了一下,我们是如何训练亲疏关系矩阵的,下面讲一下如何通过这个矩阵进行查询算法优化的。如下图,左上角是我们记录的人-应用,应用-应用的亲疏关系矩阵。具体来讲,用户和应用A、应用B、应用C等关系,我们会用一个分数度量他们的亲疏关系,主要可以描述人对应用的关注度。在应用-应用之间,我们记录了彼此的耦合度。右上角是查询条件,根据查询条件以及各个域的采集结构,可以快速的计算出需要查询的logstore的列表。但并不是所有的logstore都需要查询,这里会将亲疏关系矩阵和logstore的列表取交集,然后排序进行搜索。如下图所示,针对交集命中的应用,会先按照人-应用的亲疏关系进行计算,选出分值比较高的。然后不足30个阈值的使用应用-应用的亲疏关系进行补充。这里就涉及到一个比较逻辑,会按照人和应用的比例分值*应用与应用比例的分值,类似于哈夫曼编码中的路径权重的意思。最后得到需要查询的30个logstore的列表。2.2.5 跨域映射进行全链路的排查,跨域是必须面对的挑战。在实现原理上讲,跨域有两种场景:经过网关、没有经过网关。- 不经过网关的场景,如:淘系不同域的互相调用。这个场景其实本质上与域内搜索没有太大区别,这里不多介绍。- 经过网关的场景,如:淘系与蚂蚁系互相调用,由于每个域使用的链路追踪方案不同,无法使用一个traceId将整个链路串联起来。这里主要讲一下这种场景的处理方式。如上图所示,展示了域1,域2,域3,域4的调用链路。其中域1调用域2,域3调用域4不经过网关,traceId不发生改变。在域2调用域3的时候需要经过网关,并且traceId发生改变。我们可以将查询方式分为两种。1. 关键字查询,比如输入订单号。这种其实并不受链路追踪方案影响,也不受网关影响。所以还是在各个域根据关键字查询即可。2. 通过traceId查询。这种首先需要通过网关信息获取到映射关系。也就是traceId1->traceId2。 然后分别用这两个traceId到各自的域中进行搜索即可。3. 现有能力通过对原有飞云日志快排功能的完善,以及接入成本的改良。Xlog 已经完成主要功能的开发和实现。链接:Xlog.跨域查询操作:多场景覆盖:通过对用户使用习惯的分析,目前支持了单个应用、域内跨应用、跨域。按照文件,日志等级,关键字,时间等搜索。同时支持用户操作习惯保存。多模式支持:对阿里云sls采集结构进行支持,只要可以拆解为以上三种模式的采集方式都可以支持,如果极特殊情况可联系 御田进行定制化。零成本接入:对于已经接入sls的系统,无需改动sls配置,只需在Xlog上进行配置即可。对于sls采集日志保存时间,采集方式,预算等分发到各个业务团队,可根据自己实际情况进行调整。自定义界面:针对不同的域,可能对一些关键字段的敏感度不同。比如有些需要使用traceid,有些需要使用requestid,游戏需要使用messageid,针对这种场景,支持自定义搜索框,和展示日志的时候对关键字段高亮。性能保障:通过以上多种手段的性能优化,目前性能指标如下:单个应用查询150ms。32个应用400ms。超过50个应用,进行算法优化,时间在500ms。4. 生态建设本章节记录了,在此体系上进行的日志层面的优化和建设。大部分思想和策略是可以复用的,希望可以给相同诉求的同学带来帮助。4.1 成本优化Xlog体系搭建完成之后,如何降低成本成为了新的挑战。经过以下方式的落地,成本降低80%。这里也把主要的几个操作列举出来,希望可以给相同在使用sls的用户一些帮助。- 域外日志直接上传到域内:阿里云对内部账号相对于外部账号是有额外的优惠的。所以如果有弹外部署的部门,可以考虑把日志直接上传到域内的账号,或者把账号申请成为域内账号。- 单应用优化:其实打印日志的时候,往往没有考虑到成本原因,很多都是随手就打了。因此我们给每个应用按照交易量进行了域值设计,超过指标的需要进行优化。- 存储时间优化:优化存储时间是最简单,最直接的一个方式。我们将线下(日常和预发)的日志存储降低到了1天,线上的降低到了3天->7天。然后再配合使用归档能力,进行成本的优化。- 索引优化 :索引优化相对来说比较复杂,但是也是效果最明显的。经过分析,我们大部分成本开销分布在索引、存储、投递。其中索引占了70%左右。优化索引的操作,其实就是将索引所占的日志比例降低。比如说只支持前多少字节的一个查询能力,后面的详情部分是附属的详细信息。由于我们域内有统一的日志格式,所以在域内的日志中只留了traceid的索引,同时对摘要日志保持了全索引。所以后续的查询方式变成先通过摘要日志查询traceid,再通过traceid查详情。4.2 归档能力在搭建整个架构的同时,我们也考虑了成本的因素。在降低成本的时候,我们把存储时间进行了缩短。但是缩短存储时间,必然会导致历史问题的排查能力缺失。所以我们也提出归档能力的建设。在sls的logstore中,可以配置数据投递:https://help.aliyun.com/document_detail/371924.html。 这一步操作其实是讲sls中的信息,存储到oss。通俗的讲,就是把数据库的表格,用文件的形式保存下来,删掉索引的能力。在投递过程中会进行加密,目前Xlog支持了在界面上进行下载归档的日志,然后在本地进行搜索。后续可以按需将oss数据重新导入到sls,参考:https://help.aliyun.com/document_detail/147923.html。4.3 异常日志扫描借助于之前的架构,其实可以很清晰的知道每条日志的内容部分是哪里,也可以精准的查询出记录了error日志的文件内容。所以每10分钟巡检一次,将每个应用中的异常日志聚合起来,就可以获取到这段时间异常信息的数量。然后在于之前的比较就可以知道,是不是有新增的错误,暴增的错误等等。如上图所示,拿到所有异常日志后,会按照一个规则进行md5的计算。堆栈类的和异常日志类的,针对两类的算法不同,但是本质目标是一样的就是取其中最有可能重读的段落计算md5,然后进行聚类。聚类完成之后,就可以获取差异,进行比较,从而判断是不是新增或者暴增。5. 规划目前Xlog的基础组件和功能已经实现完毕。在各个应用和域的接入中,整个链路将会越来越全。接下来将向全链路,可视化排查、智能排查和问题发现方面进行补充。异常定位辅助:在可视化链路上,将含有异常的应用标红,方便快速查到错误日志。线上典型问题聚合:日志巡检。线下错误捕获护航:在业务测试的时候经常不会实时的查看日志中的错误信息,开启护航模式,将舰艇应用错误,一旦线下执行过程中出现,将会推送。信息查询:与钉钉打通,用于快捷查询。钉钉@机器人,发送关键字,钉钉将最近执行结果返回。智能排查:@钉钉输入traceid,订单号等,返回检测到的异常应用和异常栈。业务流程编排核对:允许应用日志流程编排,根据关键字串联的链路流程日志需要满足一定规则。用此规则进- 核对。=>针对实时性要求不高,仅对流程进行验证。发布门禁:线下用例回放无业务异常,线上安全生产无业务异常=> 允许发布6. 使用与共建参考很多其他团队的采集结构、日志形式、查询方式、展示样式的要求,在接入成本上降低和自定义方面进行了提升。针对已经满足条件的团队,可以方便的接入。针对还有一些特殊,或者定制化的需求,Xlog进行了拓展模块的预留,方便共建。如上图,图中绿色组件均可复用,只需要针对自己的域进行结构自定义和跨域映射自定义即可。只需要根据定义好的策略模式的接口进行实现即可。
背景随着网络安全形势的愈发严峻,网络攻击的复杂性与隐蔽性越来越成为困扰安全团队的难题。在数字信息时代,安全团队希望通过大数据分析和机器学习,提高内部风险与外部威胁的可见性与预判能力,提升威胁检测与处理的准确性与及时响应的能力。而传统的安全防护主要基于单点的有限信息,基于非黑即白的防控规则,对新型威胁无法做到自适应检测和防御,存在大量的漏报(false negative)和误报(false positive)现象。2020年信通院在网络安全先进技术与应用发展系列报告(UEBA)中指出,攻击者的不对称优势一直是安全团队面临的最大问题,用户实体行为技术(user and entity behavior analytics)能够帮助补全行为分析这块拼图,从海量的网络安全数据中发现恶意的攻击行为,从而逆转这种不对称的情况,改善传统网络安全的滞后效应,减少网络安全事件出现的风险。Exabeam是一家全球网络安全方面的优秀公司,也是Gartner2021 SIEM魔力象限的领导者,Exabeam具有独立的纯UEBA产品- Advanced Analytics,本文我们将学习通过Exabeam与CrowdStrike的合作解决方案梳理和借鉴Exabeam在UEBA方面的优秀做法。什么是UEBAUEBA 发展历史任何网络威胁的来源都是人发起的,一切的攻击最后都落实在账号、数据资产、应用程序等实体上。2014年Gartner将User Behavior Analytics (用户行为分析)定义为网络安全的一个子类工具,旨在通过高级统计分析进行异常检测从而发掘用户在网络和系统中的异常或恶意行为。后来2015年Gartner又增加了E(entity)的部分用来强调“entity behavior”(实体行为)的重要性,比如服务器、路由、应用程序、IOT设备等等。E也就意味着除了用户行为之外其他实体行为和用户行为之间的关联也经常被用来生成更精准的威胁画像从而帮助检测更复杂的攻击行为。UEBA的能力要求一个完备的UEBA系统需要满足并不限于以下几点能力要求:监控和分析行为:能够监控和收集用户以及实体在整个网络中的行为,存储原始数据以及分析数据;异常检测:基于统计分析和时序信息动态刻画用户或实体的行为基线(baseline),检测出明显偏离正常基准行为的行为或事件,从而可以揭示出来自内部或外部的安全风险;基于机器学习和高级统计分析,使得不仅能够检测已知威胁也能挖掘未知威胁,减少漏报率,用数学概率模型取代传统非黑即白的规则判断;组合各种类型的事件:能够识别跨多个用户、实体、IP地址的安全事件,能够组合来自不同数据源,例如来自杀毒软件、防火墙、DLP 和VPN等;近乎实时的响应:UEBA需要做到在威胁事件一发生就立刻响应,减少事件响应的滞后性。UEBA和传统SIEM的区别Gartner认为UEBA是传统SIEM的一种有效补充,其和SIEM、SOAR的融合是现代SIEM的发展方向,UEBA和传统SIEM的区别体现在:SIEM 往往受限于某个时间段的信息和事件分析,而UEBA则更倾向于实时分析用户或实体行为,通常基于事件上下文检测异常威胁,并进行处理响应。SIEM 是基于规则的,在为 IT 专业人员提供寻找威胁所需的数据方面做得非常好,包括有关已经发生的事件、发生时间和地点的详细信息。但是,传统SIEM需要人工分析数据,尤其是检测异常和威胁。而UEBA 使用机器学习模型和算法执行实时分析。这些分析提高了响应安全威胁所需的速度,同时还提供了对未来可能发生事件的预测能力。SIEM 摄取结构化日志, 添加新数据类型通常需要升级现有存储方式和一定的人工干预。此外,SIEM 不会将用户及其活动的数据关联起来,也不会在应用程序、时间或用户行为模式之间建立联系。UEBA 旨在处理来自各种来源的大量数据,包括结构化和非结构化数据集。它可以分析跨应用程序和跨时间跨网络的数据关系,并深入研究同组用户或实体以找到可能有助于检测、和预防威胁的价值数据。SIEM 在帮助 IT 安全人员编译有价值的短期事件快照方面做得非常好。随着时间的推移,它在存储、查找和分析数据方面效率较低。例如,SIEM 为搜索历史数据提供了有限的选项。UEBA 需要实时查看几乎任何数据类型,包括短期和长期数据。这产生了可应用于各种用例的洞察力,例如基于风险的访问控制、内部威胁检测以及与IOT、医疗和其他设备相关的基于实体的威胁检测。最后,SIEM 集中和管理来自主机系统、应用程序以及网络和安全设备(如防火墙、防病毒过滤器等)的安全事件,存在高比例的误报告警,这些告警无法全部进行调查,这可能导致“真正”的网络威胁未被发现。UEBA 提供风险评分,它提供了对威胁的精细排名,通过对网络中所有用户和实体的风险进行排名,UEBA 使企业能够根据不同的用户和实体构成的威胁级别对不同的用户和实体应用不同的控制。从而大大消除了误报的数量。UEBA的架构和技术UEBA 是一个完整的系统,涉及到算法、工程等检测部分,以及 用户实体风险评分排序、调查等用户交互、反馈。从架构上来看, UEBA 系统包含三个层次,分别是数据中心层、算法分析层、场景应 用层。其中,算法分析层一般运行在实时流处理、近线增量处理、 离线批量处理的大数据计算平台之上。 就其算法分析而言,首先应基于用户和实体的历史行为及其属性创建行为基线以及群组特征,然后根据行为指标可以利用IF、KNN等传统机器学习算法进行异常检测,或者也可以采用深度学习技术,例如RNN、LSTM等进行异常检测,检测出异常之后,需要通过某些风险打分算法对其风险进行打分排序,提示处理的优先级。同时UEBA的完善也离不开整个访问、事件、异常、告警、通知过程中提取出的安全知识图谱的构建,使得系统可以了解完整的攻击路径和脆弱的设备资产,从而进行更好的防御与响应。最后,根据用户的反馈和真实的处理效果进行自适应的强化学习也是UEBA系统持续演进流程的必不可少的一环。下面我们通过Exabeam和CrowStrike的一个合作案例来学习UEBA如何帮助企业发现用户的内部潜在风险。Exabeam 和 CrowStrike如何基于UEBA进行威胁检测工作流程首先通过CrowStrike 客户端采集流式FDR(Falcon Data Replicator)数据,然后将流式FDR数据导入Exabeam,通过Exabeam的UEBA进行用户和实体的行为检测分析。通过以上数据UEBA可以建立用户和实体的行为基线(behavior baseline),然后刻画用户的属性分布,对威胁检测的结果进行打分,并创建时间线,进一步分析验证。案例介绍风险打分首先通过风险打分排序找到最有可能存在风险的用户或资产,比如在analytics全局页面可以看到notable user和notable assets 两个排序。风险趋势接下来我们选取其中风险得分为344的用户Howard进行初探,首先查看该用户在近一个季度中风险趋势(User Risk Trend),发现其风险打分有了明显的上升。风险原因然后通过风险原因(Risk Reasons)进一步探测为什么其风险得分上升的具体细节智能时间线最后可以通过智能时间线的方式调研该用户的异常行为被判断成异常的原因,该智能时间线可以让分析师不用花费数天或数周时间收集证据并构建事件时间表,直接使用UEBA,就可以预先构建事件的时间线标志,可以标注异常并显示事件的详细信息,以帮助分析师了解事件的全部内容及其上下文。Exabeam对每一类用户和每一种资产都根据FDR数据生成了对应的模型信息,比如Howard的某次访问就触发了Trojan.Generic(泛型木马)的威胁模型。补充说明动态组群分析用户行为模式通常基于无数属性,包括他们所属的团队,他们参与了哪些项目,他们所在的办公地点等等。因此,其行为基线不应该是静态的。exabeam的动态的用户分组可以通过机器学习将用户分配到基于他们行为所属的群体,然后将他们的活动与这些群体的活动进行比较,以识别异常的、有风险的行为。横向移动检测横向移动是攻击者在网络中使用移动的不同 IP 地址、身份信息、资产设备的一种方法。这增加了行为分析的困难性,因为往往只会集中某一部分的数据信息。而完备的UEBA必须能够从各处分析数据,将攻击内容与攻击源头联系起来。Exabeam的Advanced Analytics 专利技术可追踪不同来源的可疑活动,即使这些行为跨设备、IP 地址或身份认证。比如下图中攻击者分别冒充BARBARA和DB_ADMIN两种身份的用户进行风险行为,Exabeam通过跟踪状态的改变,将这类基于不同身份信息的访问行为都汇总到BARBARA身上。总结在Gartner peer打分中,有一位来自健康领域的用户这样评价Exabeam的Advanced Analytics ,称其为UEBA领域的Gamer Changer,主要表扬其在log4j安全漏洞公示以来,Exabeam的Advanced Analytics帮助企业升级版本的高效、自动化以及清晰流畅,并认为其价有所值。可见相较于其高昂成本,只要能做出真正对用户有价值的产品就会有用户愿意为之买单。
前言New Relic 是美国的一家软件服务供应商公司,2008年 38岁的 Lew Cirne创建了该公司。该公司提供了一套集成的可观测性平台,平台允许用户对部署在云中心或在数据中心的 NET, Java, JavaScript, Node.js, PHP, Python, and Ruby 、基础设施、端等进行运维监控。 通过该平台开发人员和运营团队监控用来故障排除和优化他们的应用程序。 Lew CirneNewRelic 发展几个重要里程碑:2008年 Lew Cirne 创立NewRlic公司2010年 APM产品被CA Technologies 以3.75亿美金收购2014年 12月12日 以NEWR作为股票代号在纽交所上市2015年 宣布拥有 1万家客户,其中包括Runkeeper,Tableau, Nike,Gawker Media, ESPN,Sony,Comcast,E*Trade,eHarmony,GitHub,Groupon,Zumba 等 营收超2016年 Gartner 评为APM市场的领导者2020年 营收达到6.36亿美元目前公司2000多人随着可观测赛道的玩家越来越多,更多的如DataDog Dynatrace 的竞争,NewRelic的营收增长目前也面临着很大的压力平台能力概览New Relic One 是newRelic 的一个全栈监控的平台。他可以将你所有的场景资产监控数据聚集到一个平台来进行分析洞察。全栈监控应用程序监控基础设施监控k8s 监控日志管理网络监控浏览器监控移动端监控链路监控serverless 监控机器学习模型性能监控可观测性体验IDE集成调试、工作流错误跟踪数据探索AIOps数据采集和洞察数据接入仪表盘告警OpenTelemetry部分功能介绍本文将主要围绕 NewRelic的 浏览器监控、告警功能、自定义App进行详细描述。1. Browser Monitor浏览器监控是大部分可观测性产品必备的功能之一。通过接入浏览器监控探针,用户可以对产品浏览器端的数据进行监控。监控包含页面响应性能指标、页面js异常数据、页面请求数据、静态资源加载数据、客户端信息、geo信息等进行采集和监控。通过这些数据,用户可以对自己关切的业务界面进行即使的故障处理以及界面优化。1.1 接入方式newRelic 提供了两种浏览器监控的接入方式探针模式探针模式是使用最多的一种接入场景。随着SPA应用的普及,只要在单一入口页面埋入探针(上图中的探针js代码),即可完成探针的接入。APM模式服务端安装脚本,自动分发探针到html页面。比较适合多页面的场景。第一种探针模式需要手动为每个页面添加,比较麻烦。apm模式只需要在web服务层的代码上加入apm client,即可完成自动分发。当然也有一些限制。比如静态页面走cdn场景或者web服务层语言框架本身不支持的一些场景。以go 语言的一个web服务为例。只需要在服务侧对http路由进行newrelic的包裹函数即可完成配置和传统的浏览器监控应用一样,newRelic 也提供了常规的一些功能1.2 报表统计 1.3 自定义api提供自定义上报用户信息,如uid标示,其他业务关联信息等 如API:setCustomAttribute提供了各种钩子函数,提供不同的时间机制进行数据的上报或者其他控制1.4 数据聚合 对路径相同,参数不同的数据进行聚合。提供了模式匹配1.5 度量规范配置 对同类的异常指标进行更好的分组。避免分组多散导致基数过高,服务性能会受到影响 1.6 上报范围管控newRelic提供了三种模式。 Lite模式,只上报页面加载的一些性能数据 Pro模式,上报所有的页面信息 Pro+SPA模式,上面所有页面信息以及单页应用路由的一些信息和一些span的链路追踪1.7 黑白名单配置等 提供了host的黑白名单配置,所在国家地区的黑白名单配置1.8 trace通过在头部设置sessionID 和 span的一内容来关联上下游链路2. Alerts&&AI 数据洞察是数据采集后的重要一环。也是数据真正价值的体现之一。而告警正是数据洞察的一个重要形式之一。在newRelic的告警体系里。包含:事件系统、决策系统、通知系统、开放告警、工作流、AI等2.1 整体架构: 2.2 工作步骤:NewRelic 提供了自定义告警 Policy 和 预制内置告警(pre-built) Policy。以及异常巡检(Anomaly detection) Policy。 系统按照 Policy设置的定时活着其他策略去扫描数据,按照不同的条件。产生异常事件。异常事件也可以开放api对接其他告警系统的事件。异常事件进入事件系统后,会转交到决策系统Decisions。决策系统会自动合并同类事件。关联相关资源(比如其他的告警事件,巡检事件等)。NewRelic 还集成了一些内置的黄金指标的AI模型供用户进行打标。用户可以在incident里对此次资源关联进行打标,模型会自动优化。 newRelic提供了默认的决策逻辑,当然也提供了一些自定义的决策逻辑。供用户来按照一些属性对不同的事件关联。decision设置的越好,告警的降噪关联效果也会越好。 决策系统最终会将多个事件 按照决策规则聚合成Incident,以及将多个incident生成工作流中issues,供工作流中的值班人员全局查看评估。NewRelic告警里有一个全局配置的静默策略(Muting rule)。静默策略可以设置全局匹配的属性条件。当incident 符合静默策略的条件。将进行静默操作 如果一个incident不在静默策略范围中,将继续向上进入通知渠道。通知到Policy里设置的渠道,例如邮件、slack、pageDuty、webhook,同一个NR账号体系下的users等。newRelic 的issue是决策系统将 incident聚合后产生的一个问题。用户可以在界面上通过issue 查看所有incident以及incent的关联逻辑。还以通过工作流对issue进行定期的汇总和通知到工作流平台中。比如webhook 、jira,slack,等 Issue 面板包含了聚合的incident信息的展示,通知渠道的展示,source的展示,Root cause 的分析,以及issue time-line的信息 用户可以对告警Policy设置RunBook。RunBook 可以在告警触发的时候提供可执行回调进行自动化的问题处理逻辑。或者提供处理该类问题的文档链接,供运维人员进行查看,提高效率 3. 自定义APP在newRelic里提供了一个自定义app的UI定制功能。传统的运维产品模式下,用户只能依赖平台提供的可视化仪表盘来构建一些大盘视图。对于定制化要求高的客户来说,如何打通自己需求以及平台限制显得特别重要。往往大客户都有自建的统一风格的运维平台,可观测性产品对于大客户来说更多的是运维平台的一环。他们不希望通过多个不一样的界面来完成运维。newRelic里提供了一个cli工具,让用户可以像编写小程序一样,自定义自己的应用。平台提供了cli工具搭建应用框架,sdk调用平台开放数据。component 提供平台对外暴露的一些组件。用户通过这些组合自由定制自己场景需要的视图。自定义app提供了远程调试,发布,上传等功能。newRelic还提供了一个类似app中心的生态,你可以安装别人开放的app到你的应用下。3.1 自定义app的开发流程:1.Cli工具安装2.编写代码3.调试(在线/本地)4.发布app自定义APP基于react框架编写,客户需要做的就是完整render函数组件的定制开发 编写react 组件:通过nr提供的ui组件和数据组件进行开发:界面效果:更多的开发细节可以参考官方文档进行探索。最后正如第二章节提到,newRelic还有很多有意思的功能,后续会继续探索。newRelic 提供了一个免费的100G/月的版本使用。当然会有一些功能限制。因为newRelic的数据中心主要是在国外。国内使用部分功能会有异常,包括ui的加载延迟也会比较高。在阿里云日志服务产品中,目前也集成了 RUM功能模块,以及功能丰富的 告警功能 感兴趣可以使用。
为什么是 RUMRUM的英文全称是 Real User Monitoring,根据RUM英文名称我们可以知道,RUM的作用就是捕获和分析用户与网站的所有交互细节,旨在提高网站的可用性、提升用户体验。提升网站体验的方式非常多,可以优化数据库、优化接口调用,那为什么要 RUM 呢?其实主要还是 RUM 更直接,更直接的反应了用户是如何和你的网站交互的,更能反应用户和网站的交互细节、用户的满意度,提供更多真实的用户行为数据。近几年涌现了许多非常优秀的 RUM 产品,列举部分如下:Datadog Real User MonitoringNew Relic browser monitoringSentry腾讯云 RUMDynatrace Real User MonitoringArms 前端监控SLS RUM 公测中本文主要总结性的介绍各个产品浏览器端 RUM 的功能以及特点。RUM 主要功能RUM 产品已经市场上已经有很多,功能虽然在不断丰富,但是各个产品的功能也在逐渐同化。大部分产品包含功能如下:数据接入。支持以script的形式或者npm包的形式安装能够在浏览器运行的 agent,用于采集数据,支持自定义的功能配置。错误诊断。支持浏览器环境的问题诊断,包括支持诊断 JS 运行时错误、诊断 AJAX 请求错误、诊断资源访问错误等。访问行为统计及自定义统计。支持各种指标统计,例如网站的 PV/UV、浏览器和用户地域信息、不同页面的访问信息等。性能诊断。支持各种关键路径的性能数据上报,包括白屏时间、资源加载时间、请求时间等,支撑用户根据指标数据优化性能。会话追踪和Session Replay。展示会话的详细信息,Session Replay 能够以视频的形式回放用户真实的使用行为。链路追踪。与后端请求链路打通,支持前后端一体化分析闭环。数据接入JS 探针模式在浏览器端一般是以js agent探针的形式,让用户插入一段 js script 或者引用 npm 包中的初始化函数。我们以datadog为例,用户可以在界面填写相关的参数,修改后会生成相应的 js 代码。也支持用户切换不同的接入方式,支持 CDN Async、CDS Sync 和 NPM 包的形式。数据接入和 JS 框架大部分产品对于 JS 框架的支持都是使用统一的支持方式,没有区别对待。其中 Sentry 是对不同的前端 JS 框架做了区分的,甚至不同的框架有不同的npm包。Sentry 这么做的目的也是为了 适配框架层面提供的错误捕获的方式,例如对于React,Sentry 支持 React Error Boundary。服务端安装模式与一般的直接在HTML页面中插入 js script 不同,New Relic 支持在服务端层安装插件直接为所有页面自动加入探针,避免了需要手动为每个页面添加探针的复杂操作,支持 Java、Go 等多种服务端语言及相应框架。错误诊断错误诊断在浏览器中一般只是指 JS 运行时错误、 AJAX 请求错误、资源访问错误等。我们以 Sentry 的 JS 运行时错误为例。window.onerror上报在浏览器中运行时错误会触发window.onerror函数,Sentry对window.onerror函数进行了改写,使用TraceKit处理error对象。var _oldOnerror = _window[_onerror];_window[_onerror] = function(message, source, lineno, colno, exception) { // Use keys as "data type" to save some characters" queue({ e: [].slice.call(arguments) }); if (_oldOnerror) _oldOnerror.apply(_window, arguments);};window.unhandledrejection上报未catch的Promise错误不会触发window.onerror函数,而是会触发window.onunhandledrejection,下面是Sentry改写了onunhandledrejection函数。var _oldOnunhandledrejection = _window[_onunhandledrejection];_window[_onunhandledrejection] = function(e) { queue({ p: 'reason' in e ? e.reason : 'detail' in e && 'reason' in e.detail ? e.detail.reason : e }); if (_oldOnunhandledrejection) _oldOnunhandledrejection.apply(_window, arguments);};对前端框架的错误上报支持支持React的ErrorBoundaryclass App extends React.Component { render() { return ( <Sentry.ErrorBoundary fallback={FallbackComponent} showDialog> <OtherComponents /> </Sentry.ErrorBoundary> ) }}支持Vue.config.errorHandlerimport Vue from 'vue'import * as Sentry from '@sentry/vue'Sentry.init({ Vue: Vue, dsn: '__PUBLIC_DSN__',})自定义上报错误import * as Sentry from "@sentry/browser";try { aFunctionThatMightFail();} catch (err) { Sentry.captureException(err);}错误栈展示错误管理Sentry使用issue面板来管理错误,这是也是Sentry相比其他 RUM 产品的特色 (其他产品一般只会上报错误, 不支持对错误的生命周期管理)。在issue面板中可以管理整个issue的生命周期,也支持配置对接外部的管理平台(例如Jira),Sentry支持数十种外部系统的对接。对issue管理基本的操作有查询、Resolve、Review、Merge、Ignore等,基本能够满足对issue的追踪解决。访问行为统计一般 RUM 产品都会带一些指标的统计 比如 PV/UV、浏览器和操作系统信息等。下面是 Datadog RUM 的首页大盘,主要体现了一些性能相关指标、页面切换次数、地理信息等。在页面顶端,用户能够根据多种条件筛选数据。除了 RUM 系统自带的统计行为,RUM 还会支持自定义的数据统计。一种是支持对所有上报的数据打 Tag,一种是支持上报自定义的数据内容。例如已经公测的 SLS RUM 支持初始化时定义 custom 字段,支持嵌套 JSON 格式的 value 并且支持自定义解析。配置方式如下:SLS_RUM.init({ // 其他配置 custom: { d: 'e', },})SLS RUM 也支持纯自定义上报,通过 SLS_RUM.addLog() 接口可以上报自定义事件,addLog 接受一个JSON格式的参数,支持嵌套JSON格式。上报的数据支持使用 SLS SQL 进行查询。SLS_RUM.addLog() 调用方式如下: SLS_RUM.addLog({ a: 'b', c: 'd', d: 'e' })性能诊断关键指标分析浏览器端性能诊断的指标主要包括:页面加载阶段性能指标:LODA、FCP、LCP、FID、CLS 等网络请求指标(包括 api、css、js、media等):dns、tcp、ssl、redirect、ttfb、trans 等AJAX 接口请求延迟所有 RUM 产品都会采集以上指标并提供用户相关的性能大盘。例如 SLS RUM 提供关键指标的分时曲线:以及各种不同资源加载的分时曲线:火焰图功能分析性能问题具体定位到某一次页面加载的时,火焰图是非常有用的功能。下图是 SLS RUM 提供的火焰图功能,能够一目了然的看到前端大部分重要性能指标的时间。其中 New Relic 的火焰图的最详细的,提供了部分 Chrome Performance 的功能,提供的数据也比较丰富。会话追踪和 Session Replay会话追踪是指以一定的结构组织展示用户的数据,不同的产品一般有两种处理方法,一种是以浏览器网页的一次加载过程作为一个会话,另一种是以一定时间内的数据都作为一次会话。Session Replay 在会话的基础上,能够以视频的形式回放用户在某个会话的所做的所有操作。Session Replay 最重要的作用就是能够辅助上述所说的错误诊断、访问行为统计、性能诊断等。下面以 datadog 的 Session Replay 为例:针对会话回放用户页面数据的隐私选项,SDK提供3中方式的配置:mask-user-input、mask、allow,对比如下链路追踪随着现代前后端项目变得越来越复杂,排查问题的时候如果仅限于浏览器端或者后端是很难进行的。浏览器作为请求的发起方,如果能够和后端请求联合形成闭环对于排查问题是非常有帮助的。许多 RUM 产品已经都有了链路追踪的功能,下面以 SLS RUM 为例:SLS RUM 支持提供基于原生 OpenTelemetry 协议的分布式链路追踪功能,与 SLS Trace 后端链路能够打通,一起提供前后端一体化链路追踪功能。最后,SLS RUM 公测啦SLS RUM 当前支持浏览器监控,未来还会支持小程序、移动端IOS&Android。支持上述的所有功能:错误诊断。访问行为统计及自定义统计。性能诊断。会话追踪和Session Replay。链路追踪。另外还支持有强大的自定义告警、自定义仪表盘等,欢迎使用。相关链接SLS RUM 官方文档:https://help.aliyun.com/document_detail/416956.html
前言近些年在开源领域,用于构建日志系统的软件有两类典型:Elasticsearch:基于 Lucene 构建倒排索引提供搜索功能,DocValue 存储支持了其统计分析能力。Clickhouse:列式存储是其优秀 OLAP 性能的保障。这里把上述系统归入 schema-on-write 系列。百花齐放,本文介绍三款 "schema-on-read" 类型日志系统。为什么是打了引号的 schema-on-read?尽管几家厂商对外宣传关键词常常用到 index-free、schema-less,但从技术角度应该理解为一种轻量级索引技术,将大部分计算成本后置到使用时发生。它们的出现有其背景:技术能力:硬件技术快速发展,云计算 IaaS 资源(计算、存储、网络)已足够便宜、弹性。客户诉求:近两年市场紧缩,企业的 IT 预算更加精细。场景固化:相当比例的日志使用场景具有写多读少、随时间变长热度降低特性。Humio简介Humio 是 2016 年成立的一家英国公司,2021 年 3 月被 CrowdStrike 收购($352 million 现金加 $40 million 股票期权)。产品提供日志的搜索、统计、仪表盘、告警服务。数据路径Humio 用 Kafka 充当数据 buffer,落盘数据到内置存储供查询分析。可以开启投递到 S3。由于轻索引方案延迟表现不满足告警、仪表盘场景,但大部分时候它们的 query 模式固定,且按时间顺序进行。Humio 的方案是流计算,在数据摄入的 pipeline 中计算告警和图表:只处理实时数据。数据不需要排序。数据都在内存中更新。存储内置存储主要服务的是日志搜索、分析场景,数据的压缩、索引对于后续的计算性能有决定性影响。Humio 将数据按照 bucket 排列,在 bucket 上做好一些标签,标签内容包括:数据的时间区间。数据的来源、类型。基于数据 key-value 的 bloom filter(增加 4% 存储以支持随机关键词)。bucket 标签实际是一种粗粒度的索引,区别于以往对单条日志的细粒度索引。query engine 在计算时根据标签信息判断数据是否可能在 bucket 内,只读取相关的 bucket 数据。计算Humio 语法是管道式 SPL:#host=github #parser=json| repo.name=docker/*| groupBy(repo.name, function=count())| sort()对应的执行计划:读数据、标签过滤、扫描过滤、聚合计算、结果写出。暴力搜索通过分布式 mapper 可以加速,就单实例而言其加速策略如下图:ChaosSearch简介ChaosSearch 2016 年成立,2020 年 11 月 B 轮融资(估值 $40 million)。在 2021 年,员工增加一倍(50~99 之间),收入 YoY 611% 增长。ChaosSearch 提供多租户的 SaaS,面向日志和 BI 分析场景,主要是 Elasticsearch 兼容市场。索引对象存储上的数据,支持搜索、SQL、ML 计算。ChaosSearch 对于数据源的要求最为宽泛(放在对象存储即可),以 Data Lake Engine 来宣传。目前支持 AWS、GCP,计划今年加入 Azure 支持。数据路径使用过程如下:存入日志(通过 Logstash/Fluentd/Vector 等软件直接上传到 S3)。ChaosSearch 配置连接串,执行索引过程(支持周期性,实时两种模式)。通过 ChaosRefinery 创建数据视图。通过 API 或第三方可视化工具查询分析视图数据。对象存储上的日志有以下要求:支持三类数据:csv、log files(近 40 种流行格式)、json(BI 分析友好)。文件大小建议为 10MB gzip 或 50~500 MB 原文。超大文件不利于并发度提升且消耗更大索引内存;过小的文件则会导致查询性能降低(依赖 compaction),同时大量文件会导致索引问题(实时索引依赖消息通知,而 AWS SQS 等系统存在系统限制)。partition 机制有助于提升查询性能,可以在索引阶段将业务字段值设置为 partition 的一部分,建议一个object group 不超过一万 partition。索引阶段读取 S3 文件,异步建立索引,将索引数据存储到用户的 S3 上作为 metadata。存储ChaosSearch 支持自动 schema 探测(可枚举的格式)或主动字段抽取(正则),生成的索引数据称为 ChaosIndex。按照文档举例,其索引膨胀量在 5-10% 左右。Elasticsearch/Lucene 处理 1 PB 数据(压缩后)产生 5 PB 索引量,对应的 ChaosSearch 索引量在 250 TB 左右。其索引算法效果描述亮眼,但缺少进一步资料确认,引述文档内容如下:In the case of Chaos Index, it provides compression ratios upward or greater than Gzip, with the speed of Google’s Snappy compression algorithm. Up to 95% compression at high performance.Text-based queries are up to 10x faster to index and up to 2x faster to search when compared to Lucene.Analytic queries are up to 5x faster to index and up to 2x faster to query when compared to column stores.计算计算的一种场景是 ELT(Chaos Refinery),将原始数据做一些简单处理形成视图:最终的场景是为了搜索、分析,数据存储在 S3,对应的算力由同区域 EC2 提供。算力弹性、query plan 优化、索引优化是体验的三个重要因素。查询结果限制最多返回 500 条(这一点和 Loki 也一样,应该是性能上的保护考虑)。用户通过 Kibana 来完成查询页、分析图表、仪表盘和告警。提供三种 API 形态:ChaosSearch API、S3 Rest API、Elasticsearch 兼容 API。费用作为 SaaS 服务,其计费模式非常简单:按照写入流量计算,$0.8/GB(不限 query 数)。用户的另一部分费用是存储,直接交给云厂商,包括日志原文以及 ChaosSearch 生成的索引数据。这种计费模型有一定好处,一次性付费后,查询起来没有心理负担。厂商在超卖之后如何兑现算力是另一个话题:用户开启 burst 模式申请更多计算资源。Opstrace简介Opstrace 在日志查询、分析上的深入程度比起 Humio、ChaosSearch 有差距,单列出来实为突出 Grafana 生态。Opstrace 成立于 2019 年初,2021 年底被 GitLab 收购(是其上市以后的首次收购)。Opstrace 的关键词是开源(Datadog/Splunk/SignalFx 替代品),一套自动化编排流程帮助用户实现可观测平台。Opstrace 目前支持 AWS、GCP 部署,计划扩展至 Azure(好像 Azure 总是被排在后面,跟市占率不太匹配)。编排Opstrace 提供 SaaS 能力,有独立的数据写入、读取 API,无论是 log 或 metric 都存储到 S3。套件的主要部分是:监控:Prometheus API。日志:Loki API。采集:目前覆盖到开源(以 Prometheus、Fluentd、Promtail 作为客户端),未来计划扩展至 Datadog。当创建出 Opstrace 实例后,编排实现了云资源的准备(VPC、S3、EKS、ELB、Route53、EC2 等)、软件的部署(Prometheus、Loki 等)。底层组件(Loki 部分)Loki 是 Grafana 公司开源的一款日志分析软件,主要思想是用“Label Index + 暴力搜索”来解决问题。和 Elasticsearch 形成明显的差异:写多读多,强 Schema 日志模型能实现可预期的低计算延时。写多读少,非全文索引模式将成本大幅缩减并后置到查询时产生。Loki 的文档和代码资料都很多,这里只作简单介绍。数据存储:Index:Label 索引定义为 meta 字段索引,要求 cardinality 小(否则会索引爆炸,实测出现系统不可写入情况),例如在 K8s 场景 namespace、container、host、filepath 作为 Label 来搜索是非常合适的。Chunk:日志正文,行存格式,一组日志排列在一起,每条日志只包括 Timestamp 和 Line 两个字段。Index 存储:历史上写过 NoSQL,就目前情况来看未来都会用 S3(用 boltdb 来写索引文件,定时 flush)。Chunk 存储:一直建议用 S3 这样的对象存储。架构上多个角色分工明确,可以独立扩容:Distributor:接受数据写入,根据协调服务内容转发数据给 Ingester。Ingester:处理数据写入,负责 Chunk 构建,flush 数据到远端存储。响应赖在 Querier 的查询请求(内存未 flush 部分)。Query Frontend:查询请求处理的第一站,负责简单的 query 改写,大 query 切分与分派,cache 处理。Querier:查询请求的 mapper 节点,负责 query 解析、执行,数据拉取,结果合并。Ruler:调度器,用于预计算。L abel 索引方案在做大规模 metric 计算时可能延时较高,部分场景下可救急。Loki 的语法是 LogQL:查询:体验优秀,管道式,很顺畅。实测下来性能也不错(例如 600 byte 原文中搜索 32 byte 内容,单核处理 3GB/s),但有 5000 条结果上限(没找到翻页机制)。分析:语法从 Prometheus 继承而来,不好记,并且明显的时序结果导向在分析场景下显得片面了(SQL 已成为标准)。举一个例子:大括号里面的部分是 Label 匹配,其后的计算都是扫描部分。{container="query-frontend",namespace="loki-dev"} |= "metrics.go" | logfmt | duration > 10s and throughput_mb < 500Loki 存储格式是行存,统计分析很难做出高效率。查询的效率取决于 Label Index,因此其依赖一种 K-V 读写的存储,通过一套编码机制来细化数据读取范围。v11 编码机制如下:用途HashValueRangeValueValue查找有哪些日志线(用 label hash 区分)metricName -> seriesIdfmt.Sprintf("%02d:%s:%s", shard, bucket.hashKey, metricName)encodeRangeKey(seriesRangeKeyV1, seriesID, nil, nil)empty根据 label 名查找有哪些候选的取值(用于下拉提示)labelName -> hash(value):seriesIDfmt.Sprintf("%02d:%s:%s:%s", shard, bucket.hashKey, metricName, labelName)encodeRangeKey(labelSeriesRangeKeyV1, sha256bytes(labelValue), seriesID, nil)labelValue根据日志线,查找有哪些可用的 label 名(用于下拉提示)seriesId -> labelNamesseriesIDencodeRangeKey(labelNamesRangeKeyV1, nil, nil, nil)labelNames根据日志线,查找 chunk 存储位置(用于拉取命中的 chunk)seriesID -> chunkIDfmt.Sprintf("%s:%s", bucket.hashKey, seriesID)encodeRangeKey(chunkTimeRangeKeyV3, encodedThroughBytes, nil, []byte(chunkID))empty在不考虑严重数据时间乱序情况且 label cardinality(万以下)可控时,索引膨胀比在 千分之一到百分之一之间,S3 单价便宜,另外可以和 Grafana metric 生态形成体验的融合。这可能就是 Opstrace 选择 Loki 的原因。参考https://www.humio.com/blog/https://library.humio.com/stable/docs/index.htmlhttps://www.youtube.com/watch?v=NF-IDXelm4I&list=PLrhuCswD2Pa0hpPs3XhD_ORmvAiCjiyiX&index=7&t=13shttps://www.chaossearch.io/bloghttps://docs.chaossearch.io/docshttps://opstrace.com/blog/why-cortex-lokihttps://opstrace.com/docshttps://grafana.com/docs/loki/latest/绝大部分图片摘自几款产品的文档或博客。
背景阿里云日志服务(SLS)支持将日志或查询分析结果下载到本地,并提供了控制台、Cloud Shell、SLS CLI以及SLS SDK四种下载方式下载日志。控制台下载的方式无需用户进行额外的配置或部署,只需一些简单的控制台操作便可完成下载,相较于另外三种方式更加便捷、易用,也更受大部分用户的青睐。在本次功能升级前,控制台一次最多只能下载100条日志,更大量的日志下载场景只能选择其他三种方式。控制台下载的易用性使其成为大部分用户下载日志的首选,然而100条日志的单次下载限制又让大部分用户不得不选择其他的下载方式。基于以上问题,本次发布对控制台下载功能进行了升级,期望控制台下载的方式可以满足绝大部分用户的日志下载需求。下载方式对比日志服务目前提供控制台、Cloud Shell、SLS CLI以及SLS SDK这四种方式下载日志。这四种方式的对比如下控制台下载CloudShell下载SLS CLI下载SLS SDK下载最大下载量查询:20 GB分析:2 GB100万条无数量限制无数量限制部署无自动部署需手工安装CLI手工部署密钥无自动配置需要手动配置需要手动配置局域网下载(不产生公网流量费用)无仅支持上海地域支持(需要部署在对应地域的ECS上)支持(需要部署在对应地域的ECS上)NAS集成无自动手动配置手动配置注:Cloud Shell、SLS CLI或SDK下载方式无数量限制,但可能由于网络等不确定因素,出现下载中断问题。通过控制台下载日志服务支持通过控制台直接将日志或查询分析结果下载到本地,两者的下载操作类似。如果您要下载查询分析结果,可在执行查询分析操作后,在统计图表页签中,单击下载日志。1. 直接下载日志登陆日志服务控制台,在Project列表区域,单击目标Project进入。进入目标Project之后,在日志存储 > 日志库页签中,单击目标Logstore进入。在原始日志页签中,点击下载logo,并选择下载日志。在弹出的日志下载对话框中,完成如下配置,然后单击确认 其中各个配置项的说明如下参数说明参数类型时间范围下载日志的时间范围自动填充查询语句直接下载日志时,查询语句为空;下载查询分析结果时,展示对应的查询分析语句。自动填充任务名下载任务的名称选填,不填时系统会给一个随机的名称日志数量展示当前下载的日志数量自动填充数据格式支持CSV格式和JSON格式。采用CSV格式时,文件中的列名将根据前100条日志的字段生成。如果后续日志存在新的字段,则所有新的字段将以JSON格式存放在CSV文件的最后一列(列名为空)。采用JSON格式时,单条日志的内容会转换为JSON格式,然后以单行形式写入文件。必填,默认CSV压缩方式支持gzip、lz4、zstd等压缩方式,也支持不压缩。当下载的日志数量比较多时,强烈建议采用压缩方式,可显著降低下载量,减少文件的下载时间。必填,默认gzip排序规则日志的排序规则,按时间升序还是降序排列。必填,默认按时间升序排列quote字符使用单引号还是双引号作为quote必填,默认使用双引号作为quote是否下载不精确的结果下载查询分析结果时,如果查询分析结果不精确,是否继续下载。必填,默认否完成上述配置后,单击确认,系统将弹出日志导出历史对话框,展示直接下载的任务列表。等待任务状态为任务成功后,您可以单击下载,下载日志到本地。您后续也可以在原始日志页签中,点击下载logo,并选择日志导出历史,打开日志导出历史对话框(目前控制台支持保存最近1天内的导出记录,超过1天的导出记录被自动清除)。2. 下载查询分析结果日志服务除了支持通过控制台直接将日志下载到本地外,也支持下载查询分析结果。两者的下载操作类似。如果您要下载查询分析结果,可在执行查询分析操作后,在返回结果的统计图表页签中,单击下载日志。后续的配置以及下载步骤与直接下载日志的完全一致,可参考上一节的内容。3. 限制说明下面列出了控制台下载功能的一些使用限制以及注意事项:单次最多下载100万条日志。超出时,仅下载前100万条,如果需要下载全量日志,可缩小查询的时间范围,分多次下载。单次最多下载10万行分析结果。超出时,仅下载前10万条,如果需要下载全量的分析结果,可缩小查询的时间范围,分多次下载。单个阿里云账号最多支持3个并发下载操作(总下载次数无限制)。超出3个并发下载操作或多个RAM账号同时操作时,可能报错,此时您可等待其他操作完成后,再重试。支持保存最近1天内的导出记录,超过1天的导出记录被自动清除。在遇到网络错误或者查询不精确时,系统会自动重试下载任务。如果重试3次后,仍无法完成下载,则下载任务为失败状态。其他下载方式1. 通过Cloud Shell下载您也可以通过Cloud Shell下载日志。更多信息,请参见使用Cloud Shell下载日志数据。注意:目前Cloud Shell位于上海地域,如果当前Logstore不在上海地域,下载日志会产生一定的公网流量费用。价格详情请参见产品定价。2. 通过SLS CLI下载当您需要下载更大数量的日志时,可通过SLS的命令行工具下载。 更多信息,请参见使用日志服务CLI。注意:通过命令行工具下载日志时,需替换命令中的AK信息。请登录用户信息管理控制台获取阿里云账号AK。如果使用RAM用户进行下载,请登录RAM 控制台创建RAM用户并用RAM用户的AK信息。如果用于安装命令行工具的机器的所在地域与当前Project所在地域相同,建议切换为内网endpoint,下载速度更快且不会产生额外的外网带宽费用。3. 通过SLS SDK下载当您需要下载更大数量的日志时,可通过SDK下载。 更多信息,请参见SDK参考概述。结语下面是 SLS 团队的技术博客,我们会不定期推出技术文章分享和产品更新介绍,欢迎大家订阅,有任何问题也欢迎与我们反馈。
2022年11月
2022年10月
2022年08月
2022年07月