본문 바로가기
Programming/Java

Hyperic Sigar 라이브러리를 이용한 JAVA 모니터링 시스템

by 주리니e 2023. 1. 27.
728x90

Hyperic Sigar 라이브러리를 이용한 JAVA 모니터링 시스템

 

 

 

Hyperic SIGAR(System Information Gatherer And Reporter)를 이용하여 시스템 모니터링을 위한 프로젝트를 생성해보자.
SIGAR는 다음과 같은 시스템 정보 수집을 위한 휴대용 인터페이스를 지원한다고 한다.

  • 시스템 메모리, 스왑, CPU, 로드 평균, 가동 시간, 로그인
  • 프로세스별 메모리, CPU, 자격 증명 정보, 상태, 인수, 환경, 열린 파일
  • 파일 시스템 감지 및 지표
  • 네트워크 인터페이스 감지, 구성 정보 및 지표
  • TCP 및 UDP 연결 테이블 네트워크 경로 테이블




개발환경

  • Eclipse IDE 2022-06
  • Open JDK 11
  • Gradle



'Ctrl + N' 또는 File - new - Other를 이용하여 Gradle Project를 선택한다. 일반적인 Java Project로 생성 후 Sigar 라이브러리를 수동으로 추가해줘도 상관없지만 편하게 관리하기 위해 Gradle Project를 선택하였다.

 

Gradle 버전을 6.6.1로 JDK를 11로 지정하였다. 이유는 이클립스에서 Gradle Project를 Gradle 최신버전으로 생성 시 lib 디렉토리 안에 소스코드가 들어가서 만들어지기 때문이다. 자세한 설명은 이미지 하단의 링크를 이용해 확인하자.

 

이클립스에서 Gralde Project 생성하기(feat. java-library)

이클립스에서 Gralde Project 생성하기 Gralde Project를 생성하려면 우선 Gradle이 설치되어 있어야 한다. Eclipse Marketplace에서 Buildship Gradle Intergration 3.0을 설치하자. installed 표시가 아니라면 설치가 되어

jiurinie.tistory.com



  • build.gradle

프로젝트 우클릭 후 Gradle - Refresh Gradle Project를 선택하여 라이브러리를 다운받도록 하자.

plugins {
    id 'java'
}

repositories {
    mavenCentral()
    maven {
        url "https://maven.repository.redhat.com/ga"
    }
}

dependencies {
    implementation 'org.hyperic:sigar:1.6.5.132-6'
    testImplementation 'junit:junit:4.13'
}

 

 

  • SigarCpuTest.java

간단하게 현재 시스템의 CPU 정보를 출력하는 소스코드이다.

package sigarMonitoring;

import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class SigarCpuTest {
	public static void main(String[] args) throws SigarException {
		Sigar sigar = new Sigar();

		CpuPerc perc = sigar.getCpuPerc();
		System.out.println("전체 CPU 사용량");
		System.out.println("유휴율 : " + CpuPerc.format(perc.getIdle()));
		System.out.println("점유율 : " + CpuPerc.format(perc.getCombined()));

		CpuInfo infos[] = sigar.getCpuInfoList();
		CpuPerc cpuList[] = null;
		cpuList = sigar.getCpuPercList();
		
		System.out.println("CPU 프로세서 수 : "+ cpuList.length);

		for (int i = 0; i < infos.length; i++) {
			CpuInfo info = infos[i];
			System.out.println((i + 1) + "CPU 정보");
			System.out.println("CPU MHz:    " + info.getMhz());
			System.out.println("CPU 벤더:    " + info.getVendor());
			System.out.println("CPU 모델 :    " + info.getModel());
			System.out.println("CPU 캐시 :    " + info.getCacheSize());
			printCpuPerc(cpuList[i]);
		}
	}

	private static void printCpuPerc(CpuPerc cpu) {
		System.out.println("CPU 사용자 사용량 : " + CpuPerc.format(cpu.getUser()));
		System.out.println("CPU 시스템 사용량 : " + CpuPerc.format(cpu.getSys()));
		System.out.println("CPU 현재 대기율 : " + CpuPerc.format(cpu.getWait()));
		System.out.println("CPU 현재 오류율 : " + CpuPerc.format(cpu.getNice()));
		System.out.println("CPU 현재 유휴 속도 : " + CpuPerc.format(cpu.getIdle()));
		System.out.println("총 CPU 사용량 : " + CpuPerc.format(cpu.getCombined()));
	}
}

 

 

  • ClassNotFoundException

위 소스코드를 구동하면 아래와 같은 ClassNotFoundException을 출력한다.

아래 링크를 클릭하면 어떤 개발자가 친절하게 만들어놓은 dll이 있다. SIGAR 라이브러리가 오래되고 업데이트가 제대로 진행되고 있지 않아 현재 윈도우 10 환경에서는 오류를 발생시키기 때문이다. 아래 링크에서 다운로드 받은 파일을 Gradle Project 생성 시 지정하였던 JAVA_HOME/bin 파일에 복사한다.

 

force sigar_set_pointer use 64bit pointer · cnstar9988/sigar@9e5dba8

fix https://github.com/hyperic/sigar/issues/141, https://github.com/hyperic/sigar/issues/138

github.com

 

 

  • CPU 정보 Output

728x90

댓글