Which of the following is the correct format for snmptrap (net-snmp) command?
snmptrap -v 2c -c public host "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification \
netSnmpExampleHeartbeatRate i 123456
or
snmptrap -v 2c -c public host "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification \
netSnmpExampleHeartbeatRate.0 i 123456
i.e., with or without .0 in the variable bindings?
Actually both of these formats work, but which one is right or what is the difference?
It depends if "scalar" or a "table row"-related varbinds are being referred to in the trap.
http://www.net-snmp.org/wiki/index.php/TUT:snmptrap states :
Note that this command also includes an (OID,type,value) triple for
the varbinds listed in the VARIABLES clause (in the same way as with
the snmpset command).
Table row example.
snmptrap -v 2c -c public host:162 .1.3.6.1.6.3.1.1.5.3 .1.3.6.1.6.3.1.1.5.3 \
ifIndex i 2 ifAdminStatus i 1 ifOperStatus i 1
For reference :
snmptranslate -m +ALL -Pu .1.3.6.1.6.3.1.1.5.3
IF-MIB::linkDown
No .0 in the variable bindings since id is taken care of by the ifIndex which pinpoints the row.
Scalar row example.
http://www.net-snmp.org/wiki/index.php/TUT:snmptrap shows example
snmptrap -v 1 -c public host UCD-TRAP-TEST-MIB::demotraps "" 6 17 "" \
SNMPv2-MIB::sysLocation.0 s "Just here"
'SNMPv2-MIB::sysLocation.0' is a scalar.
Unlike IF-MIB::linkDown example above, which was related to a table row id-ed by the ifIndex, here the .0s at the end pinpoints the scalar (like when you SET it)
Netsnmp example from original question
mibs/NET-SNMP-EXAMPLES-MIB.txt states
netSnmpExampleHeartbeatRate OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS accessible-for-notify
STATUS current
DESCRIPTION
"A simple integer object, to act as a payload for the
netSnmpExampleHeartbeatNotification. The value has
no real meaning, but is nominally the interval (in
seconds) between successive heartbeat notifications."
::= { netSnmpExampleNotificationObjects 1 }
i.e. it is not a real, identifiable, accessible scalar so I recommend no .0.
Related
Tring to go through new mib i added to mibs file, i have run this command as a test
snmpwalk -v3 -u $USER-l authPriv -a SHA -A "$PASS" -x AES -X $PASS 10.x.x.x panCommonMib
and i think it made the walk on the entire PAN-COMMON-MIB which is good, but some objects there are understandable like
PAN-COMMON-MIB::panSysSwVersion.0 = STRING: x.1.x
And i can translate and know what this obj do.
And some are like that:
PAN-COMMON-MIB::panCommonObjs.7.4.4.1.6.6 = INTEGER: 0
PAN-COMMON-MIB::panCommonObjs.7.5.1.1.201 = STRING: "Log Collector"
PAN-COMMON-MIB::panCommonObjs.7.5.1.2.0 = ""
PAN-COMMON-MIB::panCommonObjs.7.5.1.2.101 = ""
If i try to translate them it gives the textual translate of : panCommonObjs
snmptranslate -IR -Td -OS PAN-COMMON-MIB::panCommonObjs.7.4.4.1.6.6
PAN-COMMON-MIB::panCommonObjs.7.4.4.1.6.6
panCommonObjs OBJECT-IDENTITY
-- FROM PAN-COMMON-MIB
DESCRIPTION "
Sub-tree for common MIB objects."
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) panRoot(25461) panMibs(2) panCommonMib(1) panCommonObjs(2) 7 4 4 1 6 6 }
I want to understand what is
INTEGER: 0 is, how can i translate this?
Thanks.
Maybe your MIBs are outdated.
snmptranslate -IR -Td -OS PAN-COMMON-MIB::panCommonObjs.7.4.4.1.6.6
PAN-COMMON-MIB::panDeviceLoggingExtFwdStatsTable1minAvgSendRate.6
panDeviceLoggingExtFwdStatsTable1minAvgSendRate OBJECT-TYPE
-- FROM PAN-COMMON-MIB
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Counter for average send rate over 1 minute interval."
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) panRoot(25461) panMibs(2) panCommonMib(1) panCommonObjs(2) panDeviceLogging(7) panDeviceLoggingExtFwd(4) panDeviceLoggingExtFwdStatsTable(4) panDeviceLoggingExtFwdStatsEntry(1) panDeviceLoggingExtFwdStatsTable1minAvgSendRate(6) 6 }
I got them from github
When I run any commands such as:
# snmptranslate .1.3.6.1.4.1.28318.1.1.3
SNMPv2-SMI::enterprises.28318.1.1.3
# snmpwalk 58.196.58.149 1.3.6.1.4.1.28318.1.1.3
SNMPv2-SMI::enterprises.28318.1.1.3.1.0 = STRING: "89-14-a8-52-a4-46"
SNMPv2-SMI::enterprises.28318.1.1.3.2.0 = STRING: "058.196.58.149/255.255.255.252"
SNMPv2-SMI::enterprises.28318.1.1.3.3.0 = STRING: "058.196.58.149"
SNMPv2-SMI::enterprises.28318.1.1.3.6.0 = STRING: "137.010.060.016"
SNMPv2-SMI::enterprises.28318.1.1.3.7.0 = STRING: "137.010.060.017"
SNMPv2-SMI::enterprises.28318.1.1.3.8.0 = INTEGER: 0
SNMPv2-SMI::enterprises.28318.1.1.3.9.0 = INTEGER: 0
SNMPv2-SMI::enterprises.28318.1.1.3.10.0 = STRING: "reserved"
I would like net-snmp to translate .1.3.6.1.4.1.28318.1.1.3 to the textual MIB formats. I'm not sure how to debug this.
I have this in my /etc/snmp/snmp.conf:
# cat /etc/snmp/snmp.conf
mibdirs /usr/share/snmp/mibs
defVersion 2c
defCommunity public
Where all my MIBs are in /usr/share/snmp/mibs. I know that 1.3.6.1.4.1.28318.1.1.3.0 corresponds to a textual MIB name of mac representing the mac address.
Any idea how to debug what has gone wrong and fix the problem?
The issue is that net-snmp doesn't load MIBs even if they're specified in the MIB directory.
So by adding mibs to the /etc/snmp/snmp.conf file fixed it:
# cat /etc/snmp/snmp.conf
mibdirs /usr/share/snmp/mibs
mibs +MYMIB
defVersion 2c
defCommunity public
The OID is translated properly. This can also be debugged by doing a:
$ snmptranslate -m +MYMIB -IR -On hello
MYMIB::hello = STRING: "WORLD"
Which will either output correctly above or show an issue. Note the -m +MYMIB doesn't have to be there if in the /etc/snmp/snmp.conf file.
I am trying to set some OID but seems that it gives below error "No Such Instance currently exists at this OID" which should not be the case as i am able to get/walk same OID. so its present.
root#m-snm:~# snmpwalk -v 2c -c public 10.2.4.19 .1.3.6.1.2.1.2.2.1.7.3
iso.3.6.1.x.x.x.x.x.7.3 = INTEGER: 1
root#m-snm:~# snmpset -v 2c -c public 10.2.4.19 .1.3.6.1.2.1.2.2.1.7.3 i 2
iso.3.6.1.x.x.x.x.x.7.3 = **No Such Instance currently exists at this OID**
root#m-snm:~# snmpget -v 2c -c public 10.2.4.19 .1.3.6.1.2.1.2.2.1.7.3
iso.3.6.1.x.x.x.x.x.7.3 = INTEGER: 1
Is it the permission issue ? Or i am not allowed to write ? or the field itself is not writable ? how can check what field are r/w and what are readonly
I can ask to a snmp agent the query:
snmpwalk -v2c -c public 192.168.56.70 1.3.6.1.2.1.31.1.1.1.1.1
I recieve "lo" (loopback interface) as the answer. My question is: How I can access that OID through the names instead of using the OID numbers? That should be as follows:
snmpwalk -v2c -c public 192.168.56.70 iso.identified-organization.dod.internet.mgmt.mib-2.ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName
If I send this last query to the snmp agent, i get "Unknown Object Identification". Which changes should I do in the snmp agent configuration to get the same answer as when I am asking through the OID?
Any help will be appreciated, thanks!
Normally I'd use the simple symbolic name e.g.
snmptranslate -M+. -m +ALL 1.3.6.1.2.1.31.1.1.1.1.1
IF-MIB::ifName.1
From the agent's perspective the next two are the same, i.e. the netsnmp snmpwalk utility handles the symbol translations.
snmpwalk -v2c -c public 192.168.56.70 1.3.6.1.2.1.31.1.1.1.1.1
IF-MIB::ifName.1 = STRING: lo
Symbol version :
snmpwalk -v2c -c public 192.168.56.70 IF-MIB::ifName.1
IF-MIB::ifName.1 = STRING: lo
Include the MIB files if they're not in your default path -M+. -m +ALL
snmpwalk -v2c -c public vvx1 IF-MIB::ifName.1
IF-MIB::ifName.1 = STRING: lo
I have the nagios with two host. one is localhost(10.10.62.5) and another one is
ubuntu(10.10.62.10). i set up nagios monitor on localhost.
host configuration files are below
localhost.cfg:
define host{
use linux-server
host_name localhost
alias localhost
address 10.10.62.5
}
define service{
host_name localhost
service_description WSN_COUNT
is_volatile 1
check_command check-host-alive
max_check_attempts 1
normal_check_interval 1
retry_check_interval 1
active_checks_enabled 0
passive_checks_enabled 1
check_period 24x7
notification_interval 31536000
notification_period 24x7
notification_options w,u,c
notifications_enabled 1
}
ubuntu.cfg:
define host{
use linux-server
host_name ubuntu
alias ubuntu
address 10.10.62.10
}
define service{
host_name localhost
service_description WSN_COUNT
is_volatile 1
check_command check-host-alive
max_check_attempts 1
normal_check_interval 1
retry_check_interval 1
active_checks_enabled 0
passive_checks_enabled 1
check_period 24x7
notification_interval 31536000
notification_period 24x7
notification_options w,u,c
notifications_enabled 1
}
MIBfile:
NAGIOS-TRAP-TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS enterprises FROM SNMPv2-SMI;
nagiostests OBJECT IDENTIFIER ::= { enterprises 0 }
nagiostraps OBJECT IDENTIFIER ::= { nagiostests 1 }
nagiosnotifs OBJECT IDENTIFIER ::= { nagiostests 2 }
WSNcount NOTIFICATION-TYPE
OBJECTS { sysLocation }
STATUS current
DESCRIPTION "SNMPv2c notification"
::= { nagiosnotifs 9 }
END
I used snmptt(net-snmp) to integrate the traps with nagios. configuration files are
snmptt.conf.local:
EVENT WSNcount .1.3.6.1.4.1.0.2.1 "Status Events" Normal
FORMAT SNMPv2c notification $*
EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result localhost WSN_COUNT 1 "SNMPv2c notification $*"
SDESC
SNMPv2c notification
Variables:
1: sysLocation
EDESC
snmptt.conf.local:
EVENT WSNcount .1.3.6.1.4.1.0.2.1 "Status Events" Normal
FORMAT SNMPv2c notification $*
EXEC /usr/local/nagios/libexec/eventhandlers/submit_check_result ubuntu WSN_COUNT 1 "SNMPv2c notification $*"
SDESC
SNMPv2c notification
Variables:
1: sysLocation
EDESC
When i sending trap from ubuntu(10.10.62.10) machine using following command, trap sending to both hosts in nagios.
snmptrap -v 2c -c private 10.10.62.5 "" NAGIOS-TRAP-TEST-MIB::RFIDcount SNMPv2-MIB::sysLocation.0 s "snmptest trap"
PLEASE help me with send trap to particular host.. how it is possible...
I think you misinterpreted what a SNMP-trap is. A SNMP-trap is a SNMP message sent to your monitoring system/service from a network device such as a router, switch, blade, cluster, ..
I guess the thing you want to do is search the MIB-file for the particular network device you want to monitor and search the OID that matches the information you want the gather from that specific device.
The device you want to monitor through SNMP has to have SNMP enabled in it's configuration (webbased or something..).
You can do a SNMPwalk to this device to see all available OIDs :
snmpwalk -v 2c -c public <ip address network device>
-c stands for 'community' and by default this is 'public', you can edit this in the configuration of your network device.
-v stands for the version of SNMP you want to use.
When you find the OID which provides you the device's information you wore looking for you can do the following command (or put this in a perl or bash script) :
snmpwalk -v 2c -c public <ip address network device> <OID>
When you made this script you can define a command for this script in commands.cfg :
#'check_lefthand' command definition
define command{
command_name check_lefthand
command_line $USER1$/lefthands.pl $ARG1$ $ARG2$
}
You can now use this check_ in your service definitions of Nagios.