NAS
Electronics

Java CPU auslastung oder speed via SNMP abfragen

_tnt_

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
494
Hallo,
ich wollte fragen, ob es möglich wäre meine CPU auslastung oder den speed via SNMP abfragen zu lassen?

ein freund meinte das würde gehen und als programmiersprache würde er mir java empfehlen da es dafür eine bibliothek gibt.

würde das funktionieren, hat er mit java recht, wie würde so eine grobe realisierung aussehen oder vielleicht ein link zu nem guten tutorial!

vielen dank!
 
Hallo,
möglich - bestimmt - mit JAVA..

Aber aufgrund der technischen Architektur von JAVA und dem Sachverhalt, das eine Virtualisierungsschicht zwischen deiner Anwendung und deiner Hardware liegt, ist JAVA bestimmt nicht mittel der Wahl.

C#, VB, C++ Das wären die Sprachen, mit denen ich ins Rennen gehen würde!
 
vielen dank für den link!

aber bei mir scheitert es ja schon ganz wo anders...
ich habe also SNMP unter windows 7 installiert, die services aktiviert und mir den MIB Browser geladen.
doch wie bekomme ich jetzt die OID meiner CPU?
 
So nach etwas längerer Zeit bin ich wieder zurück.
Bin jetzt dahinter gekommen, warum ich immer einen TimeOut hatte.
Hatte bei SNMP keine Community angegeben und beim MIB Browser war die falsche eingestellt.

Kann jetzt also über den MIB Browser die sysUpTime auslesen.

Habe mir also SNMP4J geholt und einen Example Code aus dem Internet angepasst.

Jetzt ist es aber so, ich möchte gerne den Code vereinfachen. Ich habe:

--> OID: .1.3.6.1.2.1.1.3.0
--> Adresse + Port: udp:127.0.0.1/161
--> Community: Home

Im Grunde sollte der Code so sein, es werden die 3 oberen Variablen + Werten angelegt und Java soll mir am Ende die sysUpTime ausgeben.

Ohne großer Abfragen oder Fehlermeldungen. Also ein ganz kurzer Code. Da ich mich in Java nicht wirklich auskenne, kommt es immer zu Fehlermeldungen, wenn ich was lösche wo ich mir denke, dass brauche ich eh nicht :D


Code:
import java.io.IOException;

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.Target;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SNMPapp {

Snmp snmp = null;
String address = null;

/**
* Constructor
* @param add
*/
public SNMPapp(String add)
{
address = add;
}

public static void main(String[] args) throws IOException {
/**
* Port 161 is used for Read and Other operations
* Port 162 is used for the trap generation
*/
SNMPapp client = new SNMPapp("udp:127.0.0.1/161");
client.start();
/**
* OID - .1.3.6.1.2.1.1.1.0 => SysDec
* OID - .1.3.6.1.2.1.1.5.0 => SysName
* => MIB explorer will be usefull here, as discussed in previous article
*/
String sysUpTime = client.getAsString(new OID(".1.3.6.1.2.1.1.3.0"));
System.out.println(sysUpTime);
}

/**
* Start the Snmp session. If you forget the listen() method you will not
* get any answers because the communication is asynchronous
* and the listen() method listens for answers.
* @throws IOException
*/
private void start() throws IOException {
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
// Do not forget this line!
transport.listen();
}

/**
* Method which takes a single OID and returns the response from the agent as a String.
* @param oid
* @return
* @throws IOException
*/
public String getAsString(OID oid) throws IOException {
ResponseEvent event = get(new OID[] { oid });
return event.getResponse().get(0).getVariable().toString();
}

/**
* This method is capable of handling multiple OIDs
* @param oids
* @return
* @throws IOException
*/
public ResponseEvent get(OID oids[]) throws IOException {
PDU pdu = new PDU();
for (OID oid : oids) {
pdu.add(new VariableBinding(oid));
}
pdu.setType(PDU.GET);
ResponseEvent event = snmp.send(pdu, getTarget(), null);
if(event != null) {
return event;
}
throw new RuntimeException("GET timed out");
}

/**
* This method returns a Target, which contains information about
* where the data should be fetched and how.
* @return
*/
private Target getTarget() {
Address targetAddress = GenericAddress.parse(address);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("Home"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
return target;
}

}
 
Zurück
Oben