# network-tools **Repository Path**: jiangc2020/network-tools ## Basic Information - **Project Name**: network-tools - **Description**: 基于sun jdk、Oracle jdk,收集socket连接情况,提供微服务互访的防火墙名单、通过最近一段时间连接情况以及influxdb库数据进一步进行线上问题分析。 - **Primary Language**: Java - **License**: 0BSD - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-02 - **Last Updated**: 2024-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # network-tools #### 介绍 network-aep基于sun jdk、Oracle jdk开发,拦截基于java socket请求,它包括 - ​ http 客户端 - ​ jdbc 客户端 - ​ mq 客户端 - ​ redis 客户端 目前提供如下功能: - ​ 最近端点连接情况 - ​ 最近与远程端点连接情况(可用于防火墙端口开通) - ​ 最近连接情况 - ​ 最近错误连接情况 - ​ 最近最耗时的连接情况 - ​ 最近连接最频繁远程端点情况 其他更复杂的逻辑可查询influxdb库中的t_connect表(_measurement )。 #### 软件架构 ##### 系统架构 ![image-20240903144747222](image-20240903144747222.png) JVM:sun/oracle jdk ​ network-agent:收集socket连接情况,目前使用有界队列 ​ network-aep:接收所有network-agent信息,存储到influxdb库 ​ influxdb:时序数据库、支持快速分析、查询 ​ influxdb-console:一个web应用,安装influxdb时自带,用于维护influxdb。 ​ 客户端:一般指人,可访问控制台可有限的web API,也可指业务服务器,业务根据自身需求对接API。 ##### 存储模型 ​ _measurement:t_connect 存储socket连接(失败和成功) ​ time:连接结束时间 ​ local_ip: 本地IP (连接失败则不能获取,选择127.0.0.1) ​ local_port: 本地端口(连接失败则不能获取,选择0) ​ remote_ip 远程IP ​ remote_port 远程端口 ​ cost: 连接耗时,单位毫秒 ​ success: 0代表失败、1代表连接成功 ​ stack: 不报错则显示连接时的代码堆栈,报错则显示异常堆栈。 #### 安装教程 源码目录https://gitee.com/nstc/nstc-framework.git network ​ 1、根据情况选择windows、linux版本,influxdb下载安装参考https://docs.influxdata.com/influxdb/v2/install,需要注意的是http-bind-address配置IP或端口,后续将使用http://localhost:8086打开控制台 ​ 2、获取network-agent ​ 源码打包:执行network-agent/pom.xml的 mvn clean package,最终生成target/network-agent-jar-with-dependencies.jar ​ 3、获取network-aep ​ 源码打包:执行network-aep/pom.xml的 mvn clean package,最终生成target/aep目录 ​ 4、安装network-agent ​ 在需要监控的JVM启动脚本中添加类似 ​ -javaagent:/home/user/nstcapp/bems/network-agent-jar-with-dependencies.jar=http://localhost:8084/hello,其中192.168.61.142:8084为network-aep地址。一般一个JVM应用要配置对应的应用名称,则使用分号追加,如此时应用是bac,则为: http://localhost:8084/hello;bac ​ JVM启动后连接数据将推送至network-aep ​ 5、启动network-aep ​ 修改config/application.properties文件 ``` server.port = 8084 #spring.jpa.show-sql=true spring.http.encoding.charset=UTF-8 spring.application.name=network-aep #按influx配置修改 influx.org=n influx.bucket=test3 influx.token=owaq3la2CsQYXbxetm4yz3i-DVQUP8LNQEnX-7D5mcpH4dpTzsfCnKgdXixftrXqq4PdK3hraBSwFC9f-xqBDw== influx.url=http://localhost:8086 #端口映射文件 port.file=D:/jeecg-boot/ports.csv ``` ​ 其中port.csv文件格式如下: ![image-20240903182214400](image-20240903182214400-1725360130458.png) 在getConnectRelations和getRemoteConnectRelations接口中返回的列表中的每个元素是一个如下格式的数组, ``` [ "test", "127.0.0.1", "127.0.0.1", "58769", "" ] ``` 其中"test"为本地appName,在应用启动脚本中指定,用“=”分割的后一部分,若不配置默认为“test”,如下 ![image-20240905175104038](image-20240905175104038.png) 请注意,若配置了ports.csv,则有5个元素,否则只有4个;而如果配置了ports.csv但内容中不含糊第二、三个元素指定的KEY,图中为127.0.0.1,58769,在port文件中找不到则为空字符串。 进入aep目录,执行java -jar network-aep-0.0.1-SNAPSHOT.jar #### 使用说明 1、在浏览器中通过aep web端口http://localhost:8084/swagger-ui.html,主要接口如下 ​ ​ getTop?top=100 #获取最近100个连接情况 ![image-20240903161953539](image-20240903161953539-1725360703594.png) ​ getTopCostConnects?h=5&top=10 #获取最近5小时内最耗时的10个连接情况 ​ ![image-20240903162043169](image-20240903162043169-1725360703595.png) ​ getTopCountRemoteEndpoints?h=5&top=10 #获取最近5小时内连接最多的远程端点情况 ![image-20240903162106869](image-20240903162106869-1725360703595.png) ​ getConnectRelations?d=1 #获取所有连接情况 ![image-20240903174644228](image-20240903174644228-1725360703595.png) ​ getRemoteConnectRelations?d=1 #获取所有连接情况(排除127.0.0.1) ![image-20240903174341910](image-20240903174341910-1725360703595.png) ​ getTopErrConnects?h=5&top=10 #获取最近5个小时最近10个错误连接情况 ​ ![image-20240903162344900](image-20240903162344900-1725360703596.png) ​ 2、在浏览器中打开influxdb控制台http://localhost:8086/,登录后定位到notebook,编写flux script 查询近4天失败连接情况,具体语法参考官方文档https://docs.influxdata.com/flux/v0/stdlib/ ``` import "strings" from(bucket:"test3") |> range(start:-4d) |> filter(fn:(r)=> r._measurement == "t_connect" ) |> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value") |> group() |> filter(fn:(r)=> r.success == 0 ) |> sort(columns: ["_time"], desc: true) ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)