聊点技术 | 全新功能,让Bonree ONE变得更强

2023-05-05

4月21日,博睿数据ONE有引力2023春季产品发布会圆满落幕,Bonree ONE 2023春季正式版正式发布,带来更轻、更强、更智能的一体化智能可观测平台。image

全新功能,让Bonree ONE变得更强


本文作者

产品经理高天明、产品经理吴学飞、产品经理袁泽玺、产品经理张宇

全文共2676字,阅读大约需15分钟。


20w+超大规模探针采集

痛点难点

1.机房多,不同的区域网络隔离,探针上报数据联通配置复杂?

2.服务动态扩缩容时,探针随进程停止而消亡,缓存数据无法上报? 

3.流量峰值后端处理压力大?

2


方案简述

ONE平台采用探针三层架构的方式,将Bonree Agent和SmartGate根据网络区域ID划分上报路径。Bonree Agent和SmartGate同一网络区域内相互可见,Bonree Agent根据链路负载策略选择最佳上报路径,平衡流量负载。

3(2)

用户价值

解决数据联通问题:部署Bonree Agent、SmartGate、配置简单,通过配置一个网络区域ID轻松搞定。

4

流量削峰、数据缓存,防止数据丢失:默认缓存650MB数据,可配置缓存数据大小,自动滚动清除历史数据。

SmartGate转发能力强,资源消耗低:单机4CPU、8GB配置下,SmartGate最大接入支持4.1K个探针,资源消耗CPU:40%左右,内存消耗220MB。


低代码流式数据集成

产品概述

让复杂的数据集成在几分钟内通过可视化配置完成。

仅需 2 步,即建立数据接入平台和Bonree间的连接,就可以快速构建数据流拓扑。且支持在数据流实时同步过程中按业务需求对数据模型和内容进行复杂转换和处理。

5

简单、直观、强大的数据集成

如此简单

Bonree针对国内外主流数据服务提供商及云平台提供了开箱即用的特色数据接入解决方案。选配数据源,数据直达监控平台。

6

如此直观

低代码式数据流配置让您直观看到数据的处理流,无需埋头分析冷冰冰的代码。

7

如此强大

强大的数据处理组件,无论是结构/半结构/异构数据的各种数据结构数据,在OneIntegration面前统统不在话下。

8

通过实体及关系提取,补充数据视角,规范数据体系。


200+技术组件轻松接入

方案简述

ONE平台采用SmartGate采集技术组件(中间件)的业务指标,支持自集成Exporter直接的部署,以及对接外部部署的Prometheus Exporter。覆盖Prometheus已有的所有技术组件监控对象类型。

贺安辉-ONE2023春季正式版发布

用户价值

开箱即用:内置Redis、Redis Cluster、Kafka、MySQL、Tomcat、ES、Druid、Nginx、Zookeeper等9种技术组件的最佳实践仪表盘,方便用户快速巡检对比。也支持用户根据仪表盘自行搭建仪表盘,方便用户个性化需求。

10

200+技术组件监控轻松接入:配置接入方式统一,内置技术组件和自定义组件接入步骤一致,在配置界面三步即可完成接入。

11


业务分析洞察业务和技术关联

方案简述

业务事件是ONE平台业务分析的最小业务单元,在客户的业务体系中每个业务事件都负责完成一种特定的业务目标(比如:登录、查询用户信息、提交订单等)。客户可在ONE平台配置业务事件采集规则,ONE探针(Bonreeagent、客户端SDK)将会根据用户配置规则自动采集业务事件并上报,包括:事件关键业务参数、事件关联业务上下文等;已上报数据待系统自动进行事件注册及指标聚合后即可在业务分析模块及平台其它通用功能(如:仪表盘、告警等)中消费使用。

业务事件采用标准cloudevent格式,支持数据集成;如客户存在系统中关键业务参数加密不支持采集或客户存在其它来源业务数据等情况,可通过自定义上报的形式向业务分析模块集成数据后使用平台业务分析能力。

用户价值

业务事件分析:业务事件分析提供业务表现和系统质量两种视角,客户可直观感受对应业务的真实表现及业务关联运维实体的质量表现,同时提供数据对比视图及数据关联追踪能力,让客户能深入分析业务异常是否与系统质量相关,如相关可继续追踪关键记录以确认根因进行优化修复。

事件业务表现

12

事件系统质量

13-1683343500853

对比追踪

14

业务线概览:ONE平台提供业务线概念供用户进行业务事件管理,客户可以根据组织内的职责划分将各个业务事件划分到不同业务线下,并为业务线添加概览仪表盘,以对整个业务线的业务相关情况进行关注。

15

业务流程分析:ONE业务分析模块支持客户按自己的实际业务路径将业务事件组合定义为一个个业务流程,系统将自动根据业务事件上报数据为客户提供对应业务流转化、用户体验、业务事件表现相关的分析内容,帮助客户快速发现业务流程中的瓶颈节点并协助用户判断瓶颈的出现是否与用户体验相关。

16

业务全局视图:业务全局视图是ONE平台业务分析模块根据用户已定义的业务流程及对应业务事件数据自动组织形成的业务流转相关的全局视图,此视图可以帮助客户了解自己业务体系的业务总体流转情况及各流程直接的依赖情况,并给出用户已存在的业务事件、业务线、业务流表现相关的见解。

全局视图

17

业务见解

图片

日志分析构建“真正”全链路可观测场景

产品概述

解决用户日志管理中的烦恼,专注挖掘日志中的业务价值。

简单、强大、实惠的日志分析

如此简单

平台支持Bonree Agent采集日志,无需配置,自动发现重要日志路径。对于未检测到的路径,支持自定义数据源,极大地降低采集门槛。

19

如此强大

支持实时查看所有接入的日志:LIVETAIL模式支持实时查看所有接入的日志数据,即使我们并没有存储它。在排查问题时,可实现多主机下的grep查询。

20

指标数据基于全量日志生成,但是日志并不需要全量存储:平台支持基于全量接入的数据进行指标分析,可以基于全量的日志生成指标,以便分析日志的趋势。

21

字段提取自动灵活:GROK自动生成解析规则,支持灵活的字段识别与标准属性,对于复杂系统中多KEY同义字段可以实现串联。

22

如此实惠

大容量的日志数据,支持实时查看全量数据,在保证整体可见度的情况,仅存储部分日志,降低存储成本。

23

操作分析洞察用户体验

什么是用户体验

数字业务是通过用户和应用之间的交互来进行的。用户操作,应用执行其业务逻辑,最终反馈用户,如此往复。用户体验就是衡量这个过程的顺畅程度,要衡量用户体验,必须将用户操作和应用的代码执行、反馈关联起来。

24

行为和性能数据割裂

1.行为分析厂商只采集了用户行为数据,但在用户操作之后,应用具体是如何反馈的,执行了哪些代码是无法知道的,也就无法度量应用质量和用户体验。

2.传统的客户端应用性能厂商虽然采集了用户行为和应用反馈数据,但没有将二者关联,也就无法度量应用质量对用户体验的影响。

我们的方案

代码级准确关联用户操作及之后应用执行的方法。如:是否执行了发送请求的方法?是否执行了json解析?是否有奔溃卡顿等可能影响用户体验的方法?

25

热点方法定位性能瓶颈

痛点难点

1.按条排查缓慢调用链,效率低,单条调用链定位到的缓慢方法不具备问题的共性解释?

2.非埋点方法怎么定位执行缓慢的问题?

方案简述

ONE平台采用采集调用链的同时,采集服务的堆栈快照。聚合堆栈快照,分析栈顶方法的贡献占比(栈顶方法出现的次数)。通过贡献占比TOP即可分析非埋点方法的执行情况,定位服务缓慢的具体方法。

29

用户价值

资源消耗低:对比传统的代码性能分析工具,性能损耗只占0.1~1.2%左右。

步骤简单:无需手动部署性能分析工具,配置调试,开启调用链采集即可。

及时性高:实时聚合堆栈信息,可分析任意一段时间内的服务性能问题。

性能瓶颈分析:通过ONE平台内置的方法分类规则,可按磁盘IO、网络IO、Lock等待、Waiting等待、业务代码执行查看服务运行占比高的功能分类,从而分析服务性能瓶颈。

27


文章标签

智能运维 一体化智能可观测

相关文章

FreeMarker template error (DEBUG mode; use RETHROW in production!): The string doesn't match the expected date/time/date-time format. The string to parse was: "2024年3月5日". The expected format was: "MMM d, y". The nested reason given follows: Unparseable date: "2024年3月5日" ---- FTL stack trace ("~" means nesting-related): - Failed at: #if "2024年3月5日"?date lt item.createTi... [in template "themes/halo_quickstarter/post_newsDetail.ftl" at line 106, column 25] ---- Java stack trace (for programmers): ---- freemarker.core._TemplateModelException: [... Exception message was already printed; see it above ...] at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:220) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDateModel(BuiltInsForMultipleTypes.java:190) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.getAsDate(BuiltInsForMultipleTypes.java:197) at freemarker.core.EvalUtil.modelToDate(EvalUtil.java:86) at freemarker.core.EvalUtil.compare(EvalUtil.java:270) at freemarker.core.EvalUtil.compare(EvalUtil.java:115) at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:78) at freemarker.core.IfBlock.accept(IfBlock.java:49) at freemarker.core.Environment.visit(Environment.java:370) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at freemarker.core.Environment.visitIteratorBlock(Environment.java:644) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:334) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.visit(Environment.java:340) at freemarker.core.Environment.process(Environment.java:313) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:230) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.UserInfoFilter.doFilter(UserInfoFilter.java:37) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.AssertionThreadLocalFilter.doFilter(AssertionThreadLocalFilter.java:54) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.jasig.cas.client.util.HttpServletRequestWrapperFilter.doFilter(HttpServletRequestWrapperFilter.java:75) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAbstractTicketValidationFilter.doFilter(MyAbstractTicketValidationFilter.java:215) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.cas.MyAuthenticationNoLoginFilter.doFilter(MyAuthenticationNoLoginFilter.java:57) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.security.filter.ContentFilter.doAuthenticate(ContentFilter.java:69) at run.halo.app.security.filter.AbstractAuthenticationFilter.doFilterInternal(AbstractAuthenticationFilter.java:229) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.CorsFilter.doFilter(CorsFilter.java:53) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at run.halo.app.filter.LogFilter.doFilterInternal(LogFilter.java:40) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: freemarker.core.UnparsableValueException: Unparseable date: "2024年3月5日" at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:51) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:33) at freemarker.core.BuiltInsForMultipleTypes$dateBI$DateParser.parse(BuiltInsForMultipleTypes.java:213) ... 118 more Caused by: java.text.ParseException: Unparseable date: "2024年3月5日" at java.base/java.text.DateFormat.parse(DateFormat.java:395) at freemarker.core.JavaTemplateDateFormat.parse(JavaTemplateDateFormat.java:49) ... 120 more