博睿数据智能监测终端全面升级,边缘计算能力强大、用户体验数据真实性高

2022-08-05

长久以来,传统PC互联网的应用通过嵌入SDK的拨测方式进行应用性能和用户体验监测,具有一定的侵入性。而在万物互联时代,随着云计算、边缘计算、物联网等技术的崛起,企业对无需嵌码的“黑盒”拨测方法的需求越来越强烈。

博睿数据是国内首家能够提供硬件产品,来满足无需嵌码移动拨测需求的厂商,通过多年的研发和测试,日前博睿数据正式发布了Bonree Box 3.0,在产品功能和设计上突破了诸多技术瓶颈,比如手机的充放电,远程维护、稳定性等等。

什么是Bonree Box 3.0?

Bonree Box 3.0是博睿数据推出的一款应用性能监测智能硬件终端。该产品基于边缘计算模型设计,拥有强大的应用性能监测能力,区别于Bonree Box 1.0和Bonree Box 2.0的内部硬件集成方案,Bonree Box 3.0支持手机真机插拔部署,在保证完全真实的监测环境的基础上,具有边缘计算能力强大、用户体验数据真实性高、业务适用性和兼容性高、网络连接方式全面、部署便捷、硬件损耗率低、远程维护方便、节能稳定等优点。

该产品作为博睿数据数字体验监控技术的重要补充,运用边缘计算和云计算相结合的数据处理模型,构建起一套基于智能硬件、全地域覆盖的预先感知真实用户体验服务体系,可以充分帮助不同行业客户提前获取用户体验数据,是满足所有网络应用、web应用、wap应用、App应用需要预先感知用户体验的完整解决方案。

Bonree Box 3.0产品外观,与手机船坞

四大产品功能,即插即用可分布式部署

Bonree Box 3.0仅需5步即可完成部署,可根据监测场景需要,快速的规模化部署至不同地域、运营商网络环境中。

1.即插即用

Bonree Box 3.0部署简单快捷,仅需5步即可完成部署:a.准备Android真机,并安装主控App;b.将手机固定至手机船坞模块中;c.连接主机模块和手机船坞模块,接通电源;d.启动Bonree Box 3.0;e.设置网络连接,开始使用。

2.应用监测

Bonree Box 3.0不仅支持博睿数据的APP 3.0等应用性能监测平台,还支持企业自建或第三方的应用性能监测产品,可将目标应用和监测探针一并安装至Bonree Box 3.0,获取应用运行时的性能体验状况。

3.分布部署

Bonree Box 3.0支持分布式部署,可根据监测场景需要,快速的规模化部署至不同地域、运营商网络环境中,搭建出由真实硬件、操作系统、网络环境组成的最贴合真实用户场景的专属移动监测网络。

4.远程管控

Bonree Box 3.0支持从云端管理平台进行状态监控、一键重启、远程调试、远程控制等管控操作,将现场维护工作最大程度转移至线上完成,提高管控效率与时效。

船坞式设计,最大支持16部手机

在硬件设计和参数上,Bonree Box 3.0与上一代产品相比,扩展性更强,支持手机机型也更加丰富。

监测数据更加真实,远程维护更便捷

Bonree Box 3.0在功能优势上更为突出,因为采用硬件结构上的模块化设计,大大提升了监测数据的真实性;同时,可通过远程的云端平台远程维护,进一步提升了运营效率。

1.监测数据真实有效

Bonree Box 3.0在硬件结构上采用模块化设计,单台Bonree Box 3.0包含1个主机模块和1个(可扩展至最多2个)手机船坞模块,每个手机船坞模块支持插拔式部署最多8部Android真机,完全杜绝虚拟监测,从硬件、网络等层面保证监测数据的真实性。

2.网络连接方式全面

Bonree Box 3.0的主机模块支持WiFi和RJ45网线直连两种方式,连接云端管控平台,满足远程管控的需求;手机船坞模块支持Android真机使用WiFi或移动通讯网络连接,满足不同业务对不同移动运营商网络同时监测的需求。

3.业务适用性和兼容性高

Bonree Box 3.0在硬件上支持不同客户对不同手机机型的要求,在软件上支持用户配合使用博睿数据、企业自建或第三方的应用性能监测平台,对目标应用进行性能体验监测,时刻掌握应用的运行状况。用户可以根据不同的应用监测场景,利用Bonree Box 3.0搭配不同品牌、不同型号、不同系统版本的手机,在目标地域快速搭建专属的移动监测网络。

4.部署配置方式便捷

部署Bonree Box 3.0仅需开机通电、配置网络、装配手机即可完成,同时部署过程中支持使用配套的手机App进行一键配置网络、远程查看运行状态、重启等。

5.远程维护方便

通过云端的管理平台,可以实时查看Bonree Box 3.0的性能状态,并支持远程重启、日志查看、远程调试、手机操作等维护操作,最大程度实现远程解决问题,提高远程维护效率。

6.自动化运行保护机制

加入自动化运行保护机制,提高Bonree Box 3.0的安全可靠性,例如增加自动化的手机电量管理,有效避免手机长时间处于充电状态对电池造成损害等问题,避免电池鼓包、起火等风险。

两大应用场景,自建监测网络更“随心”

1.构建专属监测网络,持续监控应用性能

背景:A企业正在使用博睿数据APP3.0平台对其旗下的某款App进行持续监控,主要针对即将发布的该App新版本,按照真实用户使用时的交互过程,选取全国不同城市运营商的监测点进行周期性监测,在该App正式发布新版本前预先获取真实网络性能、视频性能与用户体验数据。

需求:A企业需要自建监测点网络,对某些城市、运营商、手机机型进行重点监控,并满足内部的一些远程测试场景。

方案:可以使用Bonree Box 3.0,搭配不同品牌、不同型号、不同系统版本的手机,在目标城市、运营商进行分布式部署,建立专属的移动监测网络,并利用Bonree Box 3.0的远程调试、远程控制等能力,满足远程测试的需求。

2.纳管手机设备群,实现分布式部署、集中式管理

背景:B企业为了满足内部的批量测试需求,采购了大量的手机设备,并分配到全国的办公室进行部署和管理。

需求:B企业在管理大量的手机设备过程中,需要各地的办公室安排人员进行现场维护,既占用了大量人力,又因为各地办公室安排的不全是专门技术人员,存在不小的沟通成本。

方案:可以使用Bonree Box 3.0,纳管已采购的手机设备,由技术部门在云端管理平台进行状态监控、一键重启、远程调试、远程控制等线上管控操作,降低人力投入,提高维护效率。

文章标签

智能运维

相关文章

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