SNMP netwerk monitoring

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

Post Reply
Droezel
Member
Member
Posts: 104
Joined: Sun Jul 29, 2007 4:02 pm
Location: Belgium

SNMP netwerk monitoring

Post by Droezel »

Ik heb mezelf een SNMP monitoring scriptje gemaakt dat misschien ook wel voor anderen handig kan zijn. Ik gebruik dit script om het verkeer dat door mijn Cisco ASA 5505 router gaat te monitoren.

Om het script aan de praat te krijgen moet je de DLL bestanden in de attachment plaatsen in je Windows/System32 map, en je moet de homeseer settings.ini file aanpassen als volgt:

Code: Select all

ScriptingReferences=System.XML;System.XML.dll,System.Data;System.Data.dll,System.Web;System.web.dll,SNMPDLL;SNMPDll.dll,TableReader;TableReader.dll

Het volgende script laat ik door een event elke 60 seconden uitvoeren. Ik heb natuurlijk eerst enkele devices aangemaakt om de waarden in te bewaren.

Code: Select all

Imports SNMPDll

Sub Main(parm as object)

  Dim sUptime As String = "1.3.6.1.2.1.1.3.0"
  Dim sTrafficIn As String = "1.3.6.1.2.1.2.2.1.16.1"
  Dim sTrafficOut As String = "1.3.6.1.2.1.2.2.1.10.1"
  Dim sExternalIP As String = "1.3.6.1.2.1.4.20.1.1.84.197.3.196"
  Dim iTrafficIn As Int64
  Dim iTrafficOut As Int64
  Const EventRefreshRateSecs As Integer = 60
  
  Dim TrafficIn As Decimal
  Dim TrafficOut As Decimal
  
  Dim a As SNMPAgent = New SNMPAgent("10.111.0.1", "public", "public")
  Dim uptime As SNMPObject = New SNMPObject(sUptime)
  Dim externalIP As SNMPObject = New SNMPObject(sExternalIP)
 
iTrafficIn = CType(New SNMPObject(sTrafficIn).getSimpleValue(a), Int64)
iTrafficOut = CType(New SNMPObject(sTrafficOut).getSimpleValue(a), Int64)

hs.SetDeviceString("V70",  uptime.getSimpleValue(a))
hs.SetDeviceLastChange("V70",now)

hs.SetDeviceString("V71",  externalIP.getSimpleValue(a))
hs.SetDeviceLastChange("V71",now)

TrafficIn = (iTrafficIn - hs.DeviceValue("V72")) / 1024 / EventRefreshRateSecs
TrafficOut = (iTrafficOut - hs.DeviceValue("V73")) / 1024 / EventRefreshRateSecs

hs.SetDeviceString("V74",  TrafficIn.Tostring("0.00") + " KB/sec")
hs.SetDeviceLastChange("V74",now)

hs.SetDeviceString("V75",  TrafficOut.Tostring("0.00") + " KB/sec")
hs.SetDeviceLastChange("V75",now)

hs.SetDeviceString("V72", iTrafficIn.ToString)
hs.SetDeviceValue("V72", iTrafficIn)
hs.SetDeviceLastChange("V72",now)

hs.SetDeviceString("V73",  iTrafficOut.ToString)
hs.SetDeviceValue("V73", iTrafficOut)
hs.SetDeviceLastChange("V73",now)

End Sub
Uiteindelijk met dit tot resultaat:
SNMPMonitoring.JPG
SNMPMonitoring.JPG (66.61 KiB) Viewed 8398 times
Attachments
DLLs.rar
Put these dll's into your WINDOWS/SYSTEM32 directory
(287.27 KiB) Downloaded 391 times
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Re: SNMP netwerk monitoring

Post by TANE »

Interessant.
het blijft wel lastig om de juiste SNMP waardes op te vragen.

Dit is wel een gebied wat meer aandacht verdient.
Opvragen van WMI waardes zou ook heel interessant zijn.

Een mogelijke werkwijze zou kunnen zijn om bv een opensource monitoring tool te gebruiken en via een HS-plugin data opvragen in de monitoring tool.
Enver Tanriverdi | http://blog.tane.nl
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: SNMP netwerk monitoring

Post by Digit »

Ik heb wel wat Powershell scriptjes waarmee ik wat WMI dingen wegschrijf naar SQL.
Zie http://www.hekkers.net/domotica/CPUCharts.aspx
En http://www.hekkers.net/domotica/DiskUsageCharts.aspx

Ik weet alleen niet of je wat met Powershell kunt doen vanuit HS; ik zou denken van wel.
User avatar
TANE
Forum Moderator
Forum Moderator
Posts: 4806
Joined: Fri Apr 06, 2007 9:46 pm
Location: Netherlands
Contact:

Re: SNMP netwerk monitoring

Post by TANE »

@Robert,
dat zal vast wel mogelijk zijn.
Mooiste is natuurlijk alles in een plugin onder te brengen.
Elke 10 seconden runnen van een event spreekt mij niet zo aan.
Enver Tanriverdi | http://blog.tane.nl
Droezel
Member
Member
Posts: 104
Joined: Sun Jul 29, 2007 4:02 pm
Location: Belgium

Re: SNMP netwerk monitoring

Post by Droezel »

TANE wrote:Interessant.
het blijft wel lastig om de juiste SNMP waardes op te vragen.

Dit is wel een gebied wat meer aandacht verdient.
Ik heb de MIB browser van iReasoning gebruikt om naar de juiste snmp waarden te zoeken:
http://www.ireasoning.com/mibbrowser.shtml

Dat werkt op zich wel handig. Ik heb nog even gedacht om er een plugin van te maken maar dat zou pas echt makkelijk werken als je ermee door de MIB van een divice kan bladeren om zo SNMP devices toe te voegen... een opensource monitoring tool zou hiervoor inderdaad wat handiger zijn (MRTG is misschien een optie, maar dat is naar het schijnt nogal lastig aan de praat te krijgen)
DJF3
Advanced Member
Advanced Member
Posts: 895
Joined: Thu Jul 12, 2007 9:28 am
Contact:

Re: SNMP netwerk monitoring

Post by DJF3 »

Hi,

Het is mij niet helemaal gelukt.
- Copy DLL files naar WINNT/System32 (ja, ik draai Win2k server)
- Voeg code toe aan settings.ini
- Restart home-seer
- Geen error messages

Script:

Code: Select all

Imports SNMPDll
Sub Main(parm as object)
  Dim a As SNMPAgent = New SNMPAgent("10.1.1.1", "public", "public")
  Dim drivetemp As SNMPObject = New SNMPObject("1.3.6.1.4.1.24681.1.2.11.1.3")

hs.writelog("SNMP_01", "<B>START SNMP</b>")
hs.WriteLog("SNMP_01",  drivetemp.getSimpleValue(a))
hs.writelog("SNMP_01", "<B>STOP SNMP</b>")
End Sub
bij het starten van dit test-script. Error bij regel "drivetemp.getSimpleValue(a)":
"Scripting runtime error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at SNMPDll.SNMPAgent.getValue(SNMPObject mySNMPObject) at SNMPDll.SNMPObject.getSimpleValue(SNMPAgent myAgent) at scriptcode16.scriptcode16.Main(Object parm) --- End of inner exception stack trace --- .............etc.etc."

Enig idee wat dit zou kunnen zijn?
-Misschien het verkeerde trap nummer? (MIB nummer komt uit MIB browser, type Octet-string)
-Code probleem? (filename: snmp.vb)
-DLL probleem?
Droezel
Member
Member
Posts: 104
Joined: Sun Jul 29, 2007 4:02 pm
Location: Belgium

Re: SNMP netwerk monitoring

Post by Droezel »

Als ik de mib string verander naar iets ongeldig krijg ik volgende error:

Code: Select all

[color=#FF0000]11/09/2010 10:35:58  - Error - Scripting runtime error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object.   at SNMPDll.SNMPAgent.getValue(SNMPObject mySNMPObject)   at SNMPDll.SNMPObject.getSimpleValue(SNMPAgent myAgent)   at scriptcode5.scriptcode5.Main(Object parm)   --- End of inner exception stack trace ---   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)   at Scheduler.VsaScriptHost.Invoke(String ModuleName, String MethodName, Object[] Arguments)[/color]
Lijkt me zo ongeveer dezelfde error. Misschien eens wat andere mib nummertjes proberen?
DJF3
Advanced Member
Advanced Member
Posts: 895
Joined: Thu Jul 12, 2007 9:28 am
Contact:

Post by DJF3 »

Ga ik direct testen! Oh boy, als dit gaat werken krijg ik er 50 devices bij ;-)
DJF3
Advanced Member
Advanced Member
Posts: 895
Joined: Thu Jul 12, 2007 9:28 am
Contact:

Re: SNMP netwerk monitoring

Post by DJF3 »

Update: het werkt nu en ik weet wat het probleem was.
Ik had in de MIB browser de .MIB van mijn device geladen. Alle standaard info kan ik nu uit het device halen.

Hoe kan ik in deze code een 'externe' MIB laden om meer informatie uit devices te halen?

Groeten!
DJ
DJF3
Advanced Member
Advanced Member
Posts: 895
Joined: Thu Jul 12, 2007 9:28 am
Contact:

Re: SNMP netwerk monitoring

Post by DJF3 »

Even onder voorbehoud: Het lijkt er op dat de volgende code werkt met additionele MIB files.

- Pas de code aan zodat deze naar de directory wijst waarin de .MIB files staan. ALLE .mib files die in deze directory staan worden geladen. Ik weet niet wat de invloed is op system performance.

Code: Select all

Imports SNMPDll

Sub Main(parm as object)

  Dim myMib As Mib = new Mib()
  myMib.loadDirectoryMib("C:\Program Files\HomeSeer 2\")


  Dim a As SNMPAgent = New SNMPAgent("10.1.1.1", "public", "private")
  Dim drivetemp As SNMPObject = New SNMPObject(".1.3.6.1.4.1")

hs.writelog("SNMP_01", "<B>START SNMP</b>")
hs.WriteLog("SNMP_01",  drivetemp.getSimpleValue(a))
hs.writelog("SNMP_01", "<B>STOP SNMP</b>")

End Sub
Info gevonden via: http://www.codeproject.com/KB/cs/SNMPDLL.aspx
Post Reply

Return to “Homeseer Scripts Forum”