jpOwl一款高性能的后端业务监控,动态配置策略规则的工具包

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: jpOwl一款高性能的后端业务监控,动态配置策略规则的工具包

设计架构

jpOwl客户端是java语言编写而成,要求做到API简单、高可靠性能、无论在任何场景下客户端都不能影响各业务服务的性能。旨在为各业务线提供丰富的埋点功能与数据采集。

在收集数据方面使用ThreadLocal,为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。

df274f5f2280cabe02ee9febc4b4c5e.png

如图,执行业务逻辑的时候,就会把此次请求对应的监控存放于ThreadContext中,ThreadContext其实是一个监控树的结构。最后业务线程执行结束时,将监控对象异步存入一个内存队列中,jpOwl有个消费线程将队列内的数据异步发送到第三方存储引擎。

场景需求

  • 监控粒度可控制作用在接口上,方法上,乃至代码块上
  • 异步方式运行,即使失败也不影响业务流程
  • 提供注解式与编程式的使用方式
  • 日志级别可根据响应时间,失败次数,数据大小决定升降
  • 可添加自定义触发器,触发特定功能
  • 监控产生的日志内容可动态指定记录前缀名
  • 支持内存,本地文件,mongodb,elastic search等输出源
  • 支持在线修改调整日志记录级别
  • 支持监控数据延迟上报或触发,便于聚合业务数据统计记录

支持以秒级,分钟级监控异常失败次数,方法接口执行次数。根据指标配置告警策略,如钉钉,邮件,短信等方式。业务可根据需要设置日志前缀与延迟上报,在内存队列或触发器进行业务指标计算公式的预计算,对个性化业务指标进行监控告警或数据记录至其他数据源,由echart等图表工具展示。

性能设计

序列化和通信是整个客户端包括服务端性能里面很关键的一个环节

  • 异步序列化,jpOwl序列化协议protobuf序列化协议
  • 异步通信,jpOwl通信是基于Netty来实现的NIO的数据传输
  • 异步化IO传输的操作
  • 异步数据采集,基于NIO管道记录日志
  • 基于内存级别的数据缓冲,可指定缓存队列大小
  • 可指定内存队列安全机制,当队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志

价值与优势

价值

  • 减少故障发现时间
  • 降低故障定位成本
  • 辅助应用程序优化
  • 监控数据是全量统计,jpOwl支持预计算数据
  • 链路数据是采样计算

优势

  • 实时处理:信息的价值会随时间锐减,所以收集信息需要迅速
  • 全量数据:全量采集指标数据,便于深度分析故障案例
  • 故障容忍:故障不影响业务正常运转、对业务透明
  • 高吞吐:海量监控数据的收集,需要高吞吐能力做保证

业务模型监控

jpOwl主要支持以下四种监控模型:

  • Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。
  • Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小。
  • Heartbeat 表示程序内定期产生的统计信息, 如CPU利用率, 内存利用率, 连接池状态, 系统负载等。
  • Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。

消息树

jpOwl监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括TransactionEventHeartbeatMetric等信息。

完整的消息树

413d524cf5dbaade9c1aeeb69369b0e.png

可视化消息树

cb447fccdb82ba0e5d224d5be1166a6.png

分布式消息树【一台机器调用另外一台机器】

2e3e469f9922b0043ee8a8d7a44302e.png

项目地址:github.com/jiangeeq/jp…


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
18天前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
45 4
|
4月前
|
存储 缓存 前端开发
Django 后端架构开发:存储层调优策略解析
Django 后端架构开发:存储层调优策略解析
69 2
|
4月前
|
前端开发 JavaScript API
解锁高效应用构建:Vuex与后端交互的前端状态同步策略,让数据流动如行云流水,紧跟前端开发的热点趋势
【8月更文挑战第27天】本文深入探讨了Vue框架下的前端状态管理库Vuex与后端服务交互时的状态同步策略。通过剖析Vuex的核心机制——状态(State)、变异(Mutation)、动作(Action)及模块(Module),文章展示了如何优雅地将后端数据加载并更新至前端状态中。特别地,借助示例代码解释了Action处理API调用、Mutation更新状态的过程,并介绍了如何通过模块化和命名空间提高状态管理的准确性和时效性。此外,还讨论了组件如何利用`mapState`和`mapActions`简化状态访问与操作的方法。遵循这些策略,开发者可以在构建复杂应用时显著提升性能与用户体验。
58 0
|
1月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
63 4
|
1月前
|
消息中间件 缓存 负载均衡
构建高效的后端服务:策略与实践
在本文中,我们将深入探讨如何设计和实现一个高效的后端服务。我们将从架构设计、性能优化、安全性和可扩展性等方面进行讨论,以帮助读者了解如何构建一个稳定、高效且安全的后端服务。
|
29天前
|
缓存 数据库 开发者
后端开发中的性能优化策略
在后端开发领域,性能优化是提升用户体验和系统稳定性的关键。本文将探讨几种有效的后端性能优化技术,包括数据库查询优化、缓存机制的应用、代码层面的优化以及系统架构的调整。通过这些策略,开发者可以显著提高应用程序的响应速度和处理能力,从而满足现代Web应用对高性能的需求。
|
2月前
|
存储 缓存 测试技术
构建高效后端系统的关键策略##
【10月更文挑战第2天】 在当今数字化时代,后端系统的性能和可扩展性对于任何技术驱动的企业都至关重要。本文将深入探讨如何通过优化数据库设计、实施缓存机制、采用微服务架构以及自动化测试等措施,构建一个既高效又可靠的后端系统。我们将从基础的代码优化开始,逐步讨论到架构级别的改进,最终目标是提供一个全面的指导方案,帮助开发者和企业提升其后端系统的性能和可维护性。 ##
63 2
|
2月前
|
缓存 安全 API
构建高效后端API的五大策略
【9月更文挑战第32天】在数字化时代,后端API的设计和实现是软件开发的核心。本文将介绍如何通过五大策略——简化设计、保证性能、强化安全、优化文档和维护更新,来构建一个高效、稳定且易于维护的后端API。我们将深入探讨每个策略的实施步骤和注意事项,以及它们如何相互配合,共同提升API的整体质量。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导。
|
3月前
|
机器学习/深度学习 缓存 NoSQL
深度学习在图像识别中的应用与挑战后端开发中的数据缓存策略
本文深入探讨了深度学习技术在图像识别领域的应用,包括卷积神经网络(CNN)的原理、常见模型如ResNet和VGG的介绍,以及这些模型在实际应用中的表现。同时,文章也讨论了数据增强、模型集成等改进性能的方法,并指出了当前面临的计算资源需求高、数据隐私等挑战。通过综合分析,本文旨在为深度学习在图像识别中的进一步研究和应用提供参考。 本文探讨了后端开发中数据缓存的重要性和实现方法,通过具体案例解析Redis在实际应用中的使用。首先介绍了缓存的基本概念及其在后端系统性能优化中的作用;接着详细讲解了Redis的常见数据类型和应用场景;最后通过一个实际项目展示了如何在Django框架中集成Redis,
|
2月前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。