性能日志
ClownFish会在以下场景中自动监控调用性能并记录日志
- 处理HTTP请求过程中(HttpAction)
- 处理消息过程中(MessageHandler)
- 后台任务中(BackgroundTask)
性能监控范围主要涵盖以下范围:
- 基于HTTP协议的远程调用
- 微服务之间调用
- ElasticSearch调用
- InfluxDB调用
- VictoriaMetrics调用
- 3种IM调用(企业微信,钉钉,飞书)
- 阿里云日志服务调用
- 阿里云OSS调用
- 阿里云短信
- 基于TCP协议的远程调用
- SQL数据库调用(各种RMDBS)
- Redis调用
- 发送RabbitMQ消息
- 发送Plusar消息
- 发送邮件
- 非 远程调用
- 读请求流(Request Body)
- 用户代码(HttpAction)执行前的框架耗时
与APM的比较
ClownFish/Nebula的性能监控日志与其它APM性能监控日志对比,主要有以下优势:
- 覆盖面更完整(3种开发模型)
- 日志量精准:仅当任务的执行时间超过性能阀值时才会记录(不是全量,也不是采样)
- 日志量较小,不多不少,刚刚好(只要发生一次慢任务,一定会记录)
- 性能损耗较小:充分利于框架特性 + 延迟技术 + 日志量小
- 可监控普通方法(非远程调用)
- 内容更全,例如:可监控【读请求流】,可包含租户用户等等内部数据
- 整合了最优秀的日志查看工具:Kibana, JeagerUI
利用性能日志排查问题
可参考以下链接:
查看调用链路
当我们从日志列表界面Kibana进入日志详情页面JeagerUI时,
此时是按【当前日志记录】为 顶层节点 来展示的。
在微服务架构中,服务之间相互调用可能很常见。很有可能这个【当前日志记录】只是 整个调用链路 中的一个环节而已, 如果此时需要查看 完整的调用链路,可以在 URL 后面添加 ?tree 来实现,例如:
监控普通方法调用
这里所说的【普通方法】是指没有远程调用的方法,全是一些内存操作,也可以称为【CPU密集型操作】。
要监控这些方法的执行性能就是给这些方法增加 [MonitorPerformance] 标记,例如:
这个HttpAction调用了5个 “普通方法”,它们的定义如下:
最后可以在 JeagerUI 看到如下效果: