logstash-input-snmp 0.1.0.beta4 → 0.1.0.beta5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/logstash/inputs/snmp.rb +75 -12
- data/lib/logstash/inputs/snmp/base_client.rb +162 -0
- data/lib/logstash/inputs/snmp/client.rb +11 -109
- data/lib/logstash/inputs/snmp/clientv3.rb +139 -0
- data/lib/logstash/inputs/snmp/mib.rb +22 -20
- data/lib/mibs/ietf/ACCOUNTING-CONTROL-MIB.dic +1316 -0
- data/lib/mibs/ietf/ADSL-LINE-EXT-MIB.dic +1724 -0
- data/lib/mibs/ietf/ADSL-LINE-MIB.dic +7297 -0
- data/lib/mibs/ietf/ADSL-TC-MIB.dic +160 -0
- data/lib/mibs/ietf/ADSL2-LINE-MIB.dic +8663 -0
- data/lib/mibs/ietf/ADSL2-LINE-TC-MIB.dic +1462 -0
- data/lib/mibs/ietf/AGENTX-MIB.dic +817 -0
- data/lib/mibs/ietf/AGGREGATE-MIB.dic +708 -0
- data/lib/mibs/ietf/ALARM-MIB.dic +1734 -0
- data/lib/mibs/ietf/APM-MIB.dic +2870 -0
- data/lib/mibs/ietf/APPC-MIB.dic +8687 -0
- data/lib/mibs/ietf/APPLETALK-MIB.dic +4399 -0
- data/lib/mibs/ietf/APPLICATION-MIB.dic +3750 -0
- data/lib/mibs/ietf/APPN-DLUR-MIB.dic +972 -0
- data/lib/mibs/ietf/APPN-MIB.dic +9364 -0
- data/lib/mibs/ietf/APPN-TRAP-MIB.dic +664 -0
- data/lib/mibs/ietf/APS-MIB.dic +2430 -0
- data/lib/mibs/ietf/ARC-MIB.dic +552 -0
- data/lib/mibs/ietf/ATM-ACCOUNTING-INFORMATION-MIB.dic +816 -0
- data/lib/mibs/ietf/ATM-MIB.dic +4104 -0
- data/lib/mibs/ietf/ATM-TC-MIB.dic +914 -0
- data/lib/mibs/ietf/ATM2-MIB.dic +4715 -0
- data/lib/mibs/ietf/BFD-STD-MIB.dic +2367 -0
- data/lib/mibs/ietf/BFD-TC-STD-MIB.dic +202 -0
- data/lib/mibs/ietf/BGP4-MIB.dic +1931 -0
- data/lib/mibs/ietf/BLDG-HVAC-MIB.dic +812 -0
- data/lib/mibs/ietf/BRIDGE-MIB.dic +2257 -0
- data/lib/mibs/ietf/CAPWAP-BASE-MIB.dic +4128 -0
- data/lib/mibs/ietf/CAPWAP-DOT11-MIB.dic +482 -0
- data/lib/mibs/ietf/CHARACTER-MIB.dic +1140 -0
- data/lib/mibs/ietf/CIRCUIT-IF-MIB.dic +493 -0
- data/lib/mibs/ietf/CLNS-MIB.dic +1702 -0
- data/lib/mibs/ietf/COFFEE-POT-MIB.dic +282 -0
- data/lib/mibs/ietf/COPS-CLIENT-MIB.dic +1270 -0
- data/lib/mibs/ietf/DECNET-PHIV-MIB.dic +5837 -0
- data/lib/mibs/ietf/DIAL-CONTROL-MIB.dic +2139 -0
- data/lib/mibs/ietf/DIFFSERV-CONFIG-MIB.dic +378 -0
- data/lib/mibs/ietf/DIFFSERV-MIB.dic +5073 -0
- data/lib/mibs/ietf/DIRECTORY-SERVER-MIB.dic +1041 -0
- data/lib/mibs/ietf/DISMAN-EVENT-MIB.dic +3151 -0
- data/lib/mibs/ietf/DISMAN-EXPRESSION-MIB.dic +1716 -0
- data/lib/mibs/ietf/DISMAN-NSLOOKUP-MIB.dic +698 -0
- data/lib/mibs/ietf/DISMAN-PING-MIB.dic +2635 -0
- data/lib/mibs/ietf/DISMAN-SCHEDULE-MIB.dic +1744 -0
- data/lib/mibs/ietf/DISMAN-SCRIPT-MIB.dic +2820 -0
- data/lib/mibs/ietf/DISMAN-TRACEROUTE-MIB.dic +3239 -0
- data/lib/mibs/ietf/DLSW-MIB.dic +5635 -0
- data/lib/mibs/ietf/DNS-RESOLVER-MIB.dic +1765 -0
- data/lib/mibs/ietf/DNS-SERVER-MIB.dic +1593 -0
- data/lib/mibs/ietf/DOCS-BPI-MIB.dic +2634 -0
- data/lib/mibs/ietf/DOCS-CABLE-DEVICE-MIB.dic +5042 -0
- data/lib/mibs/ietf/DOCS-IETF-BPI2-MIB.dic +5478 -0
- data/lib/mibs/ietf/DOCS-IETF-CABLE-DEVICE-NOTIFICATION-MIB.dic +2447 -0
- data/lib/mibs/ietf/DOCS-IETF-QOS-MIB.dic +4886 -0
- data/lib/mibs/ietf/DOCS-IETF-SUBMGT-MIB.dic +1331 -0
- data/lib/mibs/ietf/DOCS-IF-MIB.dic +7980 -0
- data/lib/mibs/ietf/DOT12-IF-MIB.dic +1066 -0
- data/lib/mibs/ietf/DOT12-RPTR-MIB.dic +2669 -0
- data/lib/mibs/ietf/DOT3-EPON-MIB.dic +3297 -0
- data/lib/mibs/ietf/DOT3-OAM-MIB.dic +2830 -0
- data/lib/mibs/ietf/DS0-MIB.dic +466 -0
- data/lib/mibs/ietf/DS0BUNDLE-MIB.dic +468 -0
- data/lib/mibs/ietf/DS1-MIB.dic +4890 -0
- data/lib/mibs/ietf/DS3-MIB.dic +2719 -0
- data/lib/mibs/ietf/DSA-MIB.dic +888 -0
- data/lib/mibs/ietf/DSMON-MIB.dic +6177 -0
- data/lib/mibs/ietf/DVB-RCS-MIB.dic +5764 -0
- data/lib/mibs/ietf/EBN-MIB.dic +1026 -0
- data/lib/mibs/ietf/EFM-CU-MIB.dic +4335 -0
- data/lib/mibs/ietf/ENTITY-MIB.dic +2235 -0
- data/lib/mibs/ietf/ENTITY-SENSOR-MIB.dic +653 -0
- data/lib/mibs/ietf/ENTITY-STATE-MIB.dic +457 -0
- data/lib/mibs/ietf/ENTITY-STATE-TC-MIB.dic +260 -0
- data/lib/mibs/ietf/ETHER-CHIPSET-MIB.dic +787 -0
- data/lib/mibs/ietf/EtherLike-MIB.dic +2548 -0
- data/lib/mibs/ietf/FC-MGMT-MIB.dic +3465 -0
- data/lib/mibs/ietf/FCIP-MGMT-MIB.dic +1596 -0
- data/lib/mibs/ietf/FDDI-SMT73-MIB.dic +3378 -0
- data/lib/mibs/ietf/FIBRE-CHANNEL-FE-MIB.dic +2504 -0
- data/lib/mibs/ietf/FLOAT-TC-MIB.dic +128 -0
- data/lib/mibs/ietf/FLOW-METER-MIB.dic +3201 -0
- data/lib/mibs/ietf/FORCES-MIB.dic +598 -0
- data/lib/mibs/ietf/FR-ATM-PVC-SERVICE-IWF-MIB.dic +1601 -0
- data/lib/mibs/ietf/FR-MFR-MIB.dic +1351 -0
- data/lib/mibs/ietf/FRAME-RELAY-DTE-MIB.dic +1688 -0
- data/lib/mibs/ietf/FRNETSERV-MIB.dic +3940 -0
- data/lib/mibs/ietf/FRSLD-MIB.dic +2580 -0
- data/lib/mibs/ietf/Finisher-MIB.dic +1416 -0
- data/lib/mibs/ietf/GMPLS-LABEL-STD-MIB.dic +965 -0
- data/lib/mibs/ietf/GMPLS-LSR-STD-MIB.dic +693 -0
- data/lib/mibs/ietf/GMPLS-TC-STD-MIB.dic +180 -0
- data/lib/mibs/ietf/GMPLS-TE-STD-MIB.dic +2542 -0
- data/lib/mibs/ietf/GSMP-MIB.dic +2468 -0
- data/lib/mibs/ietf/HC-ALARM-MIB.dic +1050 -0
- data/lib/mibs/ietf/HC-PerfHist-TC-MIB.dic +310 -0
- data/lib/mibs/ietf/HC-RMON-MIB.dic +4456 -0
- data/lib/mibs/ietf/HDSL2-SHDSL-LINE-MIB.dic +3955 -0
- data/lib/mibs/ietf/HOST-RESOURCES-MIB.dic +2453 -0
- data/lib/mibs/ietf/HPR-IP-MIB.dic +640 -0
- data/lib/mibs/ietf/HPR-MIB.dic +1959 -0
- data/lib/mibs/ietf/IANA-ITU-ALARM-TC-MIB.dic +936 -0
- data/lib/mibs/ietf/IF-CAP-STACK-MIB.dic +356 -0
- data/lib/mibs/ietf/IF-INVERTED-STACK-MIB.dic +220 -0
- data/lib/mibs/ietf/IF-MIB.dic +2753 -0
- data/lib/mibs/ietf/IFCP-MGMT-MIB.dic +1717 -0
- data/lib/mibs/ietf/IGMP-STD-MIB.dic +809 -0
- data/lib/mibs/ietf/INET-ADDRESS-MIB.dic +570 -0
- data/lib/mibs/ietf/INTEGRATED-SERVICES-GUARANTEED-MIB.dic +319 -0
- data/lib/mibs/ietf/INTEGRATED-SERVICES-MIB.dic +1196 -0
- data/lib/mibs/ietf/INTERFACETOPN-MIB.dic +1705 -0
- data/lib/mibs/ietf/IP-FORWARD-MIB.dic +1853 -0
- data/lib/mibs/ietf/IP-MIB.dic +7064 -0
- data/lib/mibs/ietf/IPATM-IPMC-MIB.dic +4830 -0
- data/lib/mibs/ietf/IPFIX-MIB.dic +2334 -0
- data/lib/mibs/ietf/IPFIX-SELECTOR-MIB.dic +215 -0
- data/lib/mibs/ietf/IPMCAST-MIB.dic +3390 -0
- data/lib/mibs/ietf/IPMROUTE-STD-MIB.dic +1246 -0
- data/lib/mibs/ietf/IPOA-MIB.dic +2372 -0
- data/lib/mibs/ietf/IPS-AUTH-MIB.dic +1609 -0
- data/lib/mibs/ietf/IPSEC-SPD-MIB.dic +3989 -0
- data/lib/mibs/ietf/IPV6-FLOW-LABEL-MIB.dic +110 -0
- data/lib/mibs/ietf/IPV6-ICMP-MIB.dic +748 -0
- data/lib/mibs/ietf/IPV6-MIB.dic +2028 -0
- data/lib/mibs/ietf/IPV6-MLD-MIB.dic +659 -0
- data/lib/mibs/ietf/IPV6-TCP-MIB.dic +332 -0
- data/lib/mibs/ietf/IPV6-UDP-MIB.dic +209 -0
- data/lib/mibs/ietf/ISCSI-MIB.dic +4613 -0
- data/lib/mibs/ietf/ISDN-MIB.dic +1796 -0
- data/lib/mibs/ietf/ISIS-MIB.dic +6215 -0
- data/lib/mibs/ietf/ISNS-MIB.dic +6578 -0
- data/lib/mibs/ietf/ITU-ALARM-MIB.dic +665 -0
- data/lib/mibs/ietf/ITU-ALARM-TC-MIB.dic +137 -0
- data/lib/mibs/ietf/Job-Monitoring-MIB.dic +2519 -0
- data/lib/mibs/ietf/L2TP-MIB.dic +4050 -0
- data/lib/mibs/ietf/LANGTAG-TC-MIB.dic +104 -0
- data/lib/mibs/ietf/LISP-MIB.dic +4067 -0
- data/lib/mibs/ietf/LMP-MIB.dic +5166 -0
- data/lib/mibs/ietf/MALLOC-MIB.dic +2156 -0
- data/lib/mibs/ietf/MAU-MIB.dic +2619 -0
- data/lib/mibs/ietf/MIDCOM-MIB.dic +2856 -0
- data/lib/mibs/ietf/MIOX25-MIB.dic +828 -0
- data/lib/mibs/ietf/MIP-MIB.dic +3473 -0
- data/lib/mibs/ietf/MOBILEIPV6-MIB.dic +5228 -0
- data/lib/mibs/ietf/MPLS-FTN-STD-MIB.dic +1594 -0
- data/lib/mibs/ietf/MPLS-L3VPN-STD-MIB.dic +2548 -0
- data/lib/mibs/ietf/MPLS-LC-ATM-STD-MIB.dic +491 -0
- data/lib/mibs/ietf/MPLS-LC-FR-STD-MIB.dic +395 -0
- data/lib/mibs/ietf/MPLS-LDP-ATM-STD-MIB.dic +1019 -0
- data/lib/mibs/ietf/MPLS-LDP-FRAME-RELAY-STD-MIB.dic +862 -0
- data/lib/mibs/ietf/MPLS-LDP-GENERIC-STD-MIB.dic +445 -0
- data/lib/mibs/ietf/MPLS-LDP-STD-MIB.dic +3657 -0
- data/lib/mibs/ietf/MPLS-LSR-STD-MIB.dic +3103 -0
- data/lib/mibs/ietf/MPLS-TC-STD-MIB.dic +911 -0
- data/lib/mibs/ietf/MPLS-TE-STD-MIB.dic +3673 -0
- data/lib/mibs/ietf/MSDP-MIB.dic +1893 -0
- data/lib/mibs/ietf/MTA-MIB.dic +1898 -0
- data/lib/mibs/ietf/Modem-MIB.dic +2054 -0
- data/lib/mibs/ietf/NAT-MIB.dic +3866 -0
- data/lib/mibs/ietf/NETWORK-SERVICES-MIB.dic +1034 -0
- data/lib/mibs/ietf/NHDP-MIB.dic +3005 -0
- data/lib/mibs/ietf/NHRP-MIB.dic +3660 -0
- data/lib/mibs/ietf/NOTIFICATION-LOG-MIB.dic +1156 -0
- data/lib/mibs/ietf/NTPv4-MIB.dic +1535 -0
- data/lib/mibs/ietf/OPT-IF-MIB.dic +8972 -0
- data/lib/mibs/ietf/OSPF-MIB.dic +5963 -0
- data/lib/mibs/ietf/OSPF-TRAP-MIB.dic +1190 -0
- data/lib/mibs/ietf/OSPFV3-MIB.dic +5708 -0
- data/lib/mibs/ietf/P-BRIDGE-MIB.dic +1499 -0
- data/lib/mibs/ietf/PARALLEL-MIB.dic +476 -0
- data/lib/mibs/ietf/PIM-MIB.dic +1393 -0
- data/lib/mibs/ietf/PIM-STD-MIB.dic +6819 -0
- data/lib/mibs/ietf/PINT-MIB.dic +830 -0
- data/lib/mibs/ietf/PKTC-IETF-MTA-MIB.dic +3191 -0
- data/lib/mibs/ietf/PKTC-IETF-SIG-MIB.dic +4713 -0
- data/lib/mibs/ietf/PMIPV6-MIB.dic +3010 -0
- data/lib/mibs/ietf/PMIPV6-TC-MIB.dic +293 -0
- data/lib/mibs/ietf/POLICY-BASED-MANAGEMENT-MIB.dic +3316 -0
- data/lib/mibs/ietf/POWER-ETHERNET-MIB.dic +959 -0
- data/lib/mibs/ietf/PPP-BRIDGE-NCP-MIB.dic +587 -0
- data/lib/mibs/ietf/PPP-IP-NCP-MIB.dic +269 -0
- data/lib/mibs/ietf/PPP-LCP-MIB.dic +994 -0
- data/lib/mibs/ietf/PPP-SEC-MIB.dic +411 -0
- data/lib/mibs/ietf/PSAMP-MIB.dic +998 -0
- data/lib/mibs/ietf/PTOPO-MIB.dic +1135 -0
- data/lib/mibs/ietf/PW-ATM-MIB.dic +1642 -0
- data/lib/mibs/ietf/PW-CEP-STD-MIB.dic +3661 -0
- data/lib/mibs/ietf/PW-STD-MIB.dic +3592 -0
- data/lib/mibs/ietf/PW-TC-STD-MIB.dic +437 -0
- data/lib/mibs/ietf/PW-TDM-MIB.dic +1896 -0
- data/lib/mibs/ietf/PerfHist-TC-MIB.dic +152 -0
- data/lib/mibs/ietf/Printer-MIB.dic +6665 -0
- data/lib/mibs/ietf/Q-BRIDGE-MIB.dic +3115 -0
- data/lib/mibs/ietf/RADIUS-ACC-CLIENT-MIB.dic +991 -0
- data/lib/mibs/ietf/RADIUS-ACC-SERVER-MIB.dic +1183 -0
- data/lib/mibs/ietf/RADIUS-AUTH-CLIENT-MIB.dic +1073 -0
- data/lib/mibs/ietf/RADIUS-AUTH-SERVER-MIB.dic +1251 -0
- data/lib/mibs/ietf/RADIUS-DYNAUTH-CLIENT-MIB.dic +1116 -0
- data/lib/mibs/ietf/RADIUS-DYNAUTH-SERVER-MIB.dic +1003 -0
- data/lib/mibs/ietf/RAQMON-MIB.dic +2695 -0
- data/lib/mibs/ietf/RBRIDGE-MIB.dic +2981 -0
- data/lib/mibs/ietf/RDBMS-MIB.dic +1935 -0
- data/lib/mibs/ietf/RFC1065-SMI.dic +108 -0
- data/lib/mibs/ietf/RFC1155-SMI.dic +118 -0
- data/lib/mibs/ietf/RFC1158-MIB.dic +2440 -0
- data/lib/mibs/ietf/RFC1213-MIB.dic +3434 -0
- data/lib/mibs/ietf/RFC1269-MIB.dic +557 -0
- data/lib/mibs/ietf/RFC1271-MIB.dic +4135 -0
- data/lib/mibs/ietf/RFC1285-MIB.dic +2842 -0
- data/lib/mibs/ietf/RFC1316-MIB.dic +800 -0
- data/lib/mibs/ietf/RFC1381-MIB.dic +1347 -0
- data/lib/mibs/ietf/RFC1382-MIB.dic +3820 -0
- data/lib/mibs/ietf/RFC1414-MIB.dic +214 -0
- data/lib/mibs/ietf/RIPv2-MIB.dic +773 -0
- data/lib/mibs/ietf/RMON-MIB.dic +5551 -0
- data/lib/mibs/ietf/RMON2-MIB.dic +8224 -0
- data/lib/mibs/ietf/ROHC-MIB.dic +1613 -0
- data/lib/mibs/ietf/ROHC-RTP-MIB.dic +859 -0
- data/lib/mibs/ietf/ROHC-UNCOMPRESSED-MIB.dic +267 -0
- data/lib/mibs/ietf/RPKI-ROUTER-MIB.dic +1363 -0
- data/lib/mibs/ietf/RS-232-MIB.dic +1335 -0
- data/lib/mibs/ietf/RSERPOOL-MIB.dic +2501 -0
- data/lib/mibs/ietf/RSTP-MIB.dic +427 -0
- data/lib/mibs/ietf/RSVP-MIB.dic +4135 -0
- data/lib/mibs/ietf/RTP-MIB.dic +1376 -0
- data/lib/mibs/ietf/SCSI-MIB.dic +3804 -0
- data/lib/mibs/ietf/SCTP-MIB.dic +1924 -0
- data/lib/mibs/ietf/SFLOW-MIB.dic +568 -0
- data/lib/mibs/ietf/SIP-COMMON-MIB.dic +2769 -0
- data/lib/mibs/ietf/SIP-MIB.dic +1438 -0
- data/lib/mibs/ietf/SIP-SERVER-MIB.dic +1150 -0
- data/lib/mibs/ietf/SIP-TC-MIB.dic +257 -0
- data/lib/mibs/ietf/SIP-UA-MIB.dic +268 -0
- data/lib/mibs/ietf/SLAPM-MIB.dic +4527 -0
- data/lib/mibs/ietf/SMON-MIB.dic +1758 -0
- data/lib/mibs/ietf/SNA-NAU-MIB.dic +4042 -0
- data/lib/mibs/ietf/SNA-SDLC-MIB.dic +3858 -0
- data/lib/mibs/ietf/SNMP-COMMUNITY-MIB.dic +715 -0
- data/lib/mibs/ietf/SNMP-FRAMEWORK-MIB.dic +709 -0
- data/lib/mibs/ietf/SNMP-MPD-MIB.dic +230 -0
- data/lib/mibs/ietf/SNMP-NOTIFICATION-MIB.dic +859 -0
- data/lib/mibs/ietf/SNMP-PROXY-MIB.dic +414 -0
- data/lib/mibs/ietf/SNMP-REPEATER-MIB.dic +4335 -0
- data/lib/mibs/ietf/SNMP-SSH-TM-MIB.dic +447 -0
- data/lib/mibs/ietf/SNMP-TARGET-MIB.dic +924 -0
- data/lib/mibs/ietf/SNMP-TLS-TM-MIB.dic +1449 -0
- data/lib/mibs/ietf/SNMP-TSM-MIB.dic +315 -0
- data/lib/mibs/ietf/SNMP-USER-BASED-SM-MIB.dic +1164 -0
- data/lib/mibs/ietf/SNMP-USM-AES-MIB.dic +95 -0
- data/lib/mibs/ietf/SNMP-USM-DH-OBJECTS-MIB.dic +653 -0
- data/lib/mibs/ietf/SNMP-VIEW-BASED-ACM-MIB.dic +1202 -0
- data/lib/mibs/ietf/SNMPv2-MIB.dic +1382 -0
- data/lib/mibs/ietf/SNMPv2-SMI.dic +223 -0
- data/lib/mibs/ietf/SNMPv2-USEC-MIB.dic +405 -0
- data/lib/mibs/ietf/SONET-MIB.dic +3308 -0
- data/lib/mibs/ietf/SOURCE-ROUTING-MIB.dic +542 -0
- data/lib/mibs/ietf/SSPM-MIB.dic +1530 -0
- data/lib/mibs/ietf/SYSAPPL-MIB.dic +2092 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-ADDR-MGR-MIB.dic +1779 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-CONFIG-SERVER-MIB.dic +2822 -0
- data/lib/mibs/ietf/T11-FC-FABRIC-LOCK-MIB.dic +700 -0
- data/lib/mibs/ietf/T11-FC-FSPF-MIB.dic +1889 -0
- data/lib/mibs/ietf/T11-FC-NAME-SERVER-MIB.dic +1775 -0
- data/lib/mibs/ietf/T11-FC-ROUTE-MIB.dic +655 -0
- data/lib/mibs/ietf/T11-FC-RSCN-MIB.dic +1110 -0
- data/lib/mibs/ietf/T11-FC-VIRTUAL-FABRIC-MIB.dic +770 -0
- data/lib/mibs/ietf/T11-FC-ZONE-SERVER-MIB.dic +3886 -0
- data/lib/mibs/ietf/T11-TC-MIB.dic +110 -0
- data/lib/mibs/ietf/TCP-ESTATS-MIB.dic +3926 -0
- data/lib/mibs/ietf/TCP-MIB.dic +1319 -0
- data/lib/mibs/ietf/TCPIPX-MIB.dic +457 -0
- data/lib/mibs/ietf/TE-LINK-STD-MIB.dic +2876 -0
- data/lib/mibs/ietf/TE-MIB.dic +2924 -0
- data/lib/mibs/ietf/TED-MIB.dic +1749 -0
- data/lib/mibs/ietf/TIME-AGGREGATE-MIB.dic +550 -0
- data/lib/mibs/ietf/TN3270E-MIB.dic +2785 -0
- data/lib/mibs/ietf/TN3270E-RT-MIB.dic +1317 -0
- data/lib/mibs/ietf/TOKEN-RING-RMON-MIB.dic +2820 -0
- data/lib/mibs/ietf/TOKENRING-MIB.dic +1184 -0
- data/lib/mibs/ietf/TOKENRING-STATION-SR-MIB.dic +292 -0
- data/lib/mibs/ietf/TRANSPORT-ADDRESS-MIB.dic +610 -0
- data/lib/mibs/ietf/TRIP-MIB.dic +3159 -0
- data/lib/mibs/ietf/TRIP-TC-MIB.dic +241 -0
- data/lib/mibs/ietf/TUNNEL-MIB.dic +1095 -0
- data/lib/mibs/ietf/UDP-MIB.dic +751 -0
- data/lib/mibs/ietf/UDPLITE-MIB.dic +704 -0
- data/lib/mibs/ietf/UPS-MIB.dic +3088 -0
- data/lib/mibs/ietf/URI-TC-MIB.dic +193 -0
- data/lib/mibs/ietf/UUID-TC-MIB.dic +135 -0
- data/lib/mibs/ietf/VDSL-LINE-EXT-MCM-MIB.dic +989 -0
- data/lib/mibs/ietf/VDSL-LINE-EXT-SCM-MIB.dic +605 -0
- data/lib/mibs/ietf/VDSL-LINE-MIB.dic +4518 -0
- data/lib/mibs/ietf/VDSL2-LINE-MIB.dic +11029 -0
- data/lib/mibs/ietf/VDSL2-LINE-TC-MIB.dic +3152 -0
- data/lib/mibs/ietf/VPN-TC-STD-MIB.dic +121 -0
- data/lib/mibs/ietf/VRRP-MIB.dic +1163 -0
- data/lib/mibs/ietf/VRRPV3-MIB.dic +1403 -0
- data/lib/mibs/ietf/WWW-MIB.dic +1810 -0
- data/lib/mibs/logstash/iso.dic +18 -0
- data/logstash-input-snmp.gemspec +1 -1
- data/spec/inputs/snmp/mib_spec.rb +10 -17
- data/spec/inputs/snmp_spec.rb +27 -1
- metadata +302 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb2edaea9339e4955345a99d3a7c36c3c11eb907d91ee91c7aadb9110a68c215
|
|
4
|
+
data.tar.gz: bcd78c64a492e9025f277a5139d7517d75e52aa741f8c7314b4b9c51c0285879
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4e6d4213da72a049d9d8f02a3e2ea9e6a93915746595bd14cb5e4c7115f74d549f97c069698090d89fc80a29095f4b399e05362e7449d2c84543cb7be0016d17
|
|
7
|
+
data.tar.gz: 50441d39a18880a799cbf444af8ddf424d7c348b9f6ef162af195cd221310008b90f5bf58805fdabeea33f21fb33deafd557f64390383a84b175480e90a69017
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## 0.1.0.beta5
|
|
2
|
+
- Added OPAQUE type coercion [#29](https://github.com/logstash-plugins/logstash-input-snmp/pull/29)
|
|
3
|
+
- Added SNMPv3 support [#27](https://github.com/logstash-plugins/logstash-input-snmp/pull/27)
|
|
4
|
+
- Added support for provided MIBs [#25](https://github.com/logstash-plugins/logstash-input-snmp/pull/25)
|
|
5
|
+
|
|
1
6
|
## 0.1.0.beta4
|
|
2
7
|
- Fixed missing coercions [#12](https://github.com/logstash-plugins/logstash-input-snmp/pull/12)
|
|
3
8
|
|
data/lib/logstash/inputs/snmp.rb
CHANGED
|
@@ -4,6 +4,7 @@ require "logstash/namespace"
|
|
|
4
4
|
require "stud/interval"
|
|
5
5
|
require "socket" # for Socket.gethostname
|
|
6
6
|
require_relative "snmp/client"
|
|
7
|
+
require_relative "snmp/clientv3"
|
|
7
8
|
require_relative "snmp/mib"
|
|
8
9
|
|
|
9
10
|
# Generate a repeating message.
|
|
@@ -26,11 +27,15 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
26
27
|
# for example `host => "udp:127.0.0.1/161"`
|
|
27
28
|
# Each host definition can optionally include the following keys and values:
|
|
28
29
|
# `community` with a default value of `public`
|
|
29
|
-
# `version` `1` or `
|
|
30
|
-
# `retries` with a
|
|
30
|
+
# `version` `1`, `2c` or `3` with a default value of `2c`
|
|
31
|
+
# `retries` with a default value of `2`
|
|
31
32
|
# `timeout` in milliseconds with a default value of `1000`
|
|
32
33
|
config :hosts, :validate => :array #[ {"host" => "udp:127.0.0.1/161", "community" => "public"} ]
|
|
33
34
|
|
|
35
|
+
# This plugin provides sets of MIBs publicly available. The full paths to these provided MIBs paths
|
|
36
|
+
# Will be displayed at plugin startup.
|
|
37
|
+
config :use_provided_mibs, :validate => :boolean, :default => true
|
|
38
|
+
|
|
34
39
|
# List of paths of MIB .dic files of dirs. If a dir path is specified, all files with .dic extension will be loaded.
|
|
35
40
|
#
|
|
36
41
|
# ATTENTION: a MIB .dic file must be generated using the libsmi library `smidump` command line utility
|
|
@@ -50,28 +55,65 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
50
55
|
|
|
51
56
|
# Set polling interval in seconds
|
|
52
57
|
#
|
|
53
|
-
# The default, `30`, means poll each host every
|
|
58
|
+
# The default, `30`, means poll each host every 30 seconds.
|
|
54
59
|
config :interval, :validate => :number, :default => 30
|
|
55
60
|
|
|
56
61
|
# Add the default "host" field to the event.
|
|
57
62
|
config :add_field, :validate => :hash, :default => { "host" => "%{[@metadata][host_address]}" }
|
|
58
63
|
|
|
64
|
+
# SNMPv3 Credentials
|
|
65
|
+
#
|
|
66
|
+
# A single user can be configured and will be used for all defined SNMPv3 hosts.
|
|
67
|
+
# Multiple snmp input declarations will be needed if multiple SNMPv3 users are required.
|
|
68
|
+
# If not using SNMPv3 simply leave options empty.
|
|
69
|
+
|
|
70
|
+
# The SNMPv3 security name or user name
|
|
71
|
+
config :security_name, :validate => :string
|
|
72
|
+
|
|
73
|
+
# The SNMPv3 authentication protocol or type
|
|
74
|
+
config :auth_protocol, :validate => ["md5", "sha", "sha2", "hmac128sha224", "hmac192sha256", "hmac256sha384", "hmac384sha512"]
|
|
75
|
+
|
|
76
|
+
# The SNMPv3 authentication passphrase or password
|
|
77
|
+
config :auth_pass, :validate => :password
|
|
78
|
+
|
|
79
|
+
# The SNMPv3 privacy/encryption protocol
|
|
80
|
+
config :priv_protocol, :validate => ["des", "3des", "aes", "aes128", "aes192", "aes256"]
|
|
81
|
+
|
|
82
|
+
# The SNMPv3 encryption password
|
|
83
|
+
config :priv_pass, :validate => :password
|
|
84
|
+
|
|
85
|
+
# The SNMPv3 security level can be Authentication, No Privacy; Authentication, Privacy; or no Authentication, no Privacy
|
|
86
|
+
config :security_level, :validate => ["noAuthNoPriv", "authNoPriv", "authPriv"]
|
|
87
|
+
|
|
88
|
+
BASE_MIB_PATH = ::File.join(__FILE__, "..", "..", "..", "mibs")
|
|
89
|
+
PROVIDED_MIB_PATHS = [::File.join(BASE_MIB_PATH, "logstash"), ::File.join(BASE_MIB_PATH, "ietf")].map { |path| ::File.expand_path(path) }
|
|
90
|
+
|
|
59
91
|
def register
|
|
60
92
|
validate_oids!
|
|
61
93
|
validate_hosts!
|
|
62
94
|
|
|
63
95
|
mib = LogStash::SnmpMib.new
|
|
96
|
+
|
|
97
|
+
if @use_provided_mibs
|
|
98
|
+
PROVIDED_MIB_PATHS.each do |path|
|
|
99
|
+
logger.info("using plugin provided MIB path #{path}")
|
|
100
|
+
mib.add_mib_path(path)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
64
104
|
Array(@mib_paths).each do |path|
|
|
65
|
-
|
|
105
|
+
logger.info("using user provided MIB path #{path}")
|
|
66
106
|
mib.add_mib_path(path)
|
|
67
107
|
end
|
|
68
108
|
|
|
109
|
+
# setup client definitions per provided host
|
|
110
|
+
|
|
69
111
|
@client_definitions = []
|
|
70
112
|
@hosts.each do |host|
|
|
71
113
|
host_name = host["host"]
|
|
72
114
|
community = host["community"] || "public"
|
|
73
115
|
version = host["version"] || "2c"
|
|
74
|
-
raise(LogStash::ConfigurationError, "only protocol version '1' and '
|
|
116
|
+
raise(LogStash::ConfigurationError, "only protocol version '1', '2c' and '3' are supported for host option '#{host_name}'") unless version =~ VERSION_REGEX
|
|
75
117
|
|
|
76
118
|
retries = host["retries"] || 2
|
|
77
119
|
timeout = host["timeout"] || 1000
|
|
@@ -86,7 +128,6 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
86
128
|
port = host_details[:host_port]
|
|
87
129
|
|
|
88
130
|
definition = {
|
|
89
|
-
:client => LogStash::SnmpClient.new(protocol, address, port, community, version, retries, timeout, mib),
|
|
90
131
|
:get => Array(get),
|
|
91
132
|
:walk => Array(walk),
|
|
92
133
|
|
|
@@ -95,6 +136,15 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
95
136
|
:host_port => port,
|
|
96
137
|
:host_community => community,
|
|
97
138
|
}
|
|
139
|
+
|
|
140
|
+
if version == "3"
|
|
141
|
+
validate_v3_user! # don't really care if verified for every host
|
|
142
|
+
auth_pass = @auth_pass.nil? ? nil : @auth_pass.value
|
|
143
|
+
priv_pass = @priv_pass.nil? ? nil : @priv_pass.value
|
|
144
|
+
definition[:client] = LogStash::SnmpClientV3.new(protocol, address, port, retries, timeout, mib, @security_name, @auth_protocol, auth_pass, @priv_protocol, priv_pass, @security_level)
|
|
145
|
+
else
|
|
146
|
+
definition[:client] = LogStash::SnmpClient.new(protocol, address, port, community, version, retries, timeout, mib)
|
|
147
|
+
end
|
|
98
148
|
@client_definitions << definition
|
|
99
149
|
end
|
|
100
150
|
end
|
|
@@ -109,7 +159,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
109
159
|
begin
|
|
110
160
|
result = result.merge(definition[:client].get(definition[:get], @oid_root_skip))
|
|
111
161
|
rescue => e
|
|
112
|
-
logger.error("error invoking get operation on OIDs: #{definition[:get]}, ignoring", :exception => e, :backtrace => e.backtrace)
|
|
162
|
+
logger.error("error invoking get operation on #{definition[:host_address]} for OIDs: #{definition[:get]}, ignoring", :exception => e, :backtrace => e.backtrace)
|
|
113
163
|
end
|
|
114
164
|
end
|
|
115
165
|
if !definition[:walk].empty?
|
|
@@ -124,10 +174,10 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
124
174
|
|
|
125
175
|
unless result.empty?
|
|
126
176
|
metadata = {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
177
|
+
"host_protocol" => definition[:host_protocol],
|
|
178
|
+
"host_address" => definition[:host_address],
|
|
179
|
+
"host_port" => definition[:host_port],
|
|
180
|
+
"host_community" => definition[:host_community],
|
|
131
181
|
}
|
|
132
182
|
result["@metadata"] = metadata
|
|
133
183
|
|
|
@@ -148,7 +198,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
148
198
|
|
|
149
199
|
OID_REGEX = /^\.?([0-9\.]+)$/
|
|
150
200
|
HOST_REGEX = /^(?<host_protocol>udp|tcp):(?<host_address>.+)\/(?<host_port>\d+)$/i
|
|
151
|
-
VERSION_REGEX =/^1|2c$/
|
|
201
|
+
VERSION_REGEX =/^1|2c|3$/
|
|
152
202
|
|
|
153
203
|
def validate_oids!
|
|
154
204
|
@get = Array(@get).map do |oid|
|
|
@@ -170,6 +220,19 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
|
170
220
|
raise(LogStash::ConfigurationError, "at least one get OID or one walk OID is required") if @get.empty? && @walk.empty?
|
|
171
221
|
end
|
|
172
222
|
|
|
223
|
+
def validate_v3_user!
|
|
224
|
+
errors = []
|
|
225
|
+
|
|
226
|
+
errors << "v3 user must have a \"security_name\" option" if @security_name.nil?
|
|
227
|
+
errors << "you must specify an auth protocol if you specify an auth pass" if @auth_protocol.nil? && !@auth_pass.nil?
|
|
228
|
+
errors << "you must specify an auth pass if you specify an auth protocol" if !@auth_protocol.nil? && @auth_pass.nil?
|
|
229
|
+
errors << "you must specify a priv protocol if you specify a priv pass" if @priv_protocol.nil? && !@priv_pass.nil?
|
|
230
|
+
errors << "you must specify a priv pass if you specify a priv protocol" if !@priv_protocol.nil? && @priv_pass.nil?
|
|
231
|
+
|
|
232
|
+
raise(LogStash::ConfigurationError, errors.join(", ")) unless errors.empty?
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
|
|
173
236
|
def validate_hosts!
|
|
174
237
|
# TODO: for new we only validate the host part, not the other optional options
|
|
175
238
|
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
require "java"
|
|
2
|
+
require "logstash-input-snmp_jars.rb"
|
|
3
|
+
|
|
4
|
+
java_import "org.snmp4j.CommunityTarget"
|
|
5
|
+
java_import "org.snmp4j.PDU"
|
|
6
|
+
java_import "org.snmp4j.ScopedPDU"
|
|
7
|
+
java_import "org.snmp4j.Snmp"
|
|
8
|
+
java_import "org.snmp4j.Target"
|
|
9
|
+
java_import "org.snmp4j.TransportMapping"
|
|
10
|
+
java_import "org.snmp4j.event.ResponseEvent"
|
|
11
|
+
java_import "org.snmp4j.mp.SnmpConstants"
|
|
12
|
+
java_import "org.snmp4j.smi.Address"
|
|
13
|
+
java_import "org.snmp4j.smi.GenericAddress"
|
|
14
|
+
java_import "org.snmp4j.smi.OID"
|
|
15
|
+
java_import "org.snmp4j.smi.OctetString"
|
|
16
|
+
java_import "org.snmp4j.smi.VariableBinding"
|
|
17
|
+
java_import "org.snmp4j.transport.DefaultUdpTransportMapping"
|
|
18
|
+
java_import "org.snmp4j.transport.DefaultTcpTransportMapping"
|
|
19
|
+
java_import "org.snmp4j.util.TreeUtils"
|
|
20
|
+
java_import "org.snmp4j.util.DefaultPDUFactory"
|
|
21
|
+
java_import "org.snmp4j.asn1.BER"
|
|
22
|
+
|
|
23
|
+
module LogStash
|
|
24
|
+
class SnmpClientError < StandardError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class BaseSnmpClient
|
|
28
|
+
|
|
29
|
+
def initialize(protocol, address, port, retries, timeout, mib)
|
|
30
|
+
transport = case protocol.to_s
|
|
31
|
+
when "udp"
|
|
32
|
+
DefaultUdpTransportMapping.new
|
|
33
|
+
when "tcp"
|
|
34
|
+
DefaultTcpTransportMapping.new
|
|
35
|
+
else
|
|
36
|
+
raise(SnmpClientError, "invalid transport protocol specified '#{protocol.to_s}', expecting 'udp' or 'tcp'")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
@mib = mib
|
|
40
|
+
@snmp = Snmp.new(transport)
|
|
41
|
+
transport.listen()
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def get(oids, strip_root = 0)
|
|
45
|
+
pdu = get_pdu
|
|
46
|
+
Array(oids).each { |oid| pdu.add(VariableBinding.new(OID.new(oid))) }
|
|
47
|
+
|
|
48
|
+
response_event = @snmp.send(pdu, @target, nil)
|
|
49
|
+
return nil if response_event.nil?
|
|
50
|
+
|
|
51
|
+
e = response_event.getError
|
|
52
|
+
raise(SnmpClientError, "error sending snmp get request: #{e.inspect}, #{e.getMessage}") if e
|
|
53
|
+
|
|
54
|
+
result = {}
|
|
55
|
+
response_pdu = response_event.getResponse
|
|
56
|
+
raise(SnmpClientError, "timeout sending snmp get request") if response_pdu.nil?
|
|
57
|
+
|
|
58
|
+
size = response_pdu.size
|
|
59
|
+
(0..size - 1).each do |i|
|
|
60
|
+
variable_binding = response_pdu.get(i)
|
|
61
|
+
oid = variable_binding.getOid.toString
|
|
62
|
+
variable = variable_binding.getVariable
|
|
63
|
+
value = coerce(variable)
|
|
64
|
+
|
|
65
|
+
result[@mib.map_oid(oid, strip_root)] = value
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
result
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def walk(oid, strip_root = 0)
|
|
73
|
+
result = {}
|
|
74
|
+
|
|
75
|
+
pdufactory = get_pdu_factory
|
|
76
|
+
treeUtils = TreeUtils.new(@snmp, pdufactory)
|
|
77
|
+
events = treeUtils.getSubtree(@target, OID.new(oid))
|
|
78
|
+
return nil if events.nil? || events.size == 0
|
|
79
|
+
|
|
80
|
+
events.each do |event|
|
|
81
|
+
next if event.nil?
|
|
82
|
+
|
|
83
|
+
if event.isError
|
|
84
|
+
# TODO: see if we can salvage non errored event here
|
|
85
|
+
raise(SnmpClientError, "error sending snmp walk request: #{event.getErrorMessage}")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
var_bindings = event.getVariableBindings
|
|
89
|
+
next if var_bindings.nil? || var_bindings.size == 0
|
|
90
|
+
|
|
91
|
+
var_bindings.each do |var_binding|
|
|
92
|
+
next if var_binding.nil?
|
|
93
|
+
|
|
94
|
+
oid = var_binding.getOid.toString
|
|
95
|
+
variable = var_binding.getVariable
|
|
96
|
+
value = coerce(variable)
|
|
97
|
+
|
|
98
|
+
result[@mib.map_oid(oid, strip_root)] = value
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
result
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
protected
|
|
106
|
+
|
|
107
|
+
NULL_STRING = "null".freeze
|
|
108
|
+
|
|
109
|
+
def coerce(variable)
|
|
110
|
+
variable_syntax = variable.getSyntax
|
|
111
|
+
# puts("variable.getSyntaxString=#{variable.getSyntaxString}")
|
|
112
|
+
case variable_syntax
|
|
113
|
+
when BER::OCTETSTRING, BER::BITSTRING
|
|
114
|
+
variable.toString
|
|
115
|
+
when BER::TIMETICKS, BER::COUNTER, BER::COUNTER32, BER::COUNTER64
|
|
116
|
+
variable.toLong
|
|
117
|
+
when BER::INTEGER, BER::INTEGER32, BER::GAUGE, BER::GAUGE32
|
|
118
|
+
variable.toInt
|
|
119
|
+
when BER::IPADDRESS
|
|
120
|
+
variable.toString
|
|
121
|
+
when BER::OID
|
|
122
|
+
variable.toString
|
|
123
|
+
when BER::NULL
|
|
124
|
+
NULL_STRING
|
|
125
|
+
when BER::OPAQUE
|
|
126
|
+
variable.toString
|
|
127
|
+
when BER::NOSUCHOBJECT
|
|
128
|
+
"Error: No Such Instance currently exists at this OID"
|
|
129
|
+
else
|
|
130
|
+
raise(SnmpClientError, "unknown variable syntax #{variable_syntax}, #{variable.getSyntaxString}")
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def parse_version(version)
|
|
136
|
+
case version.to_s
|
|
137
|
+
when "3"
|
|
138
|
+
SnmpConstants.version3
|
|
139
|
+
when "2c"
|
|
140
|
+
SnmpConstants.version2c
|
|
141
|
+
when "1"
|
|
142
|
+
SnmpConstants.version1
|
|
143
|
+
else
|
|
144
|
+
raise(SnmpClientError, "protocol version '#{version}' is not supported, expected versions are '1', '2c' and '3'")
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
private
|
|
149
|
+
|
|
150
|
+
def get_pdu
|
|
151
|
+
raise("abstract method")
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def get_pdu_factory
|
|
155
|
+
raise("abstract method")
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def build_target(*args)
|
|
159
|
+
raise("abstract method")
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require "java"
|
|
2
2
|
require "logstash-input-snmp_jars.rb"
|
|
3
|
+
require_relative "base_client"
|
|
3
4
|
|
|
4
5
|
java_import "org.snmp4j.CommunityTarget"
|
|
5
6
|
java_import "org.snmp4j.PDU"
|
|
7
|
+
java_import "org.snmp4j.ScopedPDU"
|
|
6
8
|
java_import "org.snmp4j.Snmp"
|
|
7
9
|
java_import "org.snmp4j.Target"
|
|
8
10
|
java_import "org.snmp4j.TransportMapping"
|
|
@@ -20,113 +22,24 @@ java_import "org.snmp4j.util.DefaultPDUFactory"
|
|
|
20
22
|
java_import "org.snmp4j.asn1.BER"
|
|
21
23
|
|
|
22
24
|
module LogStash
|
|
23
|
-
class
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
class SnmpClient
|
|
25
|
+
class SnmpClient < BaseSnmpClient
|
|
27
26
|
|
|
28
27
|
def initialize(protocol, address, port, community, version, retries, timeout, mib)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
DefaultUdpTransportMapping.new
|
|
32
|
-
when "tcp"
|
|
33
|
-
DefaultTcpTransportMapping.new
|
|
34
|
-
else
|
|
35
|
-
raise(SnmpClientError, "invalid transport protocol specified '#{protocol.to_s}', expecting 'udp' or 'tcp'")
|
|
36
|
-
end
|
|
37
|
-
|
|
28
|
+
super(protocol, address, port, retries, timeout, mib)
|
|
29
|
+
raise(SnmpClientError, "SnmpClient is expecting verison '1' or '2c'") unless ["1", "2c"].include?(version.to_s)
|
|
38
30
|
@target = build_target("#{protocol}:#{address}/#{port}", community, version, retries, timeout)
|
|
39
|
-
@mib = mib
|
|
40
|
-
|
|
41
|
-
@snmp = Snmp.new(transport)
|
|
42
|
-
transport.listen()
|
|
43
31
|
end
|
|
44
32
|
|
|
45
|
-
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def get_pdu
|
|
46
36
|
pdu = PDU.new
|
|
47
|
-
Array(oids).each { |oid| pdu.add(VariableBinding.new(OID.new(oid))) }
|
|
48
37
|
pdu.setType(PDU::GET)
|
|
49
|
-
|
|
50
|
-
response_event = @snmp.send(pdu, @target, nil)
|
|
51
|
-
return nil if response_event.nil?
|
|
52
|
-
|
|
53
|
-
e = response_event.getError
|
|
54
|
-
raise(SnmpClientError, "error sending snmp get request: #{e.inspect}, #{e.getMessage}") if e
|
|
55
|
-
|
|
56
|
-
result = {}
|
|
57
|
-
response_pdu = response_event.getResponse
|
|
58
|
-
raise(SnmpClientError, "timeout sending snmp get request") if response_pdu.nil?
|
|
59
|
-
|
|
60
|
-
size = response_pdu.size
|
|
61
|
-
(0..size - 1).each do |i|
|
|
62
|
-
variable_binding = response_pdu.get(i)
|
|
63
|
-
oid = variable_binding.getOid.toString
|
|
64
|
-
variable = variable_binding.getVariable
|
|
65
|
-
value = coerce(variable)
|
|
66
|
-
|
|
67
|
-
result[@mib.map_oid(oid, strip_root)] = value
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
result
|
|
38
|
+
pdu
|
|
71
39
|
end
|
|
72
40
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
result = {}
|
|
76
|
-
treeUtils = TreeUtils.new(@snmp, DefaultPDUFactory.new)
|
|
77
|
-
events = treeUtils.getSubtree(@target, OID.new(oid))
|
|
78
|
-
return nil if events.nil? || events.size == 0
|
|
79
|
-
|
|
80
|
-
events.each do |event|
|
|
81
|
-
next if event.nil?
|
|
82
|
-
|
|
83
|
-
if event.isError
|
|
84
|
-
# TODO: see if we can salvage non errored event here
|
|
85
|
-
raise(SnmpClientError, "error sending snmp walk request: #{event.getErrorMessage}")
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
var_bindings = event.getVariableBindings
|
|
89
|
-
next if var_bindings.nil? || var_bindings.size == 0
|
|
90
|
-
|
|
91
|
-
var_bindings.each do |var_binding|
|
|
92
|
-
next if var_binding.nil?
|
|
93
|
-
|
|
94
|
-
oid = var_binding.getOid.toString
|
|
95
|
-
variable = var_binding.getVariable
|
|
96
|
-
value = coerce(variable)
|
|
97
|
-
|
|
98
|
-
result[@mib.map_oid(oid, strip_root)] = value
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
result
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
private
|
|
106
|
-
|
|
107
|
-
NULL_STRING = "null".freeze
|
|
108
|
-
|
|
109
|
-
def coerce(variable)
|
|
110
|
-
variable_syntax = variable.getSyntax
|
|
111
|
-
# puts("variable.getSyntaxString=#{variable.getSyntaxString}")
|
|
112
|
-
case variable_syntax
|
|
113
|
-
when BER::OCTETSTRING, BER::BITSTRING
|
|
114
|
-
variable.toString
|
|
115
|
-
when BER::TIMETICKS, BER::COUNTER, BER::COUNTER32, BER::COUNTER64
|
|
116
|
-
variable.toLong
|
|
117
|
-
when BER::INTEGER, BER::INTEGER32, BER::GAUGE, BER::GAUGE32
|
|
118
|
-
variable.toInt
|
|
119
|
-
when BER::IPADDRESS
|
|
120
|
-
variable.toString
|
|
121
|
-
when BER::OID
|
|
122
|
-
variable.toString
|
|
123
|
-
when BER::NULL
|
|
124
|
-
NULL_STRING
|
|
125
|
-
when BER::NOSUCHOBJECT
|
|
126
|
-
"Error: No Such Instance currently exists at this OID"
|
|
127
|
-
else
|
|
128
|
-
raise(SnmpClientError, "unknown variable syntax #{variable_syntax}, #{variable.getSyntaxString}")
|
|
129
|
-
end
|
|
41
|
+
def get_pdu_factory
|
|
42
|
+
DefaultPDUFactory.new
|
|
130
43
|
end
|
|
131
44
|
|
|
132
45
|
def build_target(address, community, version, retries, timeout)
|
|
@@ -138,16 +51,5 @@ module LogStash
|
|
|
138
51
|
target.setVersion(parse_version(version))
|
|
139
52
|
target
|
|
140
53
|
end
|
|
141
|
-
|
|
142
|
-
def parse_version(version)
|
|
143
|
-
case version.to_s
|
|
144
|
-
when "2c"
|
|
145
|
-
SnmpConstants.version2c
|
|
146
|
-
when "1"
|
|
147
|
-
SnmpConstants.version1
|
|
148
|
-
else
|
|
149
|
-
raise(SnmpClientError, "protocol version '#{version}' is not supported, expected versions are '1' and '2c'")
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
54
|
end
|
|
153
55
|
end
|