logstash-integration-snmp 4.0.0-java

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.
Files changed (324) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +23 -0
  3. data/CONTRIBUTORS +20 -0
  4. data/Gemfile +11 -0
  5. data/LICENSE +202 -0
  6. data/README.md +89 -0
  7. data/VERSION +1 -0
  8. data/docs/index.asciidoc +202 -0
  9. data/docs/input-snmp.asciidoc +524 -0
  10. data/docs/input-snmptrap.asciidoc +392 -0
  11. data/lib/logstash/inputs/snmp.rb +369 -0
  12. data/lib/logstash/inputs/snmptrap.rb +190 -0
  13. data/lib/logstash/plugin_mixins/snmp/common.rb +197 -0
  14. data/lib/logstash-integration-snmp_jars.rb +6 -0
  15. data/lib/mibs/ietf/ACCOUNTING-CONTROL-MIB.dic +1316 -0
  16. data/lib/mibs/ietf/ADSL-LINE-EXT-MIB.dic +1724 -0
  17. data/lib/mibs/ietf/ADSL-LINE-MIB.dic +7297 -0
  18. data/lib/mibs/ietf/ADSL-TC-MIB.dic +160 -0
  19. data/lib/mibs/ietf/ADSL2-LINE-MIB.dic +8663 -0
  20. data/lib/mibs/ietf/ADSL2-LINE-TC-MIB.dic +1462 -0
  21. data/lib/mibs/ietf/AGENTX-MIB.dic +817 -0
  22. data/lib/mibs/ietf/AGGREGATE-MIB.dic +708 -0
  23. data/lib/mibs/ietf/ALARM-MIB.dic +1734 -0
  24. data/lib/mibs/ietf/APM-MIB.dic +2870 -0
  25. data/lib/mibs/ietf/APPC-MIB.dic +8687 -0
  26. data/lib/mibs/ietf/APPLETALK-MIB.dic +4399 -0
  27. data/lib/mibs/ietf/APPLICATION-MIB.dic +3750 -0
  28. data/lib/mibs/ietf/APPN-DLUR-MIB.dic +972 -0
  29. data/lib/mibs/ietf/APPN-MIB.dic +9364 -0
  30. data/lib/mibs/ietf/APPN-TRAP-MIB.dic +664 -0
  31. data/lib/mibs/ietf/APS-MIB.dic +2430 -0
  32. data/lib/mibs/ietf/ARC-MIB.dic +552 -0
  33. data/lib/mibs/ietf/ATM-ACCOUNTING-INFORMATION-MIB.dic +816 -0
  34. data/lib/mibs/ietf/ATM-MIB.dic +4104 -0
  35. data/lib/mibs/ietf/ATM-TC-MIB.dic +914 -0
  36. data/lib/mibs/ietf/ATM2-MIB.dic +4715 -0
  37. data/lib/mibs/ietf/BFD-STD-MIB.dic +2367 -0
  38. data/lib/mibs/ietf/BFD-TC-STD-MIB.dic +202 -0
  39. data/lib/mibs/ietf/BGP4-MIB.dic +1931 -0
  40. data/lib/mibs/ietf/BLDG-HVAC-MIB.dic +812 -0
  41. data/lib/mibs/ietf/BRIDGE-MIB.dic +2257 -0
  42. data/lib/mibs/ietf/CAPWAP-BASE-MIB.dic +4128 -0
  43. data/lib/mibs/ietf/CAPWAP-DOT11-MIB.dic +482 -0
  44. data/lib/mibs/ietf/CHARACTER-MIB.dic +1140 -0
  45. data/lib/mibs/ietf/CIRCUIT-IF-MIB.dic +493 -0
  46. data/lib/mibs/ietf/CLNS-MIB.dic +1702 -0
  47. data/lib/mibs/ietf/COFFEE-POT-MIB.dic +282 -0
  48. data/lib/mibs/ietf/COPS-CLIENT-MIB.dic +1270 -0
  49. data/lib/mibs/ietf/DECNET-PHIV-MIB.dic +5837 -0
  50. data/lib/mibs/ietf/DIAL-CONTROL-MIB.dic +2139 -0
  51. data/lib/mibs/ietf/DIFFSERV-CONFIG-MIB.dic +378 -0
  52. data/lib/mibs/ietf/DIFFSERV-MIB.dic +5073 -0
  53. data/lib/mibs/ietf/DIRECTORY-SERVER-MIB.dic +1041 -0
  54. data/lib/mibs/ietf/DISMAN-EVENT-MIB.dic +3151 -0
  55. data/lib/mibs/ietf/DISMAN-EXPRESSION-MIB.dic +1716 -0
  56. data/lib/mibs/ietf/DISMAN-NSLOOKUP-MIB.dic +698 -0
  57. data/lib/mibs/ietf/DISMAN-PING-MIB.dic +2635 -0
  58. data/lib/mibs/ietf/DISMAN-SCHEDULE-MIB.dic +1744 -0
  59. data/lib/mibs/ietf/DISMAN-SCRIPT-MIB.dic +2820 -0
  60. data/lib/mibs/ietf/DISMAN-TRACEROUTE-MIB.dic +3239 -0
  61. data/lib/mibs/ietf/DLSW-MIB.dic +5635 -0
  62. data/lib/mibs/ietf/DNS-RESOLVER-MIB.dic +1765 -0
  63. data/lib/mibs/ietf/DNS-SERVER-MIB.dic +1593 -0
  64. data/lib/mibs/ietf/DOCS-BPI-MIB.dic +2634 -0
  65. data/lib/mibs/ietf/DOCS-CABLE-DEVICE-MIB.dic +5042 -0
  66. data/lib/mibs/ietf/DOCS-IETF-BPI2-MIB.dic +5478 -0
  67. data/lib/mibs/ietf/DOCS-IETF-CABLE-DEVICE-NOTIFICATION-MIB.dic +2447 -0
  68. data/lib/mibs/ietf/DOCS-IETF-QOS-MIB.dic +4886 -0
  69. data/lib/mibs/ietf/DOCS-IETF-SUBMGT-MIB.dic +1331 -0
  70. data/lib/mibs/ietf/DOCS-IF-MIB.dic +7980 -0
  71. data/lib/mibs/ietf/DOT12-IF-MIB.dic +1066 -0
  72. data/lib/mibs/ietf/DOT12-RPTR-MIB.dic +2669 -0
  73. data/lib/mibs/ietf/DOT3-EPON-MIB.dic +3297 -0
  74. data/lib/mibs/ietf/DOT3-OAM-MIB.dic +2830 -0
  75. data/lib/mibs/ietf/DS0-MIB.dic +466 -0
  76. data/lib/mibs/ietf/DS0BUNDLE-MIB.dic +468 -0
  77. data/lib/mibs/ietf/DS1-MIB.dic +4890 -0
  78. data/lib/mibs/ietf/DS3-MIB.dic +2719 -0
  79. data/lib/mibs/ietf/DSA-MIB.dic +888 -0
  80. data/lib/mibs/ietf/DSMON-MIB.dic +6177 -0
  81. data/lib/mibs/ietf/DVB-RCS-MIB.dic +5764 -0
  82. data/lib/mibs/ietf/EBN-MIB.dic +1026 -0
  83. data/lib/mibs/ietf/EFM-CU-MIB.dic +4335 -0
  84. data/lib/mibs/ietf/ENTITY-MIB.dic +2235 -0
  85. data/lib/mibs/ietf/ENTITY-SENSOR-MIB.dic +653 -0
  86. data/lib/mibs/ietf/ENTITY-STATE-MIB.dic +457 -0
  87. data/lib/mibs/ietf/ENTITY-STATE-TC-MIB.dic +260 -0
  88. data/lib/mibs/ietf/ETHER-CHIPSET-MIB.dic +787 -0
  89. data/lib/mibs/ietf/EtherLike-MIB.dic +2548 -0
  90. data/lib/mibs/ietf/FC-MGMT-MIB.dic +3465 -0
  91. data/lib/mibs/ietf/FCIP-MGMT-MIB.dic +1596 -0
  92. data/lib/mibs/ietf/FDDI-SMT73-MIB.dic +3378 -0
  93. data/lib/mibs/ietf/FIBRE-CHANNEL-FE-MIB.dic +2504 -0
  94. data/lib/mibs/ietf/FLOAT-TC-MIB.dic +128 -0
  95. data/lib/mibs/ietf/FLOW-METER-MIB.dic +3201 -0
  96. data/lib/mibs/ietf/FORCES-MIB.dic +598 -0
  97. data/lib/mibs/ietf/FR-ATM-PVC-SERVICE-IWF-MIB.dic +1601 -0
  98. data/lib/mibs/ietf/FR-MFR-MIB.dic +1351 -0
  99. data/lib/mibs/ietf/FRAME-RELAY-DTE-MIB.dic +1688 -0
  100. data/lib/mibs/ietf/FRNETSERV-MIB.dic +3940 -0
  101. data/lib/mibs/ietf/FRSLD-MIB.dic +2580 -0
  102. data/lib/mibs/ietf/Finisher-MIB.dic +1416 -0
  103. data/lib/mibs/ietf/GMPLS-LABEL-STD-MIB.dic +965 -0
  104. data/lib/mibs/ietf/GMPLS-LSR-STD-MIB.dic +693 -0
  105. data/lib/mibs/ietf/GMPLS-TC-STD-MIB.dic +180 -0
  106. data/lib/mibs/ietf/GMPLS-TE-STD-MIB.dic +2542 -0
  107. data/lib/mibs/ietf/GSMP-MIB.dic +2468 -0
  108. data/lib/mibs/ietf/HC-ALARM-MIB.dic +1050 -0
  109. data/lib/mibs/ietf/HC-PerfHist-TC-MIB.dic +310 -0
  110. data/lib/mibs/ietf/HC-RMON-MIB.dic +4456 -0
  111. data/lib/mibs/ietf/HDSL2-SHDSL-LINE-MIB.dic +3955 -0
  112. data/lib/mibs/ietf/HOST-RESOURCES-MIB.dic +2453 -0
  113. data/lib/mibs/ietf/HPR-IP-MIB.dic +640 -0
  114. data/lib/mibs/ietf/HPR-MIB.dic +1959 -0
  115. data/lib/mibs/ietf/IANA-ITU-ALARM-TC-MIB.dic +936 -0
  116. data/lib/mibs/ietf/IF-CAP-STACK-MIB.dic +356 -0
  117. data/lib/mibs/ietf/IF-INVERTED-STACK-MIB.dic +220 -0
  118. data/lib/mibs/ietf/IF-MIB.dic +2753 -0
  119. data/lib/mibs/ietf/IFCP-MGMT-MIB.dic +1717 -0
  120. data/lib/mibs/ietf/IGMP-STD-MIB.dic +809 -0
  121. data/lib/mibs/ietf/INET-ADDRESS-MIB.dic +570 -0
  122. data/lib/mibs/ietf/INTEGRATED-SERVICES-GUARANTEED-MIB.dic +319 -0
  123. data/lib/mibs/ietf/INTEGRATED-SERVICES-MIB.dic +1196 -0
  124. data/lib/mibs/ietf/INTERFACETOPN-MIB.dic +1705 -0
  125. data/lib/mibs/ietf/IP-FORWARD-MIB.dic +1853 -0
  126. data/lib/mibs/ietf/IP-MIB.dic +7064 -0
  127. data/lib/mibs/ietf/IPATM-IPMC-MIB.dic +4830 -0
  128. data/lib/mibs/ietf/IPFIX-MIB.dic +2334 -0
  129. data/lib/mibs/ietf/IPFIX-SELECTOR-MIB.dic +215 -0
  130. data/lib/mibs/ietf/IPMCAST-MIB.dic +3390 -0
  131. data/lib/mibs/ietf/IPMROUTE-STD-MIB.dic +1246 -0
  132. data/lib/mibs/ietf/IPOA-MIB.dic +2372 -0
  133. data/lib/mibs/ietf/IPS-AUTH-MIB.dic +1609 -0
  134. data/lib/mibs/ietf/IPSEC-SPD-MIB.dic +3989 -0
  135. data/lib/mibs/ietf/IPV6-FLOW-LABEL-MIB.dic +110 -0
  136. data/lib/mibs/ietf/IPV6-ICMP-MIB.dic +748 -0
  137. data/lib/mibs/ietf/IPV6-MIB.dic +2028 -0
  138. data/lib/mibs/ietf/IPV6-MLD-MIB.dic +659 -0
  139. data/lib/mibs/ietf/IPV6-TCP-MIB.dic +332 -0
  140. data/lib/mibs/ietf/IPV6-UDP-MIB.dic +209 -0
  141. data/lib/mibs/ietf/ISCSI-MIB.dic +4613 -0
  142. data/lib/mibs/ietf/ISDN-MIB.dic +1796 -0
  143. data/lib/mibs/ietf/ISIS-MIB.dic +6215 -0
  144. data/lib/mibs/ietf/ISNS-MIB.dic +6578 -0
  145. data/lib/mibs/ietf/ITU-ALARM-MIB.dic +665 -0
  146. data/lib/mibs/ietf/ITU-ALARM-TC-MIB.dic +137 -0
  147. data/lib/mibs/ietf/Job-Monitoring-MIB.dic +2519 -0
  148. data/lib/mibs/ietf/L2TP-MIB.dic +4050 -0
  149. data/lib/mibs/ietf/LANGTAG-TC-MIB.dic +104 -0
  150. data/lib/mibs/ietf/LISP-MIB.dic +4067 -0
  151. data/lib/mibs/ietf/LMP-MIB.dic +5166 -0
  152. data/lib/mibs/ietf/MALLOC-MIB.dic +2156 -0
  153. data/lib/mibs/ietf/MAU-MIB.dic +2619 -0
  154. data/lib/mibs/ietf/MIDCOM-MIB.dic +2856 -0
  155. data/lib/mibs/ietf/MIOX25-MIB.dic +828 -0
  156. data/lib/mibs/ietf/MIP-MIB.dic +3473 -0
  157. data/lib/mibs/ietf/MOBILEIPV6-MIB.dic +5228 -0
  158. data/lib/mibs/ietf/MPLS-FTN-STD-MIB.dic +1594 -0
  159. data/lib/mibs/ietf/MPLS-L3VPN-STD-MIB.dic +2548 -0
  160. data/lib/mibs/ietf/MPLS-LC-ATM-STD-MIB.dic +491 -0
  161. data/lib/mibs/ietf/MPLS-LC-FR-STD-MIB.dic +395 -0
  162. data/lib/mibs/ietf/MPLS-LDP-ATM-STD-MIB.dic +1019 -0
  163. data/lib/mibs/ietf/MPLS-LDP-FRAME-RELAY-STD-MIB.dic +862 -0
  164. data/lib/mibs/ietf/MPLS-LDP-GENERIC-STD-MIB.dic +445 -0
  165. data/lib/mibs/ietf/MPLS-LDP-STD-MIB.dic +3657 -0
  166. data/lib/mibs/ietf/MPLS-LSR-STD-MIB.dic +3103 -0
  167. data/lib/mibs/ietf/MPLS-TC-STD-MIB.dic +911 -0
  168. data/lib/mibs/ietf/MPLS-TE-STD-MIB.dic +3673 -0
  169. data/lib/mibs/ietf/MSDP-MIB.dic +1893 -0
  170. data/lib/mibs/ietf/MTA-MIB.dic +1898 -0
  171. data/lib/mibs/ietf/Modem-MIB.dic +2054 -0
  172. data/lib/mibs/ietf/NAT-MIB.dic +3866 -0
  173. data/lib/mibs/ietf/NETWORK-SERVICES-MIB.dic +1034 -0
  174. data/lib/mibs/ietf/NHDP-MIB.dic +3005 -0
  175. data/lib/mibs/ietf/NHRP-MIB.dic +3660 -0
  176. data/lib/mibs/ietf/NOTIFICATION-LOG-MIB.dic +1156 -0
  177. data/lib/mibs/ietf/NTPv4-MIB.dic +1535 -0
  178. data/lib/mibs/ietf/OPT-IF-MIB.dic +8972 -0
  179. data/lib/mibs/ietf/OSPF-MIB.dic +5963 -0
  180. data/lib/mibs/ietf/OSPF-TRAP-MIB.dic +1190 -0
  181. data/lib/mibs/ietf/OSPFV3-MIB.dic +5708 -0
  182. data/lib/mibs/ietf/P-BRIDGE-MIB.dic +1499 -0
  183. data/lib/mibs/ietf/PARALLEL-MIB.dic +476 -0
  184. data/lib/mibs/ietf/PIM-MIB.dic +1393 -0
  185. data/lib/mibs/ietf/PIM-STD-MIB.dic +6819 -0
  186. data/lib/mibs/ietf/PINT-MIB.dic +830 -0
  187. data/lib/mibs/ietf/PKTC-IETF-MTA-MIB.dic +3191 -0
  188. data/lib/mibs/ietf/PKTC-IETF-SIG-MIB.dic +4713 -0
  189. data/lib/mibs/ietf/PMIPV6-MIB.dic +3010 -0
  190. data/lib/mibs/ietf/PMIPV6-TC-MIB.dic +293 -0
  191. data/lib/mibs/ietf/POLICY-BASED-MANAGEMENT-MIB.dic +3316 -0
  192. data/lib/mibs/ietf/POWER-ETHERNET-MIB.dic +959 -0
  193. data/lib/mibs/ietf/PPP-BRIDGE-NCP-MIB.dic +587 -0
  194. data/lib/mibs/ietf/PPP-IP-NCP-MIB.dic +269 -0
  195. data/lib/mibs/ietf/PPP-LCP-MIB.dic +994 -0
  196. data/lib/mibs/ietf/PPP-SEC-MIB.dic +411 -0
  197. data/lib/mibs/ietf/PSAMP-MIB.dic +998 -0
  198. data/lib/mibs/ietf/PTOPO-MIB.dic +1135 -0
  199. data/lib/mibs/ietf/PW-ATM-MIB.dic +1642 -0
  200. data/lib/mibs/ietf/PW-CEP-STD-MIB.dic +3661 -0
  201. data/lib/mibs/ietf/PW-STD-MIB.dic +3592 -0
  202. data/lib/mibs/ietf/PW-TC-STD-MIB.dic +437 -0
  203. data/lib/mibs/ietf/PW-TDM-MIB.dic +1896 -0
  204. data/lib/mibs/ietf/PerfHist-TC-MIB.dic +152 -0
  205. data/lib/mibs/ietf/Printer-MIB.dic +6665 -0
  206. data/lib/mibs/ietf/Q-BRIDGE-MIB.dic +3115 -0
  207. data/lib/mibs/ietf/RADIUS-ACC-CLIENT-MIB.dic +991 -0
  208. data/lib/mibs/ietf/RADIUS-ACC-SERVER-MIB.dic +1183 -0
  209. data/lib/mibs/ietf/RADIUS-AUTH-CLIENT-MIB.dic +1073 -0
  210. data/lib/mibs/ietf/RADIUS-AUTH-SERVER-MIB.dic +1251 -0
  211. data/lib/mibs/ietf/RADIUS-DYNAUTH-CLIENT-MIB.dic +1116 -0
  212. data/lib/mibs/ietf/RADIUS-DYNAUTH-SERVER-MIB.dic +1003 -0
  213. data/lib/mibs/ietf/RAQMON-MIB.dic +2695 -0
  214. data/lib/mibs/ietf/RBRIDGE-MIB.dic +2981 -0
  215. data/lib/mibs/ietf/RDBMS-MIB.dic +1935 -0
  216. data/lib/mibs/ietf/RFC1065-SMI.dic +108 -0
  217. data/lib/mibs/ietf/RFC1155-SMI.dic +118 -0
  218. data/lib/mibs/ietf/RFC1158-MIB.dic +2440 -0
  219. data/lib/mibs/ietf/RFC1213-MIB.dic +3434 -0
  220. data/lib/mibs/ietf/RFC1269-MIB.dic +557 -0
  221. data/lib/mibs/ietf/RFC1271-MIB.dic +4135 -0
  222. data/lib/mibs/ietf/RFC1285-MIB.dic +2842 -0
  223. data/lib/mibs/ietf/RFC1316-MIB.dic +800 -0
  224. data/lib/mibs/ietf/RFC1381-MIB.dic +1347 -0
  225. data/lib/mibs/ietf/RFC1382-MIB.dic +3820 -0
  226. data/lib/mibs/ietf/RFC1414-MIB.dic +214 -0
  227. data/lib/mibs/ietf/RIPv2-MIB.dic +773 -0
  228. data/lib/mibs/ietf/RMON-MIB.dic +5551 -0
  229. data/lib/mibs/ietf/RMON2-MIB.dic +8224 -0
  230. data/lib/mibs/ietf/ROHC-MIB.dic +1613 -0
  231. data/lib/mibs/ietf/ROHC-RTP-MIB.dic +859 -0
  232. data/lib/mibs/ietf/ROHC-UNCOMPRESSED-MIB.dic +267 -0
  233. data/lib/mibs/ietf/RPKI-ROUTER-MIB.dic +1363 -0
  234. data/lib/mibs/ietf/RS-232-MIB.dic +1335 -0
  235. data/lib/mibs/ietf/RSERPOOL-MIB.dic +2501 -0
  236. data/lib/mibs/ietf/RSTP-MIB.dic +427 -0
  237. data/lib/mibs/ietf/RSVP-MIB.dic +4135 -0
  238. data/lib/mibs/ietf/RTP-MIB.dic +1376 -0
  239. data/lib/mibs/ietf/SCSI-MIB.dic +3804 -0
  240. data/lib/mibs/ietf/SCTP-MIB.dic +1924 -0
  241. data/lib/mibs/ietf/SFLOW-MIB.dic +568 -0
  242. data/lib/mibs/ietf/SIP-COMMON-MIB.dic +2769 -0
  243. data/lib/mibs/ietf/SIP-MIB.dic +1438 -0
  244. data/lib/mibs/ietf/SIP-SERVER-MIB.dic +1150 -0
  245. data/lib/mibs/ietf/SIP-TC-MIB.dic +257 -0
  246. data/lib/mibs/ietf/SIP-UA-MIB.dic +268 -0
  247. data/lib/mibs/ietf/SLAPM-MIB.dic +4527 -0
  248. data/lib/mibs/ietf/SMON-MIB.dic +1758 -0
  249. data/lib/mibs/ietf/SNA-NAU-MIB.dic +4042 -0
  250. data/lib/mibs/ietf/SNA-SDLC-MIB.dic +3858 -0
  251. data/lib/mibs/ietf/SNMP-COMMUNITY-MIB.dic +715 -0
  252. data/lib/mibs/ietf/SNMP-FRAMEWORK-MIB.dic +709 -0
  253. data/lib/mibs/ietf/SNMP-MPD-MIB.dic +230 -0
  254. data/lib/mibs/ietf/SNMP-NOTIFICATION-MIB.dic +859 -0
  255. data/lib/mibs/ietf/SNMP-PROXY-MIB.dic +414 -0
  256. data/lib/mibs/ietf/SNMP-REPEATER-MIB.dic +4335 -0
  257. data/lib/mibs/ietf/SNMP-SSH-TM-MIB.dic +447 -0
  258. data/lib/mibs/ietf/SNMP-TARGET-MIB.dic +924 -0
  259. data/lib/mibs/ietf/SNMP-TLS-TM-MIB.dic +1449 -0
  260. data/lib/mibs/ietf/SNMP-TSM-MIB.dic +315 -0
  261. data/lib/mibs/ietf/SNMP-USER-BASED-SM-MIB.dic +1164 -0
  262. data/lib/mibs/ietf/SNMP-USM-AES-MIB.dic +95 -0
  263. data/lib/mibs/ietf/SNMP-USM-DH-OBJECTS-MIB.dic +653 -0
  264. data/lib/mibs/ietf/SNMP-VIEW-BASED-ACM-MIB.dic +1202 -0
  265. data/lib/mibs/ietf/SNMPv2-MIB.dic +1382 -0
  266. data/lib/mibs/ietf/SNMPv2-SMI.dic +223 -0
  267. data/lib/mibs/ietf/SNMPv2-USEC-MIB.dic +405 -0
  268. data/lib/mibs/ietf/SONET-MIB.dic +3308 -0
  269. data/lib/mibs/ietf/SOURCE-ROUTING-MIB.dic +542 -0
  270. data/lib/mibs/ietf/SSPM-MIB.dic +1530 -0
  271. data/lib/mibs/ietf/SYSAPPL-MIB.dic +2092 -0
  272. data/lib/mibs/ietf/T11-FC-FABRIC-ADDR-MGR-MIB.dic +1779 -0
  273. data/lib/mibs/ietf/T11-FC-FABRIC-CONFIG-SERVER-MIB.dic +2822 -0
  274. data/lib/mibs/ietf/T11-FC-FABRIC-LOCK-MIB.dic +700 -0
  275. data/lib/mibs/ietf/T11-FC-FSPF-MIB.dic +1889 -0
  276. data/lib/mibs/ietf/T11-FC-NAME-SERVER-MIB.dic +1775 -0
  277. data/lib/mibs/ietf/T11-FC-ROUTE-MIB.dic +655 -0
  278. data/lib/mibs/ietf/T11-FC-RSCN-MIB.dic +1110 -0
  279. data/lib/mibs/ietf/T11-FC-VIRTUAL-FABRIC-MIB.dic +770 -0
  280. data/lib/mibs/ietf/T11-FC-ZONE-SERVER-MIB.dic +3886 -0
  281. data/lib/mibs/ietf/T11-TC-MIB.dic +110 -0
  282. data/lib/mibs/ietf/TCP-ESTATS-MIB.dic +3926 -0
  283. data/lib/mibs/ietf/TCP-MIB.dic +1319 -0
  284. data/lib/mibs/ietf/TCPIPX-MIB.dic +457 -0
  285. data/lib/mibs/ietf/TE-LINK-STD-MIB.dic +2876 -0
  286. data/lib/mibs/ietf/TE-MIB.dic +2924 -0
  287. data/lib/mibs/ietf/TED-MIB.dic +1749 -0
  288. data/lib/mibs/ietf/TIME-AGGREGATE-MIB.dic +550 -0
  289. data/lib/mibs/ietf/TN3270E-MIB.dic +2785 -0
  290. data/lib/mibs/ietf/TN3270E-RT-MIB.dic +1317 -0
  291. data/lib/mibs/ietf/TOKEN-RING-RMON-MIB.dic +2820 -0
  292. data/lib/mibs/ietf/TOKENRING-MIB.dic +1184 -0
  293. data/lib/mibs/ietf/TOKENRING-STATION-SR-MIB.dic +292 -0
  294. data/lib/mibs/ietf/TRANSPORT-ADDRESS-MIB.dic +610 -0
  295. data/lib/mibs/ietf/TRIP-MIB.dic +3159 -0
  296. data/lib/mibs/ietf/TRIP-TC-MIB.dic +241 -0
  297. data/lib/mibs/ietf/TUNNEL-MIB.dic +1095 -0
  298. data/lib/mibs/ietf/UDP-MIB.dic +751 -0
  299. data/lib/mibs/ietf/UDPLITE-MIB.dic +704 -0
  300. data/lib/mibs/ietf/UPS-MIB.dic +3088 -0
  301. data/lib/mibs/ietf/URI-TC-MIB.dic +193 -0
  302. data/lib/mibs/ietf/UUID-TC-MIB.dic +135 -0
  303. data/lib/mibs/ietf/VDSL-LINE-EXT-MCM-MIB.dic +989 -0
  304. data/lib/mibs/ietf/VDSL-LINE-EXT-SCM-MIB.dic +605 -0
  305. data/lib/mibs/ietf/VDSL-LINE-MIB.dic +4518 -0
  306. data/lib/mibs/ietf/VDSL2-LINE-MIB.dic +11029 -0
  307. data/lib/mibs/ietf/VDSL2-LINE-TC-MIB.dic +3152 -0
  308. data/lib/mibs/ietf/VPN-TC-STD-MIB.dic +121 -0
  309. data/lib/mibs/ietf/VRRP-MIB.dic +1163 -0
  310. data/lib/mibs/ietf/VRRPV3-MIB.dic +1403 -0
  311. data/lib/mibs/ietf/WWW-MIB.dic +1810 -0
  312. data/lib/mibs/logstash/iso.dic +18 -0
  313. data/logstash-integration-snmp.gemspec +40 -0
  314. data/spec/fixtures/RFC1213-MIB.dic +3445 -0
  315. data/spec/fixtures/collision.dic +25 -0
  316. data/spec/integration/inputs/snmp_spec.rb +443 -0
  317. data/spec/integration/inputs/snmptrap_spec.rb +383 -0
  318. data/spec/unit/inputs/common_spec.rb +264 -0
  319. data/spec/unit/inputs/snmp_spec.rb +510 -0
  320. data/spec/unit/inputs/snmptrap_spec.rb +141 -0
  321. data/vendor/jar-dependencies/org/logstash/integrations/plugin/4.0.0/plugin-4.0.0.jar +0 -0
  322. data/vendor/jar-dependencies/org/snakeyaml/snakeyaml-engine/2.7/snakeyaml-engine-2.7.jar +0 -0
  323. data/vendor/jar-dependencies/org/snmp4j/snmp4j/3.8.0/snmp4j-3.8.0.jar +0 -0
  324. metadata +523 -0
@@ -0,0 +1,369 @@
1
+ # encoding: utf-8
2
+ require 'logstash/inputs/base'
3
+ require 'logstash/namespace'
4
+ require 'stud/interval'
5
+ require 'set'
6
+
7
+ require 'logstash-integration-snmp_jars'
8
+ require 'logstash/plugin_mixins/ecs_compatibility_support'
9
+ require 'logstash/plugin_mixins/ecs_compatibility_support/target_check'
10
+ require 'logstash/plugin_mixins/event_support/event_factory_adapter'
11
+ require 'logstash/plugin_mixins/validator_support/field_reference_validation_adapter'
12
+ require 'logstash/plugin_mixins/snmp/common'
13
+
14
+ # The SNMP input plugin polls network devices using Simple Network Management Protocol (SNMP)
15
+ # to gather information related to the current state of the devices operation.
16
+ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
17
+
18
+ java_import 'org.logstash.snmp.SnmpClient'
19
+ java_import 'org.logstash.snmp.SnmpClientRequestAggregator'
20
+ java_import 'org.snmp4j.smi.OID'
21
+
22
+ include LogStash::PluginMixins::ECSCompatibilitySupport(:disabled, :v1, :v8 => :v1)
23
+
24
+ include LogStash::PluginMixins::ECSCompatibilitySupport::TargetCheck
25
+
26
+ include LogStash::PluginMixins::EventSupport::EventFactoryAdapter
27
+
28
+ extend LogStash::PluginMixins::ValidatorSupport::FieldReferenceValidationAdapter
29
+
30
+ include LogStash::PluginMixins::Snmp::Common
31
+
32
+ config_name "snmp"
33
+
34
+ # List of OIDs for which we want to retrieve the scalar value
35
+ config :get, :validate => :array # ["1.3.6.1.2.1.1.1.0"]
36
+
37
+ # List of OIDs for which we want to retrieve the subtree of information
38
+ config :walk, :validate => :array # ["1.3.6.1.2.1.1.1.0"]
39
+
40
+ # List of tables to walk
41
+ config :tables, :validate => :array # [ {"name" => "interfaces" "columns" => ["1.3.6.1.2.1.2.2.1.1", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.5"]} ]
42
+
43
+ # List of hosts to query the configured `get` and `walk` options.
44
+ #
45
+ # Each host definition is a hash and must define the `host` key and value.
46
+ # `host` must use the format {tcp|udp}:{ip address}/{port}
47
+ # for example `host => "udp:127.0.0.1/161"`
48
+ # Each host definition can optionally include the following keys and values:
49
+ # `community` with a default value of `public`
50
+ # `version` `1`, `2c` or `3` with a default value of `2c`
51
+ # `retries` with a default value of `2`
52
+ # `timeout` in milliseconds with a default value of `1000`
53
+ config :hosts, :validate => :array # [ {"host" => "udp:127.0.0.1/161", "community" => "public"} ]
54
+
55
+ # Set polling interval in seconds
56
+ #
57
+ # The default, `30`, means poll each host every 30 seconds.
58
+ config :interval, :validate => :number, :default => 30
59
+
60
+ # The optional SNMPv3 engine's administratively-unique identifier.
61
+ # Its length must be greater or equal than 5 and less or equal than 32.
62
+ config :local_engine_id, :validate => :string
63
+
64
+ # Number of threads to use for concurrently executing the hosts SNMP requests.
65
+ config :threads, :validate => :number, :required => true, :default => ::LogStash::Config::CpuCoreStrategy.maximum
66
+
67
+ # Timeout in milliseconds to execute all hosts configured operations (get, walk, table).
68
+ config :poll_hosts_timeout, :validate => :number
69
+
70
+ def initialize(params={})
71
+ super(params)
72
+
73
+ @host_protocol_field = ecs_select[disabled: '[@metadata][host_protocol]', v1: '[@metadata][input][snmp][host][protocol]']
74
+ @host_address_field = ecs_select[disabled: '[@metadata][host_address]', v1: '[@metadata][input][snmp][host][address]']
75
+ @host_port_field = ecs_select[disabled: '[@metadata][host_port]', v1: '[@metadata][input][snmp][host][port]']
76
+ @host_community_field = ecs_select[disabled: '[@metadata][host_community]', v1: '[@metadata][input][snmp][host][community]']
77
+
78
+ # Add the default "host" field to the event, for backwards compatibility, or host.ip in ecs mode
79
+ unless params.key?('add_field')
80
+ host_ip_field = ecs_select[disabled: "host", v1: "[host][ip]"]
81
+ @add_field = { host_ip_field => "%{#{@host_address_field}}" }
82
+ end
83
+ end
84
+
85
+ def register
86
+ validate_config!
87
+
88
+ mib_manager = build_mib_manager!
89
+
90
+ # setup client definitions per provided host
91
+ @client_definitions = []
92
+ supported_transports = Set.new
93
+ hosts_versions = Set.new
94
+
95
+ @hosts.each do |host|
96
+ host_name = host['host']
97
+ version = host['version'] || '2c'
98
+
99
+ unless version =~ VERSION_REGEX
100
+ raise(LogStash::ConfigurationError, "only protocol version '1', '2c' and '3' are supported for host option '#{host_name}'")
101
+ end
102
+
103
+ host_details = host_name.match(HOST_REGEX)
104
+ raise(LogStash::ConfigurationError, "invalid format for host option '#{host_name}'") unless host_details
105
+
106
+ unless host_details[:host_protocol].to_s =~ /^(?:udp|tcp)$/i
107
+ raise(LogStash::ConfigurationError, "only udp & tcp protocols are supported for host option '#{host_name}'")
108
+ end
109
+
110
+ host_protocol = host_details[:host_protocol]
111
+ definition = {
112
+ :get => Array(get),
113
+ :walk => Array(walk),
114
+
115
+ :host => host_name,
116
+ :host_address => host_details[:host_address],
117
+ :host_protocol => host_protocol,
118
+ :host_port => host_details[:host_port],
119
+ :host_community => host['community'] || 'public',
120
+
121
+ :retries => host['retries'] || 2,
122
+ :timeout => host['timeout'] || 1000,
123
+ :version => version,
124
+
125
+ :security_name => @security_name,
126
+ :security_level => @security_level,
127
+ }
128
+
129
+ supported_transports << host_protocol
130
+ hosts_versions << version
131
+ @client_definitions << definition
132
+ end
133
+
134
+ @client = build_client!(mib_manager, supported_transports, hosts_versions)
135
+ @request_aggregator = create_request_aggregator
136
+ end
137
+
138
+ def run(queue)
139
+ # Put the client into the listen mode, so it can send requests and receive responses
140
+ @client.listen
141
+
142
+ # Single threaded poller which sleeps off the remaining interval between each run.
143
+ # Each run polls all the defined hosts for the get, table and walk options.
144
+ stoppable_interval_runner.every(@interval, 'polling hosts') do
145
+ poll_clients(queue)
146
+ end
147
+ end
148
+
149
+ def poll_clients(queue)
150
+ max_host_timeout = 0
151
+ in_flight_requests = []
152
+
153
+ @client_definitions.each do |definition|
154
+ target = @client.create_target(
155
+ definition[:host],
156
+ definition[:version],
157
+ definition[:retries],
158
+ definition[:timeout],
159
+ definition[:host_community],
160
+ definition[:security_name],
161
+ definition[:security_level]
162
+ )
163
+
164
+ request = @request_aggregator.create_request(@client)
165
+ in_flight_requests << { request: request, definition: definition }
166
+
167
+ if definition[:get].any?
168
+ request.get(target, definition[:get].map { |oid| OID.new(oid) })
169
+ end
170
+
171
+ definition[:walk]&.each do |oid|
172
+ request.walk(target, OID.new(oid))
173
+ end
174
+
175
+ @tables&.each do |table_entry|
176
+ oids = table_entry['columns'].map { |oid| OID.new(oid) }
177
+ request.table(target, table_entry['name'], oids)
178
+ end
179
+
180
+ max_host_timeout = definition[:timeout] if definition[:timeout] > max_host_timeout
181
+ end
182
+
183
+ in_flight_requests.each do |req|
184
+ definition = req[:definition]
185
+ result_consumer = lambda do |result|
186
+ if result&.any?
187
+ event = targeted_event_factory.new_event(result)
188
+ event.set(@host_protocol_field, definition[:host_protocol])
189
+ event.set(@host_address_field, definition[:host_address])
190
+ event.set(@host_port_field, definition[:host_port])
191
+ event.set(@host_community_field, definition[:host_community])
192
+ decorate(event)
193
+ queue << event
194
+ else
195
+ logger.debug? && logger.debug('No SNMP data retrieved', host: definition[:host_address])
196
+ end
197
+ end
198
+
199
+ req[:request].get_result_async(result_consumer)
200
+ end
201
+
202
+ begin
203
+ # blocks until all requests are complete
204
+ @request_aggregator.await(in_flight_requests.map { |p| p[:request] }, poll_hosts_timeout(max_host_timeout))
205
+ rescue java.util.concurrent.TimeoutException => _
206
+ logger.error("Timed out while waiting for SNMP requests to finish. Consider increasing `poll_hosts_timeout` if the number of hosts is large")
207
+ end
208
+ end
209
+
210
+ def poll_hosts_timeout(max_host_timeout)
211
+ return @poll_hosts_timeout if @poll_hosts_timeout
212
+
213
+ # this timeout should be a safe-guard and it should never wait for that long.
214
+ # It might reach this point if there are several hosts operations, the hosts
215
+ # are unreachable/unhealthy, and/or the configured host timeout is too high.
216
+ in_flight_timeout = 1000 * 60 * 60 # 1 hour
217
+ in_flight_timeout = max_host_timeout if max_host_timeout > in_flight_timeout
218
+ in_flight_timeout = @interval if @interval > in_flight_timeout
219
+
220
+ in_flight_timeout
221
+ end
222
+
223
+ def stoppable_interval_runner
224
+ StoppableIntervalRunner.new(self)
225
+ end
226
+
227
+ def close
228
+ # keep this close order (aggregator, client), so the request_aggregator can gracefully shutdown
229
+ begin
230
+ @request_aggregator.close unless @request_aggregator.nil?
231
+ rescue => e
232
+ logger.warn('Error closing SNMP client request aggregator. Ignoring', :exception => e)
233
+ end
234
+
235
+ begin
236
+ @client.close unless @client.nil?
237
+ rescue => e
238
+ logger.warn('Error closing SNMP client. Ignoring', :exception => e)
239
+ end
240
+ end
241
+
242
+ private
243
+
244
+ OID_REGEX = /^\.?([0-9\.]+)$/
245
+ HOST_REGEX = /^(?<host_protocol>\w+):(?<host_address>.+)\/(?<host_port>\d+)$/i
246
+ VERSION_REGEX = /^1|2c|3$/
247
+
248
+ def validate_config!
249
+ validate_oids!
250
+ validate_hosts!
251
+ validate_tables!
252
+ validate_local_engine_id!
253
+ end
254
+
255
+ def validate_oids!
256
+ @get = Array(@get).map do |oid|
257
+ # verify oids for valid pattern and get rid or any leading dot if present
258
+ unless oid =~ OID_REGEX
259
+ raise(LogStash::ConfigurationError, "The get option oid '#{oid}' has an invalid format")
260
+ end
261
+ $1
262
+ end
263
+
264
+ @walk = Array(@walk).map do |oid|
265
+ # verify oids for valid pattern and get rid or any leading dot if present
266
+ unless oid =~ OID_REGEX
267
+ raise(LogStash::ConfigurationError, "The walk option oid '#{oid}' has an invalid format")
268
+ end
269
+ $1
270
+ end
271
+
272
+ if !@tables.nil?
273
+ @tables.each do |table_entry|
274
+ # Verify oids for valid pattern and get rid of any leading dot if present
275
+ columns = table_entry["columns"]
276
+ columns.each do |column|
277
+ unless column =~ OID_REGEX
278
+ raise(Logstash::ConfigurationError, "The table column oid '#{column}' is an invalid format")
279
+ end
280
+ end
281
+ $1
282
+ end
283
+ end
284
+
285
+ raise(LogStash::ConfigurationError, "at least one get OID, one walk OID, or one table OID is required") if @get.empty? && @walk.empty? && @tables.nil?
286
+ end
287
+
288
+ def validate_hosts!
289
+ # TODO: for new we only validate the host part, not the other optional options
290
+
291
+ raise(LogStash::ConfigurationError, "at least one host definition is required") if Array(@hosts).empty?
292
+
293
+ @hosts.each do |host|
294
+ raise(LogStash::ConfigurationError, "each host definition must have a \"host\" option") if !host.is_a?(Hash) || host["host"].nil?
295
+ end
296
+ end
297
+
298
+ def validate_tables!
299
+ if !@tables.nil?
300
+ @tables.each do |table_entry|
301
+ raise(LogStash::ConfigurationError, "each table definition must have a \"name\" option") if !table_entry.is_a?(Hash) || table_entry["name"].nil?
302
+ end
303
+ end
304
+ end
305
+
306
+ def validate_local_engine_id!
307
+ return if @local_engine_id.nil?
308
+
309
+ if @local_engine_id.length < 5
310
+ raise(LogStash::ConfigurationError, '`local_engine_id` length must be greater or equal than 5')
311
+ end
312
+
313
+ if @local_engine_id.length > 32
314
+ raise(LogStash::ConfigurationError, '`local_engine_id` length must be lower or equal than 32')
315
+ end
316
+ end
317
+
318
+ def create_request_aggregator
319
+ SnmpClientRequestAggregator.new(@threads, 'SnmpRequestWorker')
320
+ end
321
+
322
+ def build_client!(mib_manager, supported_transports, hosts_versions)
323
+ client_builder = org.logstash.snmp.SnmpClient.builder(mib_manager, supported_transports)
324
+ client_builder.setLocalEngineId(@local_engine_id) unless @local_engine_id.nil?
325
+
326
+ build_snmp_client!(client_builder, validate_usm_user: hosts_versions.include?('3'))
327
+ end
328
+
329
+ ##
330
+ # The StoppableIntervalRunner is capable of running a block of code at a
331
+ # repeating interval, while respecting the stop condition of the plugin.
332
+ class StoppableIntervalRunner
333
+ ##
334
+ # @param plugin [#logger,#stop?]
335
+ def initialize(plugin)
336
+ @plugin = plugin
337
+ end
338
+
339
+ ##
340
+ # Runs the provided block repeatedly using the provided interval.
341
+ # After executing the block, the remainder of the interval if any is slept off
342
+ # using an interruptible sleep.
343
+ # If no time remains, a warning is emitted to the logs.
344
+ #
345
+ # @param interval_seconds [Integer,Float]
346
+ # @param desc [String] (default: "operation"): a description to use when logging
347
+ # @yield
348
+ def every(interval_seconds, desc="operation", &block)
349
+ until @plugin.stop?
350
+ start_time = Time.now
351
+
352
+ yield
353
+
354
+ duration_seconds = Time.now - start_time
355
+ if duration_seconds >= interval_seconds
356
+ @plugin.logger.warn("#{desc} took longer than the configured interval", :interval_seconds => interval_seconds, :duration_seconds => duration_seconds.round(3))
357
+ else
358
+ remaining_interval = interval_seconds - duration_seconds
359
+ sleep(remaining_interval)
360
+ end
361
+ end
362
+ end
363
+
364
+ # @api private
365
+ def sleep(duration)
366
+ Stud.stoppable_sleep(duration) { @plugin.stop? }
367
+ end
368
+ end
369
+ end
@@ -0,0 +1,190 @@
1
+ # encoding: utf-8
2
+ require 'logstash/inputs/base'
3
+ require 'logstash/namespace'
4
+ require 'set'
5
+
6
+ require 'logstash-integration-snmp_jars'
7
+ require 'logstash/plugin_mixins/ecs_compatibility_support'
8
+ require 'logstash/plugin_mixins/ecs_compatibility_support/target_check'
9
+ require 'logstash/plugin_mixins/event_support/event_factory_adapter'
10
+ require 'logstash/plugin_mixins/validator_support/field_reference_validation_adapter'
11
+ require 'logstash/plugin_mixins/normalize_config_support'
12
+ require 'logstash/plugin_mixins/snmp/common'
13
+
14
+ # Read snmp trap messages as events
15
+ #
16
+ # Resulting `@message` looks like :
17
+ # [source,json]
18
+ # {"error_index":0,"variable_bindings":{"1.3.6.1.6.3.1.1.4.1.0":"value"},"error_status":0,"type":"TRAP","error_status_text":"Success","version":"3","request_id":145014487}
19
+ #
20
+ class LogStash::Inputs::Snmptrap < LogStash::Inputs::Base
21
+
22
+ java_import 'org.logstash.snmp.SnmpClient'
23
+
24
+ include LogStash::PluginMixins::ECSCompatibilitySupport(:disabled, :v1, :v8 => :v1)
25
+
26
+ include LogStash::PluginMixins::ECSCompatibilitySupport::TargetCheck
27
+
28
+ include LogStash::PluginMixins::EventSupport::EventFactoryAdapter
29
+
30
+ extend LogStash::PluginMixins::ValidatorSupport::FieldReferenceValidationAdapter
31
+
32
+ include LogStash::PluginMixins::NormalizeConfigSupport
33
+
34
+ include LogStash::PluginMixins::Snmp::Common
35
+
36
+ config_name 'snmptrap'
37
+
38
+ # The address to listen on
39
+ config :host, :validate => :string, :required => true, :default => '0.0.0.0'
40
+
41
+ # The port to listen on. Remember that ports less than 1024 (privileged
42
+ # ports) may require root to use. hence the default of 1062.
43
+ config :port, :validate => :number, :required => true, :default => 1062
44
+
45
+ # The supported transport protocols to listen on.
46
+ config :supported_transports, :validate => %w[tcp udp], :default => %w[udp], :required => true, :list => true
47
+
48
+ # The supported SNMP versions to listen on
49
+ config :supported_versions, :validate => %w[1 2c 3], default: %w[1 2c], :required => true, :list => true
50
+
51
+ # SNMP Community String to listen for.
52
+ config :community, :validate => :array, :default => 'public'
53
+
54
+ # directory of YAML MIB maps (same format ruby-snmp uses)
55
+ config :yamlmibdir, :validate => :string, :deprecated => "Use `mib_paths` instead."
56
+
57
+ # Number of threads to use for processing the received SNMP messages.
58
+ # By default, SNMP4J uses a single listener thread, which delegates all received data
59
+ # to the message dispatcher. This setting, configures the number of threads to be used
60
+ # by the message dispatcher, so it won't block the listener thread.
61
+ config :threads, :validate => :number, :required => true, :default => ::LogStash::Config::CpuCoreStrategy.seventy_five_percent
62
+
63
+ # These MIBs were automatically added by ruby-snmp when no @yamlmibdir was provided.
64
+ MIB_DEFAULT_PATHS = [
65
+ ::File.join(MIB_BASE_PATH, 'ietf', 'SNMPv2-SMI.dic'),
66
+ ::File.join(MIB_BASE_PATH, 'ietf', 'SNMPv2-MIB.dic'),
67
+ ::File.join(MIB_BASE_PATH, 'ietf', 'IF-MIB.dic'),
68
+ ::File.join(MIB_BASE_PATH, 'ietf', 'IP-MIB.dic'),
69
+ ::File.join(MIB_BASE_PATH, 'ietf', 'TCP-MIB.dic'),
70
+ ::File.join(MIB_BASE_PATH, 'ietf', 'UDP-MIB.dic')
71
+ ].map { |path| ::File.expand_path(path) }
72
+
73
+ def initialize(params = {})
74
+ super(params)
75
+
76
+ setup_deprecated_params!
77
+ @host_ip_field = ecs_select[disabled: 'host', v1: '[host][ip]']
78
+ end
79
+
80
+ def register
81
+ validate_config!
82
+ mib_manager = build_mib_manager!
83
+
84
+ if !@mib_paths && !@use_provided_mibs
85
+ logger.info("Using default MIB paths #{MIB_DEFAULT_PATHS}")
86
+ MIB_DEFAULT_PATHS.each do |path|
87
+ mib_manager.add(path)
88
+ end
89
+ end
90
+
91
+ @client = build_client!(mib_manager)
92
+ end
93
+
94
+ def run(output_queue)
95
+ begin
96
+ trap_message_consumer = lambda { |trap| consume_trap_message(output_queue, trap) }
97
+ @client.trap(@community, trap_message_consumer)
98
+ rescue => e
99
+ @logger.warn('SNMP Trap listener died', format_log_data(e))
100
+ Stud.stoppable_sleep(5) { stop? }
101
+ retry if !stop?
102
+ end
103
+ end
104
+
105
+ def stop
106
+ begin
107
+ @client.close unless @client.nil?
108
+ rescue => e
109
+ logger.warn('Error closing SNMP client. Ignoring', format_log_data(e))
110
+ end
111
+ end
112
+
113
+ def client_listening?
114
+ @client.isListening()
115
+ end
116
+
117
+ private
118
+
119
+ def validate_config!
120
+ if !@security_name.nil? && !@supported_versions.include?('3')
121
+ raise(LogStash::ConfigurationError, "Using a `security_name` requires `supported_versions` to include version '3': #{@supported_versions}")
122
+ end
123
+ end
124
+
125
+ def build_client!(mib_manager)
126
+ client_builder = org.logstash.snmp.SnmpClient
127
+ .builder(mib_manager, @supported_transports.to_set, @port)
128
+ .setHost(@host)
129
+ .setSupportedVersions(@supported_versions.to_set)
130
+ .setMessageDispatcherPoolName('SnmpTrapMessageDispatcherWorker')
131
+ .setMessageDispatcherPoolSize(@threads)
132
+
133
+ build_snmp_client!(client_builder, validate_usm_user: @supported_versions.include?('3'))
134
+ end
135
+
136
+ def consume_trap_message(output_queue, trap_message)
137
+ begin
138
+ output_queue << process_trap_message(trap_message)
139
+ rescue => e
140
+ extra_data = { :trap_event => format_trap_message(trap_message) } if trap_message rescue {}
141
+ @logger.error('Failed to create event', format_log_data(e, extra_data))
142
+ end
143
+ end
144
+
145
+ def process_trap_message(trap_message)
146
+ data = Hash.new
147
+
148
+ trap_message.getFormattedVariableBindings.each do |name, value|
149
+ data[name] = value
150
+ end
151
+
152
+ event = targeted_event_factory.new_event(data)
153
+ event.set(@host_ip_field, trap_message.getPeerIpAddress)
154
+ event.set('message', format_trap_message(trap_message))
155
+
156
+ add_metadata_fields(event, trap_message.getTrapEvent)
157
+ decorate(event)
158
+
159
+ event
160
+ end
161
+
162
+ def format_trap_message(trap_message)
163
+ trap_event = trap_message.getTrapEvent.to_hash
164
+ trap_event['variable_bindings'] = trap_event['variable_bindings'].to_hash
165
+ LogStash::Json.dump(trap_event)
166
+ end
167
+
168
+ def add_metadata_fields(event, trap_event)
169
+ trap_event.each do |name, value|
170
+ event.set("[@metadata][input][snmptrap][pdu][#{name}]", value) if value
171
+ end
172
+ end
173
+
174
+ def setup_deprecated_params!
175
+ @mib_paths = normalize_config(:mib_paths) do |normalize|
176
+ normalize.with_deprecated_mapping(:yamlmibdir) do |yamlmibdir|
177
+ [yamlmibdir]
178
+ end
179
+ end
180
+ end
181
+
182
+ def format_log_data(exception, extra_data = {})
183
+ data = {}
184
+ data[:exception] = exception.class
185
+ data[:message] = exception.message
186
+ data[:backtrace] = exception.backtrace if logger.debug?
187
+ data.merge!(extra_data)
188
+ data
189
+ end
190
+ end