如题。
1
TomKate OP 目前了解了以下两种方式
1.远端运行一个 server 程序记录剩余磁盘大小。 2.通过 ftp 的方式。 各位前辈,还有没有其它最优解? |
2
lazyfighter 2019-03-04 11:05:02 +08:00
每个机器都部署一个 agent 但我觉得 java 不适合 ,go 应该适合一点
|
3
hakim 2019-03-04 11:07:36 +08:00
使用 smis/snmp 协议即可
|
4
Mazexal 2019-03-04 11:15:19 +08:00
java 可以远程执行脚本命令, 然后直接得到结果的
|
7
ForestV 2019-03-04 11:20:28 +08:00
jni 配合 sigar.jar 和相关的扩展包
|
8
flame90 2019-03-04 11:21:16 +08:00
sigar 了解一下
|
9
airfling 2019-03-04 11:26:02 +08:00
snmp,或者 sigar 都可以
|
11
msg7086 2019-03-04 11:29:57 +08:00
远程 wmi ?
|
12
caryqy 2019-03-04 11:36:05 +08:00
反过来呢,远端主动向你上报磁盘信息
|
13
TomKate OP 可能是我描述的不够详细,主要是想通过 java 来实现获取远端文件服务器的磁盘剩余大小。也就是说获取网络位置的磁盘大小。
|
14
TomKate OP 不在远端进行任何部署
|
15
moximo 2019-03-04 12:12:59 +08:00 via Android
老哥,想都不用想那些骚操作,直接 java
的 ssh 客户端上去 echo 你想要的结果就行啦。 |
16
moonblog 2019-03-04 13:49:50 +08:00
@TomKate 远程不做任何部署,却想获取磁盘信息,兄弟我觉得你可以当黑客了
部署的话,agent+sigar 实现,我做过 |
17
yinqi025 2019-03-04 13:55:44 +08:00
我觉得楼主在飘~~~,服务端没有任何的宿主或者服务端的东西 是不可能有结果的
|
18
maokabc 2019-03-04 14:01:25 +08:00 via Android
直接用 jsch 库,sftp 支持 statvfs,只要开了 ssh
|
19
dark3212 2019-03-04 14:28:31 +08:00
服务器是 windows 的话有个思路,就是将远程磁盘共享出来,本地电脑挂载,然后 java 像访问本地磁盘那样访问挂载磁盘应该可以。
但是安全性堪忧,特别是广域网。 |
20
qk3z 2019-03-04 14:43:58 +08:00 via Android
snmp 搞定
|
21
rockyou12 2019-03-04 14:51:34 +08:00
就是监控嘛,其实 lz 你调研下主流的监控软件就知道了,不部署 agent 基本是不可能的。有很多权限、性能的问题
|
22
airfling 2019-03-04 14:51:44 +08:00
对于 linux 那你可以用 jsch 或者开启 snmp 使用 snmp。同样的对于 windows 你可以用 snmp 协议或者 telnet 协议,远程不能部署,只用走这两种协议才可以获取到
|
23
laminux29 2019-03-04 15:33:30 +08:00
用 Thrift 做一个 Client-Server 的 RPC。别用 snmp,第一不准,第二黑箱不知道细节,会给后期性能造成大影响。因为精确统计磁盘,对性能影响大。
|
24
tao147258 2019-03-04 15:53:44 +08:00
snmp 比较老了,装个 zabbix 之类的吧
|
25
lazyfighter 2019-03-04 19:33:44 +08:00
这能实现? server 端啥都不装,不装 service 没有办法 pull,又不装 agent 又没办法 push,拿数据怎么搞?
|
26
jhsea3do 2019-03-04 20:19:21 +08:00
1、有 agent , zabbix / jenkins (java)
2、无 agent, ansible / jsch (java) |
27
lff0305 2019-03-04 22:26:18 +08:00 via Android
不想远程装东西的话 jni 配合 perfmon api 或者 wmi api 远程需要建立连接,用户名密码,以前做过肯定可行,问题是
Home 版貌似不行,再就是 win 上需要权限比较高的用户才行,记得至少是 power user 组,要是客户比较严的话不可能给你这个用户 |
28
DarrenF 2019-03-05 14:33:12 +08:00 1
@dark3212 这个我试过 挂载出来好像不行,Java 依然只能读取本地磁盘,用 File ("\\网络路径文件夹")可以读取到网络路径文件所在磁盘剩余大小:
File win = new File("\\\\192.xxx.xxx.xxx\\share"); System.out.println(win.getPath()); System.out.println(win.getName()); System.out.println("Free space = " + (win.getFreeSpace() / (1024 * 1024)) / 1024 + "G"); // 显示 GB 大小 System.out.println("Free space = " + win.getFreeSpace()); System.out.println("Usable space = " + win.getUsableSpace()); System.out.println("Total space = " + win.getTotalSpace()); |