# JoeLibOpenAnalysis **Repository Path**: jiangjunjie-joelib/joe-lib-open-analysis ## Basic Information - **Project Name**: JoeLibOpenAnalysis - **Description**: 在线系统性能分析项目 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: beta - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2024-07-10 - **Last Updated**: 2024-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 系统性能监控服务 ## 项目介绍 > 本项目开发的初衷是打造一个更加便捷, 更加强大的工具类, 由于我不断的开发, 项目的方向逐渐向性能监控与日志监控的方面倾斜, > 因此, 项目不仅存在丰富的在线监控功能, 如日志检测, 慢SQL检测, 预警提示等...., 还有非常多实用的工具类 ## 在线体验 https://www.joelib.icu ## 环境要求 - Java: JDK8+ - Maven: 3.8.6 - Springboot: 2.3.X - vue2.x ## 如何构建与运行 ### 项目本地测试启动流程 1. 构造SQL
[SQL脚本](https://gitee.com/jiangjunjie-joelib/joe-lib-open-analysis/blob/beta/src/main/resources/static/mysql.sql) 2. 引入依赖 ```xml io.gitee.jiangjunjie-joelib joe-lib-open-analysis 0.2.9-BETA ``` 3. 设置YAML ```yaml server: port: 8890 # 启动端口号 #logging: # config: classpath:logs/logback.xml # 日志文件配置, 默认情况下不输出 spring: redis: host: 192.168.10.144 # RedisIp地址 port: 6379 # Redis端口号 password: root # Redis密码, 若没有则不填 datasource: # 数据源配置 driver-class-name: com.mysql.cj.jdbc.Driver # 驱动 url: jdbc:mysql://192.168.10.144/JOE_LIB_SYS_DB #JDBC连接地址 username: root # 用户名 password: root # 密码 elasticsearch: rest: uris: http://192.168.10.144:9200 # ES地址 rabbitmq: host: 192.168.10.144 # RabbitMQ地址 port: 5672 # RabbitMQ端口号 username: guest # RabbitMQ用户名 password: guest # RabbitMQ密码 template: mandatory: true # 确认应答 listener: simple: acknowledge-mode: manual # 退回应答 jmx: enabled: true # 启动JMX(用于监控) common: jvm: url: service:jmx:rmi://127.0.0.1:9010/jndi/rmi://127.0.0.1:9010/jmxrmi # 监控的地址, 这里对应着启动的JVM参数, 这里自己监控自己, 两个地址都是目标地址 email: host-name: smtp.qq.com email-sender-user-name: QQ邮箱 email-sender-auth: 对应的密钥 # 可以百度查看配置教程 use-s-sLConnection: true alibaba: oss: # 百度aliyunOSS配置方法即可填充下述参数 access-id: 用户名 access-key: 密码 endpoint: oss-cn-guangzhou.aliyuncs.com # 地区域名, 这里是广州的OSS bucket: j##fasd@til # 桶名称 ai: # 百度文心一言接口的配置方案即可填充以下参数 api-key: 接口账号 security-key: 接口密码 cfr: cfr-path: E:/ssm # 反编译工具的目录 cfr-version: 0.152 # 反编译工具的版本号 daemon: daemon-mills: 1000 # 后台守护线程的执行间隔ms sql: slow: threshold: 200 # 慢SQL的阈值ms, 超过该阈值会被当前系统分析记录 security: web-public-key: 网站公钥 system-private-key: 系统私钥 socket: fairs: false # 模式: 非公平 limit: 20 # 系统实时监控最大监控数量 若取数小于等于0, 默认为没有限制 ``` - SM2密钥的生成可以参考这个网站(即最后的公钥私钥) [LZL在线工具](https://lzltool.cn/SM2) - CFR工具[下载地址](https://www.benf.org/other/cfr/), 上述目录精确到当前目录 - 文心一言, OSS以及邮件的设置请到官网或百度获取, 这里不赘述, 总体来说不是很困难 4. 设置虚拟机参数 ``` -Dcom.sun.management.jmxremote=127.0.0.1 -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djasypt.encryptor.password=XXX ``` - `127.0.0.1`具体是指监控的JVM的远程地址 - `9010`具体是指监控的JVM的远程端口号 - `false`不使用SSL安全连接, 也不使用认证(后期会改进) - `XXX`YAML配置文件密钥 - 可以通过该[方法](https://gitee.com/jiangjunjie-joelib/joe-lib-open-analysis/blob/beta/src/main/resources/static/%E5%8A%A0%E5%AF%86YAML.java), 批量给YAML加密, 将加密后的数据按照ENC(加密数据)进行YAML加密 - 注意, 这个可以直接复制到单元测试执行 5. IDEA直接执行 6. 打开resources的public目录, 将里面的内容拷贝出来, 用于vue的初始化 1. `npm install` 2. 打开`config/index.js`文件, 设置代理(已经配置好服务器和本地测试环境的了, 只需要稍加修改即可) 3. 打开`api/webSocket.js`文件, 设置服务器域名(必须要域名, 否则无法在线监控) 4. 打开`api/service.js`文件, 设置公钥和私钥(必须要域名, 否则无法在线监控) 5. `npm run dev` ### 项目部署流程 1. 初始化服务器脚本下载 [Shell脚本](https://gitee.com/jiangjunjie-joelib/joe-lib-open-analysis/blob/beta/src/main/resources/static/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%9D%E5%A7%8B%E5%8C%96.sh) 2. 服务器执行以下逻辑 1. 赋予Shell脚本相关权限(最好在root用户下, 不需要加sudo) ```shell sudo chmod +7 ./上述shell脚本 ``` 2. 执行(缺少任何一个参数都可能导致执行失败) ```shell ./上述shell脚本 根目录 MySQL密码 Redis密码 ``` 3. 配置NGINX 找到 `根目录/server/nginx/nginx.conf`, 按照上述提示进行配置(已预先做好中文提示) 3. JAR启动参数 ```shell nohup java \ -Dcom.sun.management.jmxremote=127.0.0.1 \ -Dcom.sun.management.jmxremote.port=9010 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -jar JAR名称 & ``` 4. 前端(记得切换部署环境) 1. 执行`npm run build` 2. 将dist目录的东西放入nginx的html目录中, 不要把dist目录放进去, 要把里面的内容放进去 ## 使用说明 [接口文档]() [JavaDoc]() ## 项目结构 - `src/main/java`: Java源代码目录 - `com.junjie.joelibutil`: 项目主包 - `controller`: 控制层代码 - `service`: 业务逻辑层代码 - `mapper`: 数据访问层代码 - `config`: 配置类 - `ai`: 文心一言接口相关代码 - `anno`: 注解代码 - `aop`: 切面代码 - `daemon`: 后台任务代码 - `entity`: 数据库实体类 - `enums`: 枚举 - `es`: ElasticSearch操作 - `exception`: 自定义异常 - `factory`: 工厂类 - `filter`: 请求过滤器 - `intercept`: 请求或SQL拦截器 - `handler`: 全局异常处理器 - `handle`: RabbitMQ消息处理器 - `html`: html模板类 - `mbean`: JVM的Mbean以及操作类 - `pojo`: 普通实体类 - `schedule`: 定时任务 - `socket`: socket操作类 - `util`: 工具包 - `valid`: 校验器 - `vo`: 视图对象 - `src/main/resources`: 资源文件目录 - `application.properties/yml`: 应用配置文件 - `static`: 静态资源文件 - `templates`: 模板文件 - `pom.xml/build.gradle`: Maven/Gradle构建配置文件 ## 贡献指南 欢迎任何形式的贡献!请按照以下步骤提交您的贡献: 1. Fork项目到您的个人仓库 2. 在您的仓库中创建新的分支进行开发 3. 提交您的更改并推送到您的分支 4. 创建Pull Request并描述您的更改 ## 许可证 本项目遵循[Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)许可证。 ## 联系我们 如果遇到任何BUG或者构建失败, 欢迎在issue提出