::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-12-01 20:51:56, Hit : 9569, Vote : 2092
 [소스] snmp 를 이용한 시스템 가용율 구하기 예제

// 제   목: snmp 를 이용한 시스템 가용율 구하기 예제
// 작성자: 김영대( http://www.howto.pe.kr )
// 설명: JAVA 의 Runtime 클래스를 이용하여 snmpwalk 명령어를 실행하고 출력된
//          결과를 받아 시스템 가용율=CPU부하+메모리가용율+시스템부하+네트워크부하 을 구한다
//          시스템에 snmp 가 설치되어 있어야 한다. 설치는 이 홈페이지의 네트워크/보안->
//          "ucd-snmp 설치" 강좌를 참고한다
  
import java.io.*;

public class runCMD {
  public static void main( String[] argv ) {
    try {
      // CPU 가용율
      String sCPU_idle = getSNMPvalue(argv[0], "enterprises.ucdavis.systemStats.ssCpuIdle.0", "=");
      float fCPU_idle = Float.valueOf(sCPU_idle).floatValue();
      System.out.println("CPU idle: "+fCPU_idle+" %");
    
      // 메모리 가용율
      String sMEM_tot   = getSNMPvalue(argv[0], "enterprises.ucdavis.memory.memTotalReal.0", "=");
      String sMEM_avail = getSNMPvalue(argv[0], "enterprises.ucdavis.memory.memAvailReal.0", "=");
      float fMEM_free = 100 * Float.valueOf(sMEM_avail).floatValue() / Float.valueOf(sMEM_tot).floatValue();
      System.out.println("MEM free: "+fMEM_free+" %");

      // 시스템 부하율
      String sLoad_avg = getSNMPvalue(argv[0], "enterprises.ucdavis.laTable.laEntry.laLoad.1", "="); // 1분 시스템부하
      float fLoad_avg = Float.valueOf(sLoad_avg).floatValue();
      System.out.println("System load(1m avg.): "+fLoad_avg+" %");

      // 네트워크 이용률 = 단위시간부하/네트워크 용량 * 100%
      // OID 맨뒤의 ".2" 는 첫번째 NIC 를 나타냄, ".1" 은 loopback
      String sNET_bandwidth = getSNMPvalue(argv[0], "interfaces.ifTable.ifEntry.ifSpeed.2", ":");
      float fNET_bandwidth = Float.valueOf(sNET_bandwidth).floatValue() / 1000; // byte 로 환산
      String sNET_t1_in  = getSNMPvalue(argv[0], "interfaces.ifTable.ifEntry.ifInOctets.2", ":");
      String sNET_t1_out = getSNMPvalue(argv[0], "interfaces.ifTable.ifEntry.ifOutOctets.2", ":");
      float fNET_t1_tf = Float.valueOf(sNET_t1_in).floatValue() + Float.valueOf(sNET_t1_out).floatValue(); // recv+send traffic
      java.lang.Thread.sleep(1000);
      String sNET_t2_in  = getSNMPvalue(argv[0], "interfaces.ifTable.ifEntry.ifInOctets.2", ":");
      String sNET_t2_out = getSNMPvalue(argv[0], "interfaces.ifTable.ifEntry.ifOutOctets.2", ":");
      float fNET_t2_tf = Float.valueOf(sNET_t2_in).floatValue() + Float.valueOf(sNET_t2_out).floatValue();
      float fNET_load = 100 * (fNET_t2_tf - fNET_t1_tf) / fNET_bandwidth;
      System.out.println("NET load: "+fNET_load+" %");

      // 시스템 가용율
      float fHost_avail = Math.round(fCPU_idle / 100 * 20 +
                                     fMEM_free / 100 * 20 +
                                     (100 - fLoad_avg) / 100 * 20 +
                                     (100 - fNET_load) / 100 * 40);
      System.out.println("host avail: "+fHost_avail+" %");
      
    } catch (Exception e) {
      System.out.println("Exception ::" + e);
    }
    
  }
  
  public static String getSNMPvalue(String IP, String OID, String deli) {
    Process p;
    String val = null;
    String s = "";
    
    try {
      p = Runtime.getRuntime().exec("snmpwalk "+IP+" public "+OID);
      int exitVal = p.waitFor(); // 대기
    } catch(Exception e ) {
      return null;
    }

    BufferedInputStream buffer = new BufferedInputStream(p.getInputStream());
    BufferedReader commandResult = new BufferedReader(new InputStreamReader(buffer));

    try {
      s = commandResult.readLine(); // stdout capture
      int i = s.indexOf(deli);
      if (i > -1)
        val = s.substring(i+2).trim();
      commandResult.close();
    } catch (Exception e) {
      System.err.println("Exception ::" + e);
    }

    return val;
  }
  
}





23   [Java/PHP] [자바] DB 컨넥션 풀  신훈재 2004/06/18 9511 1857
22   [Java/PHP] [자바] JDBC-ODBC 연결 예제  신훈재 2004/06/18 9046 1672
21   [Java/PHP] [자바] 시스템 프로퍼티를 이용한 드라이버 로드  신훈재 2004/06/18 5487 1425
20   [Java/PHP] [자바] 오라클 각종 에러  신훈재 2004/06/18 6489 1671
19   [Java/PHP] [자바] 활용팁(오라클)  신훈재 2004/06/18 5997 1603
18   [Java/PHP] [자바] ResultSet 질의결과  신훈재 2004/06/18 6111 1317
17   [Java/PHP] [자바] Select예제  신훈재 2004/06/18 6249 1562
16   [Java/PHP] [자바] Update예제  신훈재 2004/06/18 5414 1333
15   [Java/PHP] [자바] Insert 예제  신훈재 2004/06/18 6493 1673
14   [Java/PHP] [자바] Query Statement  신훈재 2004/06/18 7763 1468
13   [Java/PHP] [자바] JDBC Connect  신훈재 2004/06/18 6717 1489
12   [Java/PHP] [자바] JDBC 코딩시 주위사항(jsp, servlet)  신훈재 2004/06/18 6137 1357
11   [Java/PHP] [자바] 여러종류의 데이타베이스 테스트 소스  신훈재 2004/06/18 6421 1457
10   [Java/PHP] [자바] JDBC 테스트 소스(오라클)  신훈재 2004/06/18 5436 1345
  [Java/PHP] [소스] snmp 를 이용한 시스템 가용율 구하기 예제  김영대 2003/12/01 9569 2092
8   [Java/PHP] [소스] Oolong 언어를 이용한 Factorial 계산 프로그램 예제  김영대 2003/11/10 6633 1683
7   [Java/PHP] [문서] Java Web Services Development Pack (JWSDP) 1.0 tutorial  김영대 2003/03/24 5851 1457
6   [Java/PHP] [문서] Java Swing v1.1.1 도움말  김영대 2003/03/24 5782 1470
5   [Java/PHP] [문서] Java Servlet Development Kit (JSDK) v2.3 도움말  김영대 2003/03/24 5520 1454
4   [Java/PHP] [문서] Java 2 SDK, Enterprise Edition (J2EE) 1.3.1 도움말  김영대 2003/03/24 5617 1469

1 [2]
 

Copyright 1999-2017 Zeroboard / skin by zero