性能日志

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时,

xx

xx

此时是按【当前日志记录】为 顶层节点 来展示的。

在微服务架构中,服务之间相互调用可能很常见。很有可能这个【当前日志记录】只是 整个调用链路 中的一个环节而已, 如果此时需要查看 完整的调用链路,可以在 URL 后面添加 ?tree 来实现,例如:

xx





监控普通方法调用

这里所说的【普通方法】是指没有远程调用的方法,全是一些内存操作,也可以称为【CPU密集型操作】。

要监控这些方法的执行性能就是给这些方法增加 [MonitorPerformance] 标记,例如:

xx

这个HttpAction调用了5个 “普通方法”,它们的定义如下:

xx

最后可以在 JeagerUI 看到如下效果:

xx