You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
给apollo-client添加更多可观测性,入手点可以有如下两个
入手点1:暴露用户可直接触达,获取当前客户端状态信息的API
这是最简单粗暴的方式,但也十分有效,这是我们必要提供的
入手点2:将当前客户端状态转为有效的指标,上报到监控系统中
考虑到客户端已经具备Tracer,那么增加指标收集机制将会让监控更加完整
综上,我将会根据这两个入手点增强apollo-client的可观测性,通过收集客户端状态信息,在通过API暴露给用户的同时,将其转为指标进行上报
总体设计图
总的流程共四步,信息收集,信息存储,信息暴露,信息转指标并导出
客户端状态信息收集思路
复用Tracer作为入口,通过扩展MessageProducerManager,通过组合模式设计MessageProducerCompositer类写入ApolloClientMonitorMessageProducer作为客户端状态收集入口
客户端信息处理思路
ApolloClientMonitorMessageProducer将状态信息包装为事件传给MonitorListener处理并存储,同时MonitorListener将实现MonitorApi接口,而MonitorApi将被ConfigMonitor作为成员变量存储,用户可通过ConfigService取得ConfigMonitor从而拿到对应的Api来获取需要的客户端状态信息,如BoostrapsArgsApi(启动参数),NamespaceApi(相关命名空间使用情况)
然后同时MonitorListener也会被MetricsExporter托管,MetricsExporter会定时调用MonitorListener将状态信息转为指标数据收集起来并进行导出
指标数据上报扩展思路
考虑到指标上报的扩展性,设计的导出应能自由支持各种监控系统如Prometheus,SkyWalking等主流监控系统,故设计如下,通过模板方法模式,设计一根通用的指标导出框架,让用户可以自定义实现该框架,并通过SPI机制导入客户端中,即可完成扩展
代码目录结构
主要代码目录在apollo-client目录下的monitor包中
默认提供Prometheus的MetricsExporter实现
以插件模块的形式提供
Beta Was this translation helpful? Give feedback.
All reactions