厉害!某生鲜电商平台竟然是这样设计监控模块的(已开源)~

ECSHOP仿15分生鲜农产品O2O电商平台源码(亲测) ecshop 仿15分源码,亲测完整。 立即下载

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:cnblogs.com/jurendage/p/9070442.html

  • 1. 服务器本身的监控

  • 2. 业务监控

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

  • 4. 总结


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

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

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

1. 服务器本身的监控

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

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

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

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

2. 业务监控

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

  1. Java内存

  2. JavaCPU使用情况

  3. 用户Session数量

  4. JDBC连接数

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

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

业务代码如下:

import org.apache.commons.lang.time.StopWatch;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
 * 声明一个切面,记录每个Action的执行时间
 */
@Aspect
@Component
public class LogAspect {

    private static final Logger logger=LoggerFactory.getLogger(LogAspect.class);

    /**
     * 切入点:表示在哪个类的哪个方法进行切入。配置有切入点表达式
     */
    @Pointcut("execution(* com.netcai.admin.controller.*.*.*(..))")
    public void pointcutExpression() {
        logger.debug("配置切入点");
    }

    /**
     * 1 前置通知
     * @param joinPoint
     */
    @Before("pointcutExpression()")
    public void beforeMethod(JoinPoint joinPoint) {
        logger.debug("前置通知执行了");
    }

    /**
     * 2 后置通知
     * 在方法执行之后执行的代码. 无论该方法是否出现异常
     */
    @After("pointcutExpression()")
    public void afterMethod(JoinPoint joinPoint) {
        logger.debug("后置通知执行了,有异常也会执行");
    }

    /**
     * 3 返回通知
     * 在方法法正常结束受执行的代码
     * 返回通知是可以访问到方法的返回值的!
     * @param joinPoint
     * @param returnValue
     */
    @AfterReturning(value = "pointcutExpression()", returning = "returnValue")
    public void afterRunningMethod(JoinPoint joinPoint, Object returnValue) {
        logger.debug("返回通知执行,执行结果:" + returnValue);
    }
    /**
     * 4 异常通知
     * 在目标方法出现异常时会执行的代码.
     * 可以访问到异常对象; 且可以指定在出现特定异常时在执行通知代码
     * @param joinPoint
     * @param e
     */
    @AfterThrowing(value = "pointcutExpression()", throwing = "e")
    public void afterThrowingMethod(JoinPoint joinPoint, Exception e)
    {
        logger.debug("异常通知, 出现异常 " + e);
    }

    /**
     * 环绕通知需要携带 ProceedingJoinPoint 类型的参数.
     * 环绕通知类似于动态代理的全过程: ProceedingJoinPoint 类型的参数可以决定是否执行目标方法.
     * 且环绕通知必须有返回值, 返回值即为目标方法的返回值
     */
    @Around("pointcutExpression()")
    public Object aroundMethod(ProceedingJoinPoint pjd)
    {
        StopWatch clock = new StopWatch();
        //返回的结果
        Object result = null;
        //方法名称
        String className=pjd.getTarget().getClass().getName();

        String methodName = pjd.getSignature().getName();

        try
        {
            // 计时开始
            clock.start();
            //前置通知
            //执行目标方法
            result = pjd.proceed();
            //返回通知
            clock.stop();
        } catch (Throwable e)
        {
            //异常通知
            e.printStackTrace();
        }
        //后置通知
        if(!methodName.equalsIgnoreCase("initBinder"))
        {
            long constTime=clock.getTime();

            logger.info("["+className+"]"+"-" +"["+methodName+"]"+" 花费时间: " +constTime+"ms");

            if(constTime>500)
            {
                logger.error("["+className+"]"+"-" +"["+methodName+"]"+" 花费时间过长,请检查: " +constTime+"ms");
            }
        }
        return result;
    }
}

补充说明:这个方法记录那个类,那个方法执行的时间多少,超过设置的阀值,那么就打印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.xml
            classpath*:net/bull/javamelody/monitoring-spring.xml
            classpath*:net/bull/javamelody/monitoring-spring-datasource.xml
            classpath*: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>

最终运营效果如下:

4. 总结

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



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

兄弟,艿一口,点个赞!????

Java生鲜电商项目源码 该项为java开发项目中的使用SSM框架开发的一个生鲜电商项目,里面包含了项目源码,有需要的可自行下载 立即下载

相关推荐

netcai-app:Java开源生鲜电商平台(B2B平台)(Android端源码)

netcai应用 Java开源生鲜电商平台(B2B平台)(Android端源码)

Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)(1)

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

2401_84097678的博客 658

天天生鲜项目源码

天天生鲜项目完整源码,用django框架进行编写的,适合新手用来研究

java 压制警报_适用于Java开发人员的微服务:监视和警报

java 压制警报1.简介 在本教程的最后一部分中,我们将讨论所有可观察性Struts都聚集在一起的主题:监视和警报。 对于许多人来说,该主题严格地属于操作,并且您知道它以某种方式起作用的唯一方式是当您待命并加入时。 目录 1.简介 2.监测和预警哲学 3.基础架构监控 4.应用监控 4.1。 普罗米修斯和警报经理 4.2。 滴答堆栈:Chronograf ...

danpu0978的博客 834

最好用的开源b2c电商系统java版

这是我参考很多开源项目,觉得比较好的一个开源b2c电商系统java版,感谢!

Java Spring开发电商完整平台

Java Spring开发完整电商平台,SpringBoot框架基础打造的完整电商平台

芋道 yudao-cloud 项目监控

芋道 yudao-cloud 项目通过集成多种开源组件构建完整的监控体系,覆盖应用性能、数据库、日志和链路追踪等维度。主要采用 Spring Boot Admin 实现 JVM 进程监控,SkyWalking 负责链路追踪和日志收集,Druid 监控 MySQL 连接池和 SQL 性能,同时支持 Redis 监控和 Sentinel 服务保障。所有监控系统通过前端菜单统一管理,支持动态配置和灵活扩展。该设计实现了多层次监控能力,用户可根据需求选择组件或替换为 Prometheus 等替代方案。

夏寻的博客 962

采优园分布式生鲜电商平台_基于SpringBoot和SpringSecurity的农产品供应链保鲜销售系统_通过微信小程序收集社区消费者订单信息并利用Elasticsearch和R.zip

采优园分布式生鲜电商平台_基于SpringBoot和SpringSecurity的农产品供应链保鲜销售系统_通过微信小程序收集社区消费者订单信息并利用Elasticsearch和R.zip

Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)

Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)开源生鲜电商平台支付目前支持支付宝与微信。针对的是APP端(android or IOS)1. 数据库表设计说明:无论是支付宝还是微信支付,都会有一个服务端的回调,业务根据回调的结果处理相应的业务逻辑。pay_logs这个表主要是记录相关的用户支付信息。是一个日志记录。比如:谁付款的,什么时候付款的,订单号多少,是支付宝还是微信,支付状态...

Java笔记 2488

netcai-ios:Java开源生鲜电商平台(B2B平台)(IOS端源码)

netcai-ios

cellchat安装

cellchat

m0_65188455的博客 5448

4 大软件架构,你们公司用哪种?

相关阅读:厉害!某生鲜电商平台竟然是这样设计监控模块的(已开源)~作者:SimpleEasy链接:www.jianshu.com/p/e7b992a82dc0如果一个软件开发人员,不了解软...

Java和Android架构 837

将Apollo高精地图中的车道线叠加在多种导航地图上

本文介绍了将Apollo高精地图车道线叠加到普通导航地图的技术方案。高精地图具备厘米级车道精度和丰富的语义信息,叠加可实现可视化验证、调试分析和数据对比等功能。核心技术包括坐标系统转换(UTM/WGS84/BD09/GCJ02)和数据处理流程,通过Python脚本完成Apollo地图解析、坐标批量转换和多格式输出。文章详细提供了环境准备、工作目录创建和坐标转换脚本等操作步骤,实现了高精地图数据在OpenStreetMap、百度地图和高德地图上的可视化展示。

Hi20240217的博客 1336

Java开源生鲜电商平台-搜索模块的设计与架构(源码可下载)

Java开源生鲜电商平台-搜索模块的设计与架构(源码可下载)说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面。目前也是快速的检索商品。           对于移动端的APP买家用户而言,要求的速度在3秒内完成。支持模糊查询,由于业务实战表面,整个搜索频率不到18%-25%之间          同时业务也不算很大,所以并没采用java全文检索技术.(lucene等)。这里采用的...

li123128的博客 1573

从零构建PEMFC仿真模型:MATLAB/Simulink中的模块化拆解与系统集成

本文详细介绍了如何在MATLAB/Simulink环境中从零构建质子交换膜燃料电池(PEMFC)仿真模型,包括电化学模型、气体供应系统和热管理系统的模块化实现。通过多物理场耦合技巧和系统集成策略,帮助工程师和研究者高效开发PEMFC控制策略,优化性能并实现实时仿真。

weixin_29294975的博客 361

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 458
上一篇: 华为开源 OpenJDK 发行版“毕昇”
下一篇: Spring Boot 整合微信小程序实现登录与增删改查
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值