1、背景介绍
需要开发agent从服务器上采集服务器性能数据,之前是vb写的程序取数据,然后Java通过telnet协议去调用vb程序取性能数据。鉴于Telnet协议不安全方面考虑,所有选择其他方案。
2、目前用到的新技术
Sigar,
Sigar是Hyperic-hq产品的基础包,是HypericHQ主要的数据收集组件。它用来从许多平台收集系统和处理信息.
这些平台包括:Linux,Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX.
Sigar有C,C#,Java和PerlAPI,java版的API为sigar.jarsigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。Windows操作系统下Sigar.jar依赖sigar-amd64-winnt.dll或sigar-x86-winnt.dll,linux操作系统下则依赖libsigar-amd64-linux.so或libsigar-x86-linux.so
Hyperic-hq官方网站:http://www.hyperic.com
Sigar.jar下载地址:http://sigar.hyperic.com
Sigar API提供一个方便的接口来收集系统信息,如:
◆系统内存,页面交换,cpu,平均负载,运行时间,登录信息
◆每个进程占用的内存,cpu,帐号信息,状态,参数,环境,打开的文件
◆文件系统探测和度量
◆网络接口探测,配置信息和度量
◆网络路由和连接表
3、Sigar项目中详细介绍
Pom.xml
<dependency>
<groupId>org.fusesource</groupId>
<artifactId>sigar</artifactId>
<version>1.6.4</version>
</dependency>
sigar的基本库文件(sigar-amd64-winnt.dll,sigar-x86-winnt.dll,libsigar-amd64-linux.so或libsigar-x86-linux.so)需要放到classpath里。
package com.pcitc.integrate.agent.sigar;
import java.io.File;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.DirUsage;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetConnection;
import org.hyperic.sigar.NetFlags;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.NfsFileSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.SigarLoader;
import org.hyperic.sigar.SigarProxy;
import org.hyperic.sigar.SigarProxyCache;
import org.hyperic.sigar.Swap;
import org.hyperic.sigar.Tcp;
import org.hyperic.sigar.util.PrintfFormat;
public class SystemInfo {
private Sigar sigar ;
private SigarProxy proxy;
private StringBuilder info = new StringBuilder();
private void sigarInit(boolean isProxy) {
sigar = new Sigar();
if(isProxy)
proxy = SigarProxyCache.newInstance(this.sigar);
}
private void shutdown() {
this.sigar.close();
}
public String getInfo() {