# 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提出