100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java生鲜电商平台-监控模块的设计与架构

Java生鲜电商平台-监控模块的设计与架构

时间:2022-06-16 01:19:41

相关推荐

Java生鲜电商平台-监控模块的设计与架构

点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

来源:/jurendage/p/9070442.html

Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容:

服务器本身的监控。(比如:linux服务器的CPU,内存,磁盘IO等监控)

业务系统的监控. (比如:业务系统性能的监控,SQL语句的监控,请求超时的监控,用户输入的监控,整个请求过程时间的监控,优化等等)

1. 服务器本身的监控

说明:由于Java开源生鲜电商平台采用的是阿里云的linux CentOS服务器,由于阿里云本身是有监控预警的,但是我们不可能时刻去看,最好有集成自己的系统监控,

最终在各种系统对比的过程中,选择了netdata这个工具,当然有一些软件比如:zabbix,negios等等都是可以的,但是我们服务器压力不算大,最终采用了更加轻量级的解决方案。

相关的安装与使用,大家自行百度处理,我这边就不列举出来了。

以下是相关的实际运营截图:

2. 业务监控

说明:任何一个业务系统都需要采用业务监控,抛异常,有error日志,短信预警,推送等等

Java内存

JavaCPU使用情况

用户Session数量

JDBC连接数

http请求、sql请求、jsp页面与业务接口方法(EJB3、Spring、 Guice)的执行数量,平均执行时间,错误百分比等

最终,业务代码中采用了Spring AOP进行日志拦截,把请求方法超过了1500秒的方法进行了error日志的输出:

业务代码如下:

mons.lang.time.StopWatch;importorg.aspectj.lang.JoinPoint;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.After;importorg.aspectj.lang.annotation.AfterReturning;importorg.aspectj.lang.annotation.AfterThrowing;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Before;importorg.aspectj.lang.annotation.Pointcut;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.ponent;/***声明一个切面,记录每个Action的执行时间*/@Aspect@ComponentpublicclassLogAspect{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(LogAspect.class);/***切入点:表示在哪个类的哪个方法进行切入。配置有切入点表达式*/@Pointcut("execution(*cai.admin.controller.*.*.*(..))")publicvoidpointcutExpression(){logger.debug("配置切入点");}/***1前置通知*@paramjoinPoint*/@Before("pointcutExpression()")publicvoidbeforeMethod(JoinPointjoinPoint){logger.debug("前置通知执行了");}/***2后置通知*在方法执行之后执行的代码.无论该方法是否出现异常*/@After("pointcutExpression()")publicvoidafterMethod(JoinPointjoinPoint){logger.debug("后置通知执行了,有异常也会执行");}/***3返回通知*在方法法正常结束受执行的代码*返回通知是可以访问到方法的返回值的!*@paramjoinPoint*@paramreturnValue*/@AfterReturning(value="pointcutExpression()",returning="returnValue")publicvoidafterRunningMethod(JoinPointjoinPoint,ObjectreturnValue){logger.debug("返回通知执行,执行结果:"+returnValue);}/***4异常通知*在目标方法出现异常时会执行的代码.*可以访问到异常对象;且可以指定在出现特定异常时在执行通知代码*@paramjoinPoint*@parame*/@AfterThrowing(value="pointcutExpression()",throwing="e")publicvoidafterThrowingMethod(JoinPointjoinPoint,Exceptione){logger.debug("异常通知,出现异常"+e);}/***环绕通知需要携带ProceedingJoinPoint类型的参数.*环绕通知类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法.*且环绕通知必须有返回值,返回值即为目标方法的返回值*/@Around("pointcutExpression()")publicObjectaroundMethod(ProceedingJoinPointpjd){StopWatchclock=newStopWatch();//返回的结果Objectresult=null;//方法名称StringclassName=pjd.getTarget().getClass().getName();StringmethodName=pjd.getSignature().getName();try{//计时开始clock.start();//前置通知//执行目标方法result=pjd.proceed();//返回通知clock.stop();}catch(Throwablee){//异常通知e.printStackTrace();}//后置通知if(!methodName.equalsIgnoreCase("initBinder")){longconstTime=clock.getTime();logger.info("["+className+"]"+"-"+"["+methodName+"]"+"花费时间:"+constTime+"ms");if(constTime>500){logger.error("["+className+"]"+"-"+"["+methodName+"]"+"花费时间过长,请检查:"+constTime+"ms");}}returnresult;}}

补充说明:这个方法记录那个类,那个方法执行的时间多少,超过设置的阀值,那么就打印error日志,需要我们每天进行查看与针对性的优化。

3. 对于整个业务线的监控,我们采用了另外一种开源的监控:javamelody

相关的配置与处理如下:

POM文件中设置:

<!--系统监控--><dependency><groupId>net.bull.javamelody</groupId><artifactId>javamelody-core</artifactId><version>1.68.1</version></dependency><dependency><groupId>org.jrobin</groupId><artifactId>jrobin</artifactId><version>1.5.9</version></dependency>

web.xml文件中处理

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:config/applicationContext.xmlclasspath*:net/bull/javamelody/monitoring-spring.xmlclasspath*:net/bull/javamelody/monitoring-spring-datasource.xmlclasspath*:net/bull/javamelody/monitoring-spring-aspectj.xml</param-value></context-param>

<!--javamelody--><filter><filter-name>monitoring</filter-name><filter-class>net.bull.javamelody.MonitoringFilter</filter-class><async-supported>true</async-supported><init-param><param-name>logEnabled</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>monitoring</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>net.bull.javamelody.SessionListener</listener-class></listener>

最终运营效果如下:

总结:最终可以形成一套基于自己的监控系统,当然还有类似的更加强大的监控系统,比如:连接池方面druid,系统方面zabbix,业务方面可以用cat等等,甚至开发采用自己的监控系统也是可以的。也是支持二次开发的。

热门内容:

通用的底层埋点都是怎么做的?

Java身份证号码识别系统

看看人家那后端API接口写得,那叫一个优雅!

给IDEA换个酷炫的主题,这个有点哇塞啊!

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复666领取,更多内容陆续奉上。明天见(。・ω・。)ノ♡

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。