之前一致没看监控这块的源码,现在记录下。
监控对应的dashboard界面如下:
com.alibaba.csp.sentinel.dashboard.controller.MetricController:供dashboard前端界面监控调用的dashboard监控后端接口类
查询监控具体数据是通过MetricsRepository接口实现的,默认实现类为基于内存存储的InMemoryMetricsRepository(监控数据会存到内存中,且5分钟过期),MetricsRepository接口有查询和保存监控数据的方法,一般二开的话会选择写一个基于influxDB持久化方案的实现类(参考blog.csdn.net/weixin_3602…)
com.alibaba.csp.sentinel.dashboard.metric.MetricFetcher:dashboard中随着项目启动,该类会启动一个定时任务,通过http请求每一个客户端拿到监控数据信息,然后调用MetricsRepository接口进行存储(默认存在内存中(InMemoryMetricsRepository.allMetrics中 一个map),二开可以存influxDB,比如先放kafka,然后在写db)
com.alibaba.csp.sentinel.command.handler.SendMetricCommandHandler:客户端中,接受dashborad获取监控数据的请求,通过查询条件查询磁盘中监控信息日志(logs/csp/文件夹下,监控日志如下图)拿到监控信息返回给dashboard
com.alibaba.csp.sentinel.node.metric.MetricWriter:客户端将监控信息写入监控日志文件的地方(write方法),监控数据来源(从以下两个地方的内存中拿到,这两个地方的数据又是在StatisticSlot中塞入的):com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot#clusterNodeMap和com.alibaba.csp.sentinel.Constants#ENTRY_NODE
com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager:客户端一启动,便会启动一个定时任务将内存中的总qps,通过qps,拒绝qps、资源等信息写入监控日志文件中(业务逻辑在MetricTimerListener中,MetricTimerListener会调MetricWriter写监控日志)
其中默认的监控数据类型为 MetricEntity,包含应用名称、时间戳、资源名称、异常数、请求通过数、请求拒绝数、平均响应时间等信息。
官方文档-日志:github.com/alibaba/Sen…