Ayant récemment fait l’acquisition d’un serveur NAS Iomega « StorCenter ix2-200 Network Storage 2 To Ethernet » il m’a fallu monitorer celui-ci.
Ce que je vais vous montrer est très basique et sera amélioré par la suite, les intéressés auront au moins un début de piste et pour les courageux qui pourront l’amélioré, je suis preneur.
Nous allons donc voir comment récupérer des informations de notre NAS à partir d’un autre ordinateur, ces informations pourrons être placé par la suite dans le cadre d’un monitoring avec Xymon (anciennement Hobbit), Nagios ou autre. Je ne détaillerai pas ce point ici.
Dans ce mini howto, l’adresse ip 192.168.1.111 sera ici mon NAS et 192.168.1.120 sera l’ordinateur qui récuperera les informations.
Alors une fois votre NAS installé, rendez-vous dans l’interface d’administration : « Paramètres / Services réseau / SNMP »
Renseigner ensuite ainsi en modifiant l’adresse ip suivant votre installation.
Valider ensuite vos modifications puis rendez-vous sur le pc sur lequel vous voulez recupérer les informations, nous intercepterons dans cet exemple la vitesse du ventilateur et la température du NAS.
Sous Debian, installer le paquet snmp:
sudo aptitude install snmp
Sous MacOSX, j’ai snmpwalk en natif.
Créer ensuite le script bash et rendez le exécutable (chmod u+x) avec le code suivant:
#!/bin/bash echo "Hostname NAS: `snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.10.111 RFC1213-MIB::sysName.0 | cut -d' ' -f4`" echo "Model: `snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.10.111 RFC1155-SMI::enterprises.1139.10.1.1.0 | cut -d' ' -f4-7`" echo "Temp NAS: `snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.10.111 RFC1155-SMI::enterprises.1139.10.6.2.1.3.1 | cut -d' ' -f 4` °C" echo "Uptime: `snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.10.111 DISMAN-EVENT-MIB::sysUpTimeInstance | cut -d' ' -f 5-7`" echo "Fan NAS: `snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.10.111 RFC1155-SMI::enterprises.1139.10.6.1.1.3.1 | cut -d' ' -f 4` RPM"
N’oubliez pas de changer P@$$w0Rd par le mot de passe que vous avez mis précédemment dans la configuration SNMP du NAS.
Si tout va bien vous pouvez lancer le script et vous aurez un résultat similaire:
root@serveur:~# ./lescript.sh Hostname NAS: "Stockage" Model: "Iomega StorCenter ix2-200" Temp NAS: 48 °C Uptime: 34 days, 15:27:01.80 Fan NAS: 0 RPM
Voilà, je n’ai pas eu le temps de chercher d’autres valeur, il faudrait utiliser la MIB du NAS mais je ne l’ai pas encore trouvé/cherché.
Script mis à jour, il manque encore des information importante, oui … c’est en cours de recherche.
Vous pouvez tout de même analyser toute les informations envoyé par le NAS avec la commande suivante.
snmpwalk -v3 -u public -l AuthNoPriv -a MD5 -A P@$$w0Rd -c public -m ALL 192.168.1.111 .
N’oubliez pas le . (point) à la fin de la commande précédente, c’est le plus important.
MàJ: le 13/01/2010.
MàJ: le 10/06/2010
Grâce au gentil monsieur @anotherthomas, j’ai enfin ce que je cherchais !
Je vous met une archive en pièce jointe avec la MIB et quelques infos!
SOHO-MIB DEFINITIONS ::= BEGIN
IMPORTS
RowStatus, DisplayString
FROM SNMPv2-TC
DisplayString
FROM RFC1213-MIB
enterprises, MODULE-IDENTITY, OBJECT-TYPE, Integer32, NOTIFICATION-TYPE, IpAddress, Gauge32
FROM SNMPv2-SMI;
emc MODULE-IDENTITY
LAST-UPDATED "200703011011Z"
ORGANIZATION "EMC"
CONTACT-INFO "ding_deric@emc.com"
DESCRIPTION "MIB for EMC SOHO"
REVISION "200703011011Z"
DESCRIPTION ""
::= { enterprises 1139 }
org OBJECT IDENTIFIER
::= { iso 3 }
dod OBJECT IDENTIFIER
::= { org 6 }
internet OBJECT IDENTIFIER
::= { dod 1 }
private OBJECT IDENTIFIER
::= { internet 4 }
enterprises OBJECT IDENTIFIER
::= { private 1 }
soho OBJECT IDENTIFIER
::= { emc 10 }
sohoInfo OBJECT IDENTIFIER
::= { soho 1 }
systemPerformance OBJECT IDENTIFIER
::= { soho 2 }
sohoFunctionStatus OBJECT IDENTIFIER
::= { soho 3 }
sohoStorage OBJECT IDENTIFIER
::= { soho 4 }
sohoDevice OBJECT IDENTIFIER
::= { soho 5 }
sohoSensor OBJECT IDENTIFIER
::= { soho 6 }
sohoEvent OBJECT IDENTIFIER
::= { soho 7 }
sohoNotifications OBJECT IDENTIFIER
::= { soho 8 }
deviceDescr OBJECT-TYPE
SYNTAX DisplayString ( SIZE ( 0 .. 255 ) )
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Description of this device."
DEFVAL { "EMC SOHO BOX" }
::= { sohoInfo 1 }
deviceName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "SOHO host name."
::= { sohoInfo 2 }
netConfig OBJECT IDENTIFIER
::= { sohoInfo 3 }
ioTable OBJECT-TYPE
SYNTAX SEQUENCE OF IoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "A table of disk I/O performance."
::= { systemPerformance 1 }
ioEntry OBJECT-TYPE
SYNTAX IoEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry of one disk I/O performance."
INDEX { ioIndex }
::= { ioTable 1 }
IoEntry ::= SEQUENCE {
ioIndex Integer32,
diskName OCTET STRING,
ioMgrs OCTET STRING,
ioMgws OCTET STRING,
ioReqrs OCTET STRING,
ioReqws OCTET STRING,
ioKbrs OCTET STRING,
ioKbws OCTET STRING,
ioAvgQueue OCTET STRING,
ioAvgWait OCTET STRING,
ioAvgSvc OCTET STRING,
ioAvgUtil OCTET STRING,
ioCpuTime OCTET STRING
}
ioIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "ioIndex"
::= { ioEntry 1 }
diskName OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Disk names such as sda and so on"
::= { ioEntry 2 }
ioMgrs OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Read merges per second."
::= { ioEntry 3 }
ioMgws OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Write merges per second."
::= { ioEntry 4 }
ioReqrs OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Read io requests per second."
::= { ioEntry 5 }
ioReqws OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Write io requests per second."
::= { ioEntry 6 }
ioKbrs OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Kilobytes read per second."
::= { ioEntry 7 }
ioKbws OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Kilobytes written per second."
::= { ioEntry 8 }
ioAvgQueue OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Average queue length."
::= { ioEntry 9 }
ioAvgWait OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Average waiting time (queue + service)"
::= { ioEntry 10 }
ioAvgSvc OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Average service time at disk."
::= { ioEntry 11 }
ioAvgUtil OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Average disk utilization."
::= { ioEntry 12 }
ioCpuTime OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Percentage of CPU time during which I/O requests were issued to the device."
::= { ioEntry 13 }
bkupTable OBJECT-TYPE
SYNTAX SEQUENCE OF BkupEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "A table of backup status."
::= { sohoFunctionStatus 1 }
bkupEntry OBJECT-TYPE
SYNTAX BkupEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry of backup status."
INDEX { bkupIndex }
::= { bkupTable 1 }
BkupEntry ::= SEQUENCE {
bkupIndex Integer32,
bkupClient OCTET STRING,
bkupltStatus OCTET STRING,
bkupTotalSpace OCTET STRING
}
bkupIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Record backup status"
::= { bkupEntry 1 }
bkupClient OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Client Name"
::= { bkupEntry 2 }
bkupltStatus OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Last backup status"
::= { bkupEntry 3 }
bkupTotalSpace OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Total space"
::= { bkupEntry 4 }
remoteAccess OBJECT IDENTIFIER
::= { sohoFunctionStatus 2 }
conTable OBJECT-TYPE
SYNTAX SEQUENCE OF ConEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table for connected client count"
::= { sohoFunctionStatus 3 }
conEntry OBJECT-TYPE
SYNTAX ConEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry for connected client count"
INDEX { conIndex }
::= { conTable 1 }
ConEntry ::= SEQUENCE {
conIndex Integer32,
conCount Integer32,
conProtocol DisplayString
}
conIndex OBJECT-TYPE
SYNTAX Integer32 ( -2147483648 .. 2147483647 )
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index for entry"
::= { conEntry 1 }
conCount OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Connected client count for a given protocol"
DEFVAL { 0 }
::= { conEntry 2 }
conProtocol OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Protocol used by this kind of clients"
::= { conEntry 3 }
mediaService OBJECT IDENTIFIER
::= { sohoFunctionStatus 4 }
raidStatus OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Description of raid status. There are five different status:
NORMAL
REBUILDING
DEGRADED
REBUILDFS
FAULTED"
::= { sohoStorage 1 }
raidLevel OBJECT-TYPE
SYNTAX Integer32 ( -2147483648 .. 2147483647 )
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Raid level such as raid5, raid10"
::= { sohoStorage 2 }
diskTable OBJECT-TYPE
SYNTAX SEQUENCE OF DiskEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "The table of disks that build the RAID."
::= { sohoStorage 3 }
diskEntry OBJECT-TYPE
SYNTAX DiskEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry of one disk."
INDEX { diskIndex }
::= { diskTable 1 }
DiskEntry ::= SEQUENCE {
diskIndex Integer32,
diskID OCTET STRING,
diskSize OCTET STRING,
diskStatus OCTET STRING
}
diskIndex OBJECT-TYPE
SYNTAX Integer32 ( -2147483648 .. 2147483647 )
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index of disk entry"
::= { diskEntry 1 }
diskID OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "ID of disk in array"
::= { diskEntry 2 }
diskSize OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Capacity of disk"
::= { diskEntry 3 }
diskStatus OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Status of Disk. There are four status:
NORMAL
FOREIGN
FAULTED
MISSING"
::= { diskEntry 4 }
usbTable OBJECT-TYPE
SYNTAX SEQUENCE OF UsbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table of connected usb devices."
::= { sohoDevice 1 }
usbEntry OBJECT-TYPE
SYNTAX UsbEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry for connected USB device"
INDEX { usbIndex }
::= { usbTable 1 }
UsbEntry ::= SEQUENCE {
usbIndex Integer32,
usbManufacture DisplayString,
usbModel DisplayString,
usbType Integer32
}
usbIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index for entry in the table"
::= { usbEntry 1 }
usbManufacture OBJECT-TYPE
SYNTAX DisplayString ( SIZE ( 0 .. 255 ) )
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Manufucture of the device"
::= { usbEntry 2 }
usbModel OBJECT-TYPE
SYNTAX DisplayString ( SIZE ( 0 .. 255 ) )
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Model of the USB device"
::= { usbEntry 3 }
usbType OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "USB device type(such UPS(3), PTP(6), printer(7) and so on)"
::= { usbEntry 4 }
fanTable OBJECT-TYPE
SYNTAX SEQUENCE OF FanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table for fan sensors"
::= { sohoSensor 1 }
fanEntry OBJECT-TYPE
SYNTAX FanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry for fan sensor"
INDEX { fanIndex }
::= { fanTable 1 }
FanEntry ::= SEQUENCE {
fanIndex Integer32,
fanName DisplayString,
fanValue Gauge32
}
fanIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index for the entry"
::= { fanEntry 1 }
fanName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Name of the fan sensor"
::= { fanEntry 2 }
fanValue OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Rotation speed of the fan in RPM"
::= { fanEntry 3 }
tempTable OBJECT-TYPE
SYNTAX SEQUENCE OF TempEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table for temperature sensor"
::= { sohoSensor 2 }
tempEntry OBJECT-TYPE
SYNTAX TempEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry for temperature sensor"
INDEX { tempIndex }
::= { tempTable 1 }
TempEntry ::= SEQUENCE {
tempIndex Integer32,
tempName DisplayString,
tempValue Gauge32
}
tempIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index for entry"
::= { tempEntry 1 }
tempName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Name of the temperature sensor"
::= { tempEntry 2 }
tempValue OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The temperature of the sensor in mC."
::= { tempEntry 3 }
voltTable OBJECT-TYPE
SYNTAX SEQUENCE OF VoltEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Table for volt sensor"
::= { sohoSensor 3 }
voltEntry OBJECT-TYPE
SYNTAX VoltEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry for volt sensor"
INDEX { voltIndex }
::= { voltTable 1 }
VoltEntry ::= SEQUENCE {
voltIndex Integer32,
voltName DisplayString,
voltValue Gauge32
}
voltIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Index for the entry"
::= { voltEntry 1 }
voltName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Name of the volt sensor"
::= { voltEntry 2 }
voltValue OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The voltage in mV"
::= { voltEntry 3 }
eventID OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "ID of the event"
::= { sohoEvent 1 }
eventText OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Description of the event."
::= { sohoEvent 2 }
sohoNotificationError NOTIFICATION-TYPE
OBJECTS { deviceDiscrb, deviceName, eventID, eventText }
STATUS current
DESCRIPTION "Notifications for failure events."
::= { sohoNotifications 1 }
dns0 OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The first DNS server"
::= { netConfig 1 }
dns1 OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Backup DNS server"
::= { netConfig 2 }
wins0 OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The first wins server"
::= { netConfig 3 }
wins1 OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Backup wins server"
::= { netConfig 4 }
raEnabled OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Whether RA is enabled
0 Disable
1 Enable"
::= { remoteAccess 1 }
mediaServiceEnabled OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Whether media service is enabled
0 disable
1 enable"
::= { mediaService 1 }
END
MIB Soho iomega _ EMC