一款用于分析java socket连接问题的工具

network-tools

介绍

network-tools基于sun jdk、Oracle jdk开发,拦截基于java socket请求,它包括

  • ​ http 客户端

  • ​ jdbc 客户端

  • ​ mq 客户端

  • ​ redis 客户端

    目前提供如下功能:

  • ​ 最近端点连接情况

  • ​ 最近与远程端点连接情况(可用于防火墙端口开通)

  • ​ 最近连接情况

  • ​ 最近错误连接情况

  • ​ 最近最耗时的连接情况

  • ​ 最近连接最频繁远程端点情况

其他更复杂的逻辑可查询influxdb库中的t_connect表(_measurement )。

软件架构
系统架构

在这里插入图片描述

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/jiangc2020/network-tools

​ 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文件格式如下:

在这里插入图片描述

在getConnectRelations和getRemoteConnectRelations接口中返回的列表中的每个元素是一个如下格式的数组,

[
        "test",
        "127.0.0.1",
        "127.0.0.1",
        "58769",
        ""
    ]

其中"test"为本地appName,在应用启动脚本中指定,用“;”分割的后一部分,若不配置默认为“test”,如下

在这里插入图片描述

请注意,若配置了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提供服务一下

​ getTop?top=100 #获取最近100个连接情况

在这里插入图片描述

​ getTopCostConnects?h=5&top=10 #获取最近5小时内最耗时的10个连接情况

在这里插入图片描述

​ getTopCountRemoteEndpoints?h=5&top=10 #获取最近5小时内连接最多的远程端点情况

在这里插入图片描述

​ getConnectRelations?d=1 #获取所有连接情况

在这里插入图片描述

​ getRemoteConnectRelations?d=1 #获取所有连接情况(排除127.0.0.1)

在这里插入图片描述

​ getTopErrConnects?h=5&top=10 #获取最近5个小时最近10个错误连接情况

在这里插入图片描述

​ 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
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
    官方提供的使用手册 https://gitee.com/help
  7. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: "vscode readme"是一个名为"read me"的VS Code扩展,它是一个文本阅读器。安装了这个插件后,你可以通过快捷键或自动阅读的方式在状态栏中阅读文本文档。该插件提供了TXT文件选择、进度设置等功能。你可以在"Feature Contributions"中了解更多信息,并在设置中进行编辑。\[1\]根据引用\[2\]中的代码,我们可以看到该插件的入口是"extension.js"文件。它注册了一个名为"viewReadme.showLocal"的命令,当执行这个命令时,会弹出一个输入框,让用户输入模块名。然后会创建一个名为"Local"的对象,并传入模块名作为参数。\[2\]根据引用\[3\]中的目录结构,我们可以看到插件的文件包括了.vscode目录、CHANGELOG.md、extension.js、package.json、README.md等。其中,README.md是插件的文档。\[3\] #### 引用[.reference_title] - *1* [VSCode 插件开发(ReadMeForVSCode本插件仅作为学习使用)](https://blog.csdn.net/qq_35139974/article/details/119214129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [VS Code插件开发指南(view-readme)](https://blog.csdn.net/weixin_33739646/article/details/89065772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值