基于JRobin的磁盘IO监控

本文介绍了一种使用Java编程语言结合JRobin库来实现磁盘IO监控的方法。作者首先列出了之前关于JRobin和监控的文章,接着详细讲解了如何通过Java代码获取并监控多个逻辑磁盘的IO性能数据,包括在Windows和Linux环境下获取数据的差异。代码中包含了创建RRD数据库、定时更新数据、生成监控图表等功能,旨在提供一个基于JRobin的磁盘IO监控解决方案。
摘要由CSDN通过智能技术生成

基于JRobin的磁盘IO监控

作者:终南   <li.zhongnan@hotmail.com>

 

先列以下以前写过的文章作为参考:

1。JRobin简介

2。基于JRobin的网络监控管理,以及基于JRobin的CPU使用率监控

3。磁盘IO性能监控(Linux 和 Windows)

这些文章介绍了JRobin、利用JRobin以及WIndows脚本技术监控网络和CPU使用率,以及如何获取Linux以及Windows下磁盘IO性能数据。将这些结合在一起,于是就有了使用Java语言写成的基于JRobin的磁盘IO监控代码。

监控程序的代码与利用ping监控网络和监控CPU基本类似,但是还是有一些不同:

1。由于可能有多个逻辑磁盘,因此需要先获取磁盘列表,然后才即每个磁盘的IO数据。

2。出于性能考虑,特别是在Windows下,在获取磁盘IO数据时,可以在执行脚本时一次性采集这些数据,根据磁盘名称保存,不用分别获取,这样可以提高性能。

3。数据的单位和显示在图形上的格式不同。

4。JRobin对数据源名称及其程度有要求,因此需要对磁盘名称进行一定的变更。

成果:

Java代码:

import java.awt.Color;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Logger;

import org.jrobin.core.RrdDb;
import org.jrobin.core.RrdDef;
import org.jrobin.core.Sample;
import org.jrobin.graph.RrdGraph;
import org.jrobin.graph.RrdGraphDef;

public class DiskIoMonitor {
String[] disks = null;

public static String[] execute(String[] commands) {
   String[] strs = null;
   File scriptFile = null;
   try {
    List<String> cmdList = new ArrayList<String>();
    String osName = System.getProperty("os.name");
    if (osName.indexOf("Windows") > -1) {
     scriptFile = File.createTempFile("monitor", ".vbs");
     cmdList.add("CMD.EXE");
     cmdList.add("/C");
     cmdList.add("CSCRIPT.EXE");
     cmdList.add("//NoLogo");
    } else {
     scriptFile = File.createTempFile("monitor", ".sh");
     cmdList.add("/bin/bash");
    }
    String fileName = scriptFile.getCanonicalPath();
    PrintWriter writer = new PrintWriter(scriptFile);
    for (int i = 0; i < commands.length; i++) {
     writer.println(commands[i]);
    }
    writer.flush();
    writer.close();
    cmdList.add(fileName);

    writer.flush();
    writer.close();
    cmdList.add(fileName);

    ProcessBuilder pb = new ProcessBuilder(cmdList);
    Process p = pb.start();

    p.waitFor();

    String line = null;
    BufferedReader stdout = new BufferedReader(new InputStreamReader(p
      .getInputStream()));
    List<String> stdoutList = new Arr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值