logstash-lib 1.3.2

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 (419) hide show
  1. data/.gitignore +24 -0
  2. data/.tailor +8 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG +1185 -0
  5. data/CONTRIBUTING.md +61 -0
  6. data/CONTRIBUTORS +79 -0
  7. data/LICENSE +14 -0
  8. data/Makefile +460 -0
  9. data/README.md +120 -0
  10. data/STYLE.md +96 -0
  11. data/bin/logstash +37 -0
  12. data/bin/logstash-test +4 -0
  13. data/bin/logstash-web +4 -0
  14. data/bin/logstash.lib.sh +78 -0
  15. data/bot/check_pull_changelog.rb +89 -0
  16. data/docs/configuration.md +260 -0
  17. data/docs/docgen.rb +242 -0
  18. data/docs/extending/example-add-a-new-filter.md +121 -0
  19. data/docs/extending/index.md +91 -0
  20. data/docs/flags.md +43 -0
  21. data/docs/generate_index.rb +28 -0
  22. data/docs/index.html.erb +56 -0
  23. data/docs/learn.md +46 -0
  24. data/docs/life-of-an-event.md +109 -0
  25. data/docs/logging-tool-comparisons.md +60 -0
  26. data/docs/plugin-doc.html.erb +91 -0
  27. data/docs/plugin-milestones.md +41 -0
  28. data/docs/plugin-synopsis.html.erb +24 -0
  29. data/docs/release-engineering.md +46 -0
  30. data/docs/release-test-results.md +14 -0
  31. data/docs/repositories.md +35 -0
  32. data/docs/tutorials/10-minute-walkthrough/apache-elasticsearch.conf +35 -0
  33. data/docs/tutorials/10-minute-walkthrough/apache-parse.conf +33 -0
  34. data/docs/tutorials/10-minute-walkthrough/apache_log.1 +1 -0
  35. data/docs/tutorials/10-minute-walkthrough/apache_log.2.bz2 +0 -0
  36. data/docs/tutorials/10-minute-walkthrough/hello-search.conf +25 -0
  37. data/docs/tutorials/10-minute-walkthrough/hello.conf +16 -0
  38. data/docs/tutorials/10-minute-walkthrough/index.md +124 -0
  39. data/docs/tutorials/10-minute-walkthrough/step-5-output.txt +17 -0
  40. data/docs/tutorials/getting-started-centralized-overview-diagram.png +0 -0
  41. data/docs/tutorials/getting-started-centralized-overview-diagram.xml +1 -0
  42. data/docs/tutorials/getting-started-centralized.md +217 -0
  43. data/docs/tutorials/getting-started-simple.md +200 -0
  44. data/docs/tutorials/just-enough-rabbitmq-for-logstash.md +201 -0
  45. data/docs/tutorials/media/frontend-response-codes.png +0 -0
  46. data/docs/tutorials/metrics-from-logs.md +84 -0
  47. data/docs/tutorials/zeromq.md +118 -0
  48. data/extract_services.rb +29 -0
  49. data/gembag.rb +64 -0
  50. data/lib/logstash-event.rb +2 -0
  51. data/lib/logstash.rb +4 -0
  52. data/lib/logstash/JRUBY-6970-openssl.rb +22 -0
  53. data/lib/logstash/JRUBY-6970.rb +102 -0
  54. data/lib/logstash/agent.rb +305 -0
  55. data/lib/logstash/certs/cacert.pem +3895 -0
  56. data/lib/logstash/codecs/base.rb +49 -0
  57. data/lib/logstash/codecs/compress_spooler.rb +50 -0
  58. data/lib/logstash/codecs/dots.rb +18 -0
  59. data/lib/logstash/codecs/edn.rb +28 -0
  60. data/lib/logstash/codecs/edn_lines.rb +36 -0
  61. data/lib/logstash/codecs/fluent.rb +55 -0
  62. data/lib/logstash/codecs/graphite.rb +114 -0
  63. data/lib/logstash/codecs/json.rb +41 -0
  64. data/lib/logstash/codecs/json_lines.rb +52 -0
  65. data/lib/logstash/codecs/json_spooler.rb +22 -0
  66. data/lib/logstash/codecs/line.rb +58 -0
  67. data/lib/logstash/codecs/msgpack.rb +43 -0
  68. data/lib/logstash/codecs/multiline.rb +189 -0
  69. data/lib/logstash/codecs/netflow.rb +342 -0
  70. data/lib/logstash/codecs/netflow/util.rb +212 -0
  71. data/lib/logstash/codecs/noop.rb +19 -0
  72. data/lib/logstash/codecs/oldlogstashjson.rb +56 -0
  73. data/lib/logstash/codecs/plain.rb +48 -0
  74. data/lib/logstash/codecs/rubydebug.rb +22 -0
  75. data/lib/logstash/codecs/spool.rb +38 -0
  76. data/lib/logstash/config/Makefile +4 -0
  77. data/lib/logstash/config/config_ast.rb +380 -0
  78. data/lib/logstash/config/file.rb +39 -0
  79. data/lib/logstash/config/grammar.rb +3504 -0
  80. data/lib/logstash/config/grammar.treetop +241 -0
  81. data/lib/logstash/config/mixin.rb +464 -0
  82. data/lib/logstash/config/registry.rb +13 -0
  83. data/lib/logstash/config/test.conf +18 -0
  84. data/lib/logstash/errors.rb +10 -0
  85. data/lib/logstash/event.rb +262 -0
  86. data/lib/logstash/filters/advisor.rb +178 -0
  87. data/lib/logstash/filters/alter.rb +173 -0
  88. data/lib/logstash/filters/anonymize.rb +93 -0
  89. data/lib/logstash/filters/base.rb +190 -0
  90. data/lib/logstash/filters/checksum.rb +50 -0
  91. data/lib/logstash/filters/cidr.rb +76 -0
  92. data/lib/logstash/filters/cipher.rb +145 -0
  93. data/lib/logstash/filters/clone.rb +35 -0
  94. data/lib/logstash/filters/collate.rb +114 -0
  95. data/lib/logstash/filters/csv.rb +94 -0
  96. data/lib/logstash/filters/date.rb +244 -0
  97. data/lib/logstash/filters/dns.rb +201 -0
  98. data/lib/logstash/filters/drop.rb +32 -0
  99. data/lib/logstash/filters/elapsed.rb +256 -0
  100. data/lib/logstash/filters/elasticsearch.rb +73 -0
  101. data/lib/logstash/filters/environment.rb +27 -0
  102. data/lib/logstash/filters/extractnumbers.rb +84 -0
  103. data/lib/logstash/filters/gelfify.rb +52 -0
  104. data/lib/logstash/filters/geoip.rb +145 -0
  105. data/lib/logstash/filters/grep.rb +153 -0
  106. data/lib/logstash/filters/grok.rb +425 -0
  107. data/lib/logstash/filters/grokdiscovery.rb +75 -0
  108. data/lib/logstash/filters/i18n.rb +51 -0
  109. data/lib/logstash/filters/json.rb +90 -0
  110. data/lib/logstash/filters/json_encode.rb +52 -0
  111. data/lib/logstash/filters/kv.rb +232 -0
  112. data/lib/logstash/filters/metaevent.rb +68 -0
  113. data/lib/logstash/filters/metrics.rb +237 -0
  114. data/lib/logstash/filters/multiline.rb +241 -0
  115. data/lib/logstash/filters/mutate.rb +399 -0
  116. data/lib/logstash/filters/noop.rb +21 -0
  117. data/lib/logstash/filters/prune.rb +149 -0
  118. data/lib/logstash/filters/punct.rb +32 -0
  119. data/lib/logstash/filters/railsparallelrequest.rb +86 -0
  120. data/lib/logstash/filters/range.rb +142 -0
  121. data/lib/logstash/filters/ruby.rb +42 -0
  122. data/lib/logstash/filters/sleep.rb +111 -0
  123. data/lib/logstash/filters/split.rb +64 -0
  124. data/lib/logstash/filters/sumnumbers.rb +73 -0
  125. data/lib/logstash/filters/syslog_pri.rb +107 -0
  126. data/lib/logstash/filters/translate.rb +121 -0
  127. data/lib/logstash/filters/unique.rb +29 -0
  128. data/lib/logstash/filters/urldecode.rb +57 -0
  129. data/lib/logstash/filters/useragent.rb +112 -0
  130. data/lib/logstash/filters/uuid.rb +58 -0
  131. data/lib/logstash/filters/xml.rb +139 -0
  132. data/lib/logstash/filters/zeromq.rb +123 -0
  133. data/lib/logstash/filterworker.rb +122 -0
  134. data/lib/logstash/inputs/base.rb +125 -0
  135. data/lib/logstash/inputs/collectd.rb +306 -0
  136. data/lib/logstash/inputs/drupal_dblog.rb +323 -0
  137. data/lib/logstash/inputs/drupal_dblog/jdbcconnection.rb +66 -0
  138. data/lib/logstash/inputs/elasticsearch.rb +140 -0
  139. data/lib/logstash/inputs/eventlog.rb +129 -0
  140. data/lib/logstash/inputs/eventlog/racob_fix.rb +44 -0
  141. data/lib/logstash/inputs/exec.rb +69 -0
  142. data/lib/logstash/inputs/file.rb +146 -0
  143. data/lib/logstash/inputs/ganglia.rb +127 -0
  144. data/lib/logstash/inputs/ganglia/gmondpacket.rb +146 -0
  145. data/lib/logstash/inputs/ganglia/xdr.rb +327 -0
  146. data/lib/logstash/inputs/gelf.rb +138 -0
  147. data/lib/logstash/inputs/gemfire.rb +222 -0
  148. data/lib/logstash/inputs/generator.rb +97 -0
  149. data/lib/logstash/inputs/graphite.rb +41 -0
  150. data/lib/logstash/inputs/heroku.rb +51 -0
  151. data/lib/logstash/inputs/imap.rb +136 -0
  152. data/lib/logstash/inputs/irc.rb +84 -0
  153. data/lib/logstash/inputs/log4j.rb +136 -0
  154. data/lib/logstash/inputs/lumberjack.rb +53 -0
  155. data/lib/logstash/inputs/pipe.rb +57 -0
  156. data/lib/logstash/inputs/rabbitmq.rb +126 -0
  157. data/lib/logstash/inputs/rabbitmq/bunny.rb +118 -0
  158. data/lib/logstash/inputs/rabbitmq/hot_bunnies.rb +1 -0
  159. data/lib/logstash/inputs/rabbitmq/march_hare.rb +129 -0
  160. data/lib/logstash/inputs/redis.rb +263 -0
  161. data/lib/logstash/inputs/relp.rb +106 -0
  162. data/lib/logstash/inputs/s3.rb +279 -0
  163. data/lib/logstash/inputs/snmptrap.rb +87 -0
  164. data/lib/logstash/inputs/sqlite.rb +185 -0
  165. data/lib/logstash/inputs/sqs.rb +172 -0
  166. data/lib/logstash/inputs/stdin.rb +46 -0
  167. data/lib/logstash/inputs/stomp.rb +84 -0
  168. data/lib/logstash/inputs/syslog.rb +237 -0
  169. data/lib/logstash/inputs/tcp.rb +231 -0
  170. data/lib/logstash/inputs/threadable.rb +18 -0
  171. data/lib/logstash/inputs/twitter.rb +82 -0
  172. data/lib/logstash/inputs/udp.rb +81 -0
  173. data/lib/logstash/inputs/unix.rb +163 -0
  174. data/lib/logstash/inputs/varnishlog.rb +48 -0
  175. data/lib/logstash/inputs/websocket.rb +50 -0
  176. data/lib/logstash/inputs/wmi.rb +72 -0
  177. data/lib/logstash/inputs/xmpp.rb +81 -0
  178. data/lib/logstash/inputs/zenoss.rb +143 -0
  179. data/lib/logstash/inputs/zeromq.rb +165 -0
  180. data/lib/logstash/kibana.rb +113 -0
  181. data/lib/logstash/loadlibs.rb +9 -0
  182. data/lib/logstash/logging.rb +89 -0
  183. data/lib/logstash/monkeypatches-for-bugs.rb +2 -0
  184. data/lib/logstash/monkeypatches-for-debugging.rb +47 -0
  185. data/lib/logstash/monkeypatches-for-performance.rb +66 -0
  186. data/lib/logstash/multiqueue.rb +53 -0
  187. data/lib/logstash/namespace.rb +16 -0
  188. data/lib/logstash/outputs/base.rb +120 -0
  189. data/lib/logstash/outputs/boundary.rb +116 -0
  190. data/lib/logstash/outputs/circonus.rb +78 -0
  191. data/lib/logstash/outputs/cloudwatch.rb +351 -0
  192. data/lib/logstash/outputs/csv.rb +55 -0
  193. data/lib/logstash/outputs/datadog.rb +93 -0
  194. data/lib/logstash/outputs/datadog_metrics.rb +123 -0
  195. data/lib/logstash/outputs/elasticsearch.rb +332 -0
  196. data/lib/logstash/outputs/elasticsearch/elasticsearch-template.json +44 -0
  197. data/lib/logstash/outputs/elasticsearch_http.rb +256 -0
  198. data/lib/logstash/outputs/elasticsearch_river.rb +214 -0
  199. data/lib/logstash/outputs/email.rb +299 -0
  200. data/lib/logstash/outputs/exec.rb +40 -0
  201. data/lib/logstash/outputs/file.rb +180 -0
  202. data/lib/logstash/outputs/ganglia.rb +75 -0
  203. data/lib/logstash/outputs/gelf.rb +208 -0
  204. data/lib/logstash/outputs/gemfire.rb +103 -0
  205. data/lib/logstash/outputs/google_bigquery.rb +570 -0
  206. data/lib/logstash/outputs/google_cloud_storage.rb +431 -0
  207. data/lib/logstash/outputs/graphite.rb +143 -0
  208. data/lib/logstash/outputs/graphtastic.rb +185 -0
  209. data/lib/logstash/outputs/hipchat.rb +80 -0
  210. data/lib/logstash/outputs/http.rb +142 -0
  211. data/lib/logstash/outputs/irc.rb +80 -0
  212. data/lib/logstash/outputs/jira.rb +109 -0
  213. data/lib/logstash/outputs/juggernaut.rb +105 -0
  214. data/lib/logstash/outputs/librato.rb +146 -0
  215. data/lib/logstash/outputs/loggly.rb +93 -0
  216. data/lib/logstash/outputs/lumberjack.rb +51 -0
  217. data/lib/logstash/outputs/metriccatcher.rb +103 -0
  218. data/lib/logstash/outputs/mongodb.rb +81 -0
  219. data/lib/logstash/outputs/nagios.rb +119 -0
  220. data/lib/logstash/outputs/nagios_nsca.rb +123 -0
  221. data/lib/logstash/outputs/null.rb +18 -0
  222. data/lib/logstash/outputs/opentsdb.rb +101 -0
  223. data/lib/logstash/outputs/pagerduty.rb +79 -0
  224. data/lib/logstash/outputs/pipe.rb +132 -0
  225. data/lib/logstash/outputs/rabbitmq.rb +96 -0
  226. data/lib/logstash/outputs/rabbitmq/bunny.rb +135 -0
  227. data/lib/logstash/outputs/rabbitmq/hot_bunnies.rb +1 -0
  228. data/lib/logstash/outputs/rabbitmq/march_hare.rb +143 -0
  229. data/lib/logstash/outputs/redis.rb +245 -0
  230. data/lib/logstash/outputs/riak.rb +152 -0
  231. data/lib/logstash/outputs/riemann.rb +109 -0
  232. data/lib/logstash/outputs/s3.rb +356 -0
  233. data/lib/logstash/outputs/sns.rb +124 -0
  234. data/lib/logstash/outputs/solr_http.rb +78 -0
  235. data/lib/logstash/outputs/sqs.rb +141 -0
  236. data/lib/logstash/outputs/statsd.rb +116 -0
  237. data/lib/logstash/outputs/stdout.rb +53 -0
  238. data/lib/logstash/outputs/stomp.rb +67 -0
  239. data/lib/logstash/outputs/syslog.rb +145 -0
  240. data/lib/logstash/outputs/tcp.rb +145 -0
  241. data/lib/logstash/outputs/udp.rb +38 -0
  242. data/lib/logstash/outputs/websocket.rb +46 -0
  243. data/lib/logstash/outputs/websocket/app.rb +29 -0
  244. data/lib/logstash/outputs/websocket/pubsub.rb +45 -0
  245. data/lib/logstash/outputs/xmpp.rb +78 -0
  246. data/lib/logstash/outputs/zabbix.rb +108 -0
  247. data/lib/logstash/outputs/zeromq.rb +125 -0
  248. data/lib/logstash/pipeline.rb +286 -0
  249. data/lib/logstash/plugin.rb +150 -0
  250. data/lib/logstash/plugin_mixins/aws_config.rb +93 -0
  251. data/lib/logstash/program.rb +15 -0
  252. data/lib/logstash/runner.rb +238 -0
  253. data/lib/logstash/sized_queue.rb +8 -0
  254. data/lib/logstash/test.rb +183 -0
  255. data/lib/logstash/threadwatchdog.rb +37 -0
  256. data/lib/logstash/time_addon.rb +33 -0
  257. data/lib/logstash/util.rb +106 -0
  258. data/lib/logstash/util/buftok.rb +139 -0
  259. data/lib/logstash/util/charset.rb +39 -0
  260. data/lib/logstash/util/fieldreference.rb +50 -0
  261. data/lib/logstash/util/password.rb +25 -0
  262. data/lib/logstash/util/prctl.rb +11 -0
  263. data/lib/logstash/util/relp.rb +326 -0
  264. data/lib/logstash/util/require-helper.rb +18 -0
  265. data/lib/logstash/util/socket_peer.rb +7 -0
  266. data/lib/logstash/util/zenoss.rb +566 -0
  267. data/lib/logstash/util/zeromq.rb +47 -0
  268. data/lib/logstash/version.rb +6 -0
  269. data/locales/en.yml +170 -0
  270. data/logstash-event.gemspec +29 -0
  271. data/logstash.gemspec +128 -0
  272. data/patterns/firewalls +60 -0
  273. data/patterns/grok-patterns +91 -0
  274. data/patterns/haproxy +37 -0
  275. data/patterns/java +3 -0
  276. data/patterns/linux-syslog +14 -0
  277. data/patterns/mcollective +1 -0
  278. data/patterns/mcollective-patterns +4 -0
  279. data/patterns/nagios +108 -0
  280. data/patterns/postgresql +3 -0
  281. data/patterns/redis +3 -0
  282. data/patterns/ruby +2 -0
  283. data/pkg/build.sh +135 -0
  284. data/pkg/centos/after-install.sh +1 -0
  285. data/pkg/centos/before-install.sh +10 -0
  286. data/pkg/centos/before-remove.sh +11 -0
  287. data/pkg/centos/sysconfig +15 -0
  288. data/pkg/debian/after-install.sh +5 -0
  289. data/pkg/debian/before-install.sh +13 -0
  290. data/pkg/debian/before-remove.sh +13 -0
  291. data/pkg/debian/build.sh +34 -0
  292. data/pkg/debian/debian/README +6 -0
  293. data/pkg/debian/debian/changelog +17 -0
  294. data/pkg/debian/debian/compat +1 -0
  295. data/pkg/debian/debian/control +16 -0
  296. data/pkg/debian/debian/copyright +27 -0
  297. data/pkg/debian/debian/dirs +19 -0
  298. data/pkg/debian/debian/docs +0 -0
  299. data/pkg/debian/debian/logstash.default +39 -0
  300. data/pkg/debian/debian/logstash.init +201 -0
  301. data/pkg/debian/debian/logstash.install +1 -0
  302. data/pkg/debian/debian/logstash.logrotate +9 -0
  303. data/pkg/debian/debian/logstash.postinst +68 -0
  304. data/pkg/debian/debian/logstash.postrm +23 -0
  305. data/pkg/debian/debian/manpage.1.ex +59 -0
  306. data/pkg/debian/debian/preinst.ex +37 -0
  307. data/pkg/debian/debian/prerm.ex +40 -0
  308. data/pkg/debian/debian/release.conf +5 -0
  309. data/pkg/debian/debian/rules +80 -0
  310. data/pkg/debian/debian/watch.ex +22 -0
  311. data/pkg/logrotate.conf +8 -0
  312. data/pkg/logstash-web.default +41 -0
  313. data/pkg/logstash-web.sysv.debian +201 -0
  314. data/pkg/logstash-web.upstart.ubuntu +18 -0
  315. data/pkg/logstash.default +45 -0
  316. data/pkg/logstash.sysv.debian +202 -0
  317. data/pkg/logstash.sysv.redhat +158 -0
  318. data/pkg/logstash.upstart.ubuntu +20 -0
  319. data/pkg/rpm/SOURCES/logstash.conf +26 -0
  320. data/pkg/rpm/SOURCES/logstash.init +80 -0
  321. data/pkg/rpm/SOURCES/logstash.logrotate +8 -0
  322. data/pkg/rpm/SOURCES/logstash.sysconfig +3 -0
  323. data/pkg/rpm/SOURCES/logstash.wrapper +105 -0
  324. data/pkg/rpm/SPECS/logstash.spec +180 -0
  325. data/pkg/rpm/readme.md +4 -0
  326. data/pkg/ubuntu/after-install.sh +7 -0
  327. data/pkg/ubuntu/before-install.sh +12 -0
  328. data/pkg/ubuntu/before-remove.sh +13 -0
  329. data/pull_release_note.rb +25 -0
  330. data/require-analyze.rb +22 -0
  331. data/spec/README.md +14 -0
  332. data/spec/codecs/edn.rb +40 -0
  333. data/spec/codecs/edn_lines.rb +53 -0
  334. data/spec/codecs/graphite.rb +96 -0
  335. data/spec/codecs/json.rb +57 -0
  336. data/spec/codecs/json_lines.rb +51 -0
  337. data/spec/codecs/json_spooler.rb +43 -0
  338. data/spec/codecs/msgpack.rb +39 -0
  339. data/spec/codecs/multiline.rb +60 -0
  340. data/spec/codecs/oldlogstashjson.rb +55 -0
  341. data/spec/codecs/plain.rb +35 -0
  342. data/spec/codecs/spool.rb +35 -0
  343. data/spec/conditionals/test.rb +323 -0
  344. data/spec/config.rb +31 -0
  345. data/spec/event.rb +165 -0
  346. data/spec/examples/fail2ban.rb +28 -0
  347. data/spec/examples/graphite-input.rb +41 -0
  348. data/spec/examples/mysql-slow-query.rb +70 -0
  349. data/spec/examples/parse-apache-logs.rb +66 -0
  350. data/spec/examples/parse-haproxy-logs.rb +115 -0
  351. data/spec/examples/syslog.rb +48 -0
  352. data/spec/filters/alter.rb +96 -0
  353. data/spec/filters/anonymize.rb +189 -0
  354. data/spec/filters/checksum.rb +41 -0
  355. data/spec/filters/clone.rb +67 -0
  356. data/spec/filters/collate.rb +122 -0
  357. data/spec/filters/csv.rb +174 -0
  358. data/spec/filters/date.rb +285 -0
  359. data/spec/filters/date_performance.rb +31 -0
  360. data/spec/filters/dns.rb +159 -0
  361. data/spec/filters/drop.rb +19 -0
  362. data/spec/filters/elapsed.rb +294 -0
  363. data/spec/filters/environment.rb +43 -0
  364. data/spec/filters/geoip.rb +62 -0
  365. data/spec/filters/grep.rb +342 -0
  366. data/spec/filters/grok.rb +473 -0
  367. data/spec/filters/grok/timeout2.rb +56 -0
  368. data/spec/filters/grok/timeouts.rb +39 -0
  369. data/spec/filters/i18n.rb +25 -0
  370. data/spec/filters/json.rb +72 -0
  371. data/spec/filters/json_encode.rb +37 -0
  372. data/spec/filters/kv.rb +403 -0
  373. data/spec/filters/metrics.rb +212 -0
  374. data/spec/filters/multiline.rb +119 -0
  375. data/spec/filters/mutate.rb +180 -0
  376. data/spec/filters/noop.rb +221 -0
  377. data/spec/filters/prune.rb +441 -0
  378. data/spec/filters/punct.rb +18 -0
  379. data/spec/filters/railsparallelrequest.rb +112 -0
  380. data/spec/filters/range.rb +169 -0
  381. data/spec/filters/split.rb +58 -0
  382. data/spec/filters/translate.rb +70 -0
  383. data/spec/filters/unique.rb +25 -0
  384. data/spec/filters/useragent.rb +42 -0
  385. data/spec/filters/xml.rb +157 -0
  386. data/spec/inputs/file.rb +107 -0
  387. data/spec/inputs/gelf.rb +52 -0
  388. data/spec/inputs/generator.rb +30 -0
  389. data/spec/inputs/imap.rb +60 -0
  390. data/spec/inputs/redis.rb +63 -0
  391. data/spec/inputs/relp.rb +70 -0
  392. data/spec/inputs/tcp.rb +101 -0
  393. data/spec/jar.rb +21 -0
  394. data/spec/outputs/csv.rb +266 -0
  395. data/spec/outputs/elasticsearch.rb +161 -0
  396. data/spec/outputs/elasticsearch_http.rb +240 -0
  397. data/spec/outputs/email.rb +173 -0
  398. data/spec/outputs/file.rb +82 -0
  399. data/spec/outputs/graphite.rb +236 -0
  400. data/spec/outputs/redis.rb +127 -0
  401. data/spec/speed.rb +20 -0
  402. data/spec/sqlite-test.rb +81 -0
  403. data/spec/support/LOGSTASH-733.rb +21 -0
  404. data/spec/support/LOGSTASH-820.rb +25 -0
  405. data/spec/support/akamai-grok.rb +26 -0
  406. data/spec/support/date-http.rb +17 -0
  407. data/spec/support/postwait1.rb +26 -0
  408. data/spec/support/pull375.rb +21 -0
  409. data/spec/test_utils.rb +125 -0
  410. data/spec/util/fieldeval_spec.rb +44 -0
  411. data/test/jenkins/config.xml.erb +74 -0
  412. data/test/jenkins/create-jobs.rb +23 -0
  413. data/test/jenkins/generatorjob.config.xml +66 -0
  414. data/tools/Gemfile +14 -0
  415. data/tools/Gemfile.jruby-1.9.lock +322 -0
  416. data/tools/Gemfile.rbx-2.1.lock +516 -0
  417. data/tools/Gemfile.ruby-1.9.1.lock +310 -0
  418. data/tools/Gemfile.ruby-2.0.0.lock +310 -0
  419. metadata +629 -0
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require "logstash/codecs/base"
3
+ require "logstash/codecs/spool"
4
+
5
+ # This is the base class for logstash codecs.
6
+ class LogStash::Codecs::JsonSpooler < LogStash::Codecs::Spool
7
+ config_name "json_spooler"
8
+ milestone 1
9
+
10
+ public
11
+ def decode(data)
12
+ super(JSON.parse(data.force_encoding("UTF-8"))) do |event|
13
+ yield event
14
+ end
15
+ end # def decode
16
+
17
+ public
18
+ def encode(data)
19
+ super(data)
20
+ end # def encode
21
+
22
+ end # class LogStash::Codecs::Json
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ require "logstash/codecs/base"
3
+ require "logstash/util/charset"
4
+
5
+ # Line-oriented text data.
6
+ #
7
+ # Decoding behavior: Only whole line events will be emitted.
8
+ #
9
+ # Encoding behavior: Each event will be emitted with a trailing newline.
10
+ class LogStash::Codecs::Line < LogStash::Codecs::Base
11
+ config_name "line"
12
+ milestone 3
13
+
14
+ # Set the desired text format for encoding.
15
+ config :format, :validate => :string
16
+
17
+ # The character encoding used in this input. Examples include "UTF-8"
18
+ # and "cp1252"
19
+ #
20
+ # This setting is useful if your log files are in Latin-1 (aka cp1252)
21
+ # or in another character set other than UTF-8.
22
+ #
23
+ # This only affects "plain" format logs since json is UTF-8 already.
24
+ config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
25
+
26
+ public
27
+ def register
28
+ require "logstash/util/buftok"
29
+ @buffer = FileWatch::BufferedTokenizer.new
30
+ @converter = LogStash::Util::Charset.new(@charset)
31
+ @converter.logger = @logger
32
+ end
33
+
34
+ public
35
+ def decode(data)
36
+ @buffer.extract(data).each do |line|
37
+ yield LogStash::Event.new("message" => @converter.convert(line))
38
+ end
39
+ end # def decode
40
+
41
+ public
42
+ def flush(&block)
43
+ remainder = @buffer.flush
44
+ if !remainder.empty?
45
+ block.call(LogStash::Event.new({"message" => remainder}))
46
+ end
47
+ end
48
+
49
+ public
50
+ def encode(data)
51
+ if data.is_a? LogStash::Event and @format
52
+ @on_event.call(data.sprintf(@format) + "\n")
53
+ else
54
+ @on_event.call(data.to_s + "\n")
55
+ end
56
+ end # def encode
57
+
58
+ end # class LogStash::Codecs::Plain
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ require "logstash/codecs/base"
3
+
4
+ class LogStash::Codecs::Msgpack < LogStash::Codecs::Base
5
+ config_name "msgpack"
6
+
7
+ milestone 1
8
+
9
+ config :format, :validate => :string, :default => nil
10
+
11
+ public
12
+ def register
13
+ require "msgpack"
14
+ end
15
+
16
+ public
17
+ def decode(data)
18
+ begin
19
+ # Msgpack does not care about UTF-8
20
+ event = LogStash::Event.new(MessagePack.unpack(data))
21
+ event["@timestamp"] = Time.at(event["@timestamp"]).utc if event["@timestamp"].is_a? Float
22
+ event["tags"] ||= []
23
+ if @format
24
+ event["message"] ||= event.sprintf(@format)
25
+ end
26
+ rescue => e
27
+ # Treat as plain text and try to do the best we can with it?
28
+ @logger.warn("Trouble parsing msgpack input, falling back to plain text",
29
+ :input => data, :exception => e)
30
+ event["message"] = data
31
+ event["tags"] ||= []
32
+ event["tags"] << "_msgpackparsefailure"
33
+ end
34
+ yield event
35
+ end # def decode
36
+
37
+ public
38
+ def encode(event)
39
+ event["@timestamp"] = event["@timestamp"].to_f
40
+ @on_event.call event.to_hash.to_msgpack
41
+ end # def encode
42
+
43
+ end # class LogStash::Codecs::Msgpack
@@ -0,0 +1,189 @@
1
+ # encoding: utf-8
2
+ require "logstash/codecs/base"
3
+
4
+ # The multiline codec is for taking line-oriented text and merging them into a
5
+ # single event.
6
+ #
7
+ # The original goal of this codec was to allow joining of multi-line messages
8
+ # from files into a single event. For example - joining java exception and
9
+ # stacktrace messages into a single event.
10
+ #
11
+ # The config looks like this:
12
+ #
13
+ # input {
14
+ # stdin {
15
+ # codec => multiline {
16
+ # pattern => "pattern, a regexp"
17
+ # negate => true or false
18
+ # what => "previous" or "next"
19
+ # }
20
+ # }
21
+ # }
22
+ #
23
+ # The 'pattern' should match what you believe to be an indicator that the field
24
+ # is part of a multi-line event.
25
+ #
26
+ # The 'what' must be "previous" or "next" and indicates the relation
27
+ # to the multi-line event.
28
+ #
29
+ # The 'negate' can be "true" or "false" (defaults false). If true, a
30
+ # message not matching the pattern will constitute a match of the multiline
31
+ # filter and the what will be applied. (vice-versa is also true)
32
+ #
33
+ # For example, java stack traces are multiline and usually have the message
34
+ # starting at the far-left, then each subsequent line indented. Do this:
35
+ #
36
+ # input {
37
+ # stdin {
38
+ # codec => multiline {
39
+ # pattern => "^\s"
40
+ # what => "previous"
41
+ # }
42
+ # }
43
+ # }
44
+ #
45
+ # This says that any line starting with whitespace belongs to the previous line.
46
+ #
47
+ # Another example is to merge lines not starting with a date up to the previous
48
+ # line..
49
+ #
50
+ # input {
51
+ # file {
52
+ # path => "/var/log/someapp.log"
53
+ # codec => multiline {
54
+ # # Grok pattern names are valid! :)
55
+ # pattern => "^%{TIMESTAMP_ISO8601} "
56
+ # negate => true
57
+ # what => previous
58
+ # }
59
+ # }
60
+ # }
61
+ #
62
+ # This is the base class for logstash codecs.
63
+ class LogStash::Codecs::Multiline < LogStash::Codecs::Base
64
+ config_name "multiline"
65
+ milestone 3
66
+
67
+ # The regular expression to match
68
+ config :pattern, :validate => :string, :required => true
69
+
70
+ # If the pattern matched, does event belong to the next or previous event?
71
+ config :what, :validate => ["previous", "next"], :required => true
72
+
73
+ # Negate the regexp pattern ('if not matched')
74
+ config :negate, :validate => :boolean, :default => false
75
+
76
+ # logstash ships by default with a bunch of patterns, so you don't
77
+ # necessarily need to define this yourself unless you are adding additional
78
+ # patterns.
79
+ #
80
+ # Pattern files are plain text with format:
81
+ #
82
+ # NAME PATTERN
83
+ #
84
+ # For example:
85
+ #
86
+ # NUMBER \d+
87
+ config :patterns_dir, :validate => :array, :default => []
88
+
89
+ # The character encoding used in this input. Examples include "UTF-8"
90
+ # and "cp1252"
91
+ #
92
+ # This setting is useful if your log files are in Latin-1 (aka cp1252)
93
+ # or in another character set other than UTF-8.
94
+ #
95
+ # This only affects "plain" format logs since json is UTF-8 already.
96
+ config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
97
+
98
+ # Tag multiline events with a given tag. This tag will only be added
99
+ # to events that actually have multiple lines in them.
100
+ config :multiline_tag, :validate => :string, :default => "multiline"
101
+
102
+ public
103
+ def register
104
+ require "grok-pure" # rubygem 'jls-grok'
105
+ # Detect if we are running from a jarfile, pick the right path.
106
+ patterns_path = []
107
+ if __FILE__ =~ /file:\/.*\.jar!.*/
108
+ patterns_path += ["#{File.dirname(__FILE__)}/../../patterns/*"]
109
+ else
110
+ patterns_path += ["#{File.dirname(__FILE__)}/../../../patterns/*"]
111
+ end
112
+
113
+ @grok = Grok.new
114
+
115
+ @patterns_dir = patterns_path.to_a + @patterns_dir
116
+ @patterns_dir.each do |path|
117
+ # Can't read relative paths from jars, try to normalize away '../'
118
+ while path =~ /file:\/.*\.jar!.*\/\.\.\//
119
+ # replace /foo/bar/../baz => /foo/baz
120
+ path = path.gsub(/[^\/]+\/\.\.\//, "")
121
+ end
122
+
123
+ if File.directory?(path)
124
+ path = File.join(path, "*")
125
+ end
126
+
127
+ Dir.glob(path).each do |file|
128
+ @logger.info("Grok loading patterns from file", :path => file)
129
+ @grok.add_patterns_from_file(file)
130
+ end
131
+ end
132
+
133
+ @grok.compile(@pattern)
134
+ @logger.debug("Registered multiline plugin", :type => @type, :config => @config)
135
+
136
+ @buffer = []
137
+ @handler = method("do_#{@what}".to_sym)
138
+ end # def register
139
+
140
+ public
141
+ def decode(text, &block)
142
+ text.force_encoding(@charset)
143
+ if @charset != "UTF-8"
144
+ # Convert to UTF-8 if not in that character set.
145
+ text = text.encode("UTF-8", :invalid => :replace, :undef => :replace)
146
+ end
147
+
148
+ match = @grok.match(text)
149
+ @logger.debug("Multiline", :pattern => @pattern, :text => text,
150
+ :match => !match.nil?, :negate => @negate)
151
+
152
+ # Add negate option
153
+ match = (match and !@negate) || (!match and @negate)
154
+ @handler.call(text, match, &block)
155
+ end # def decode
156
+
157
+ def buffer(text)
158
+ @time = Time.now.utc if @buffer.empty?
159
+ @buffer << text
160
+ end
161
+
162
+ def flush(&block)
163
+ if @buffer.any?
164
+ event = LogStash::Event.new("@timestamp" => @time, "message" => @buffer.join("\n"))
165
+ # Tag multiline events
166
+ event.tag @multiline_tag if @multiline_tag && @buffer.size > 1
167
+
168
+ yield event
169
+ @buffer = []
170
+ end
171
+ end
172
+
173
+ def do_next(text, matched, &block)
174
+ buffer(text)
175
+ flush(&block) if !matched
176
+ end
177
+
178
+ def do_previous(text, matched, &block)
179
+ flush(&block) if !matched
180
+ buffer(text)
181
+ end
182
+
183
+ public
184
+ def encode(data)
185
+ # Nothing to do.
186
+ @on_event.call(data)
187
+ end # def encode
188
+
189
+ end # class LogStash::Codecs::Plain
@@ -0,0 +1,342 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # The "netflow" codec is for decoding Netflow v5/v9 flows.
6
+ class LogStash::Codecs::Netflow < LogStash::Codecs::Base
7
+ config_name "netflow"
8
+ milestone 1
9
+
10
+ # Netflow v9 template cache TTL (minutes)
11
+ config :cache_ttl, :validate => :number, :default => 4000
12
+
13
+ # Specify into what field you want the Netflow data.
14
+ config :target, :validate => :string, :default => "netflow"
15
+
16
+ # Specify which Netflow versions you will accept.
17
+ config :versions, :validate => :array, :default => [5, 9]
18
+
19
+ public
20
+ def initialize(params={})
21
+ super(params)
22
+ @threadsafe = false
23
+ end
24
+
25
+ public
26
+ def register
27
+ require "logstash/codecs/netflow/util"
28
+ @templates = Vash.new()
29
+ end # def register
30
+
31
+ public
32
+ def decode(payload, &block)
33
+ header = Header.read(payload)
34
+
35
+ unless @versions.include?(header.version)
36
+ @logger.warn("Ignoring Netflow version v#{header.version}")
37
+ return
38
+ end
39
+
40
+ if header.version == 5
41
+ flowset = Netflow5PDU.read(payload)
42
+ elsif header.version == 9
43
+ flowset = Netflow9PDU.read(payload)
44
+ else
45
+ @logger.warn("Unsupported Netflow version v#{header.version}")
46
+ return
47
+ end
48
+
49
+ flowset.records.each do |record|
50
+ if flowset.version == 5
51
+ event = LogStash::Event.new
52
+
53
+ # FIXME Probably not doing this right WRT JRuby?
54
+ #
55
+ # The flowset header gives us the UTC epoch seconds along with
56
+ # residual nanoseconds so we can set @timestamp to that easily
57
+ event["@timestamp"] = Time.at(flowset.unix_sec, flowset.unix_nsec / 1000).utc
58
+ event[@target] = {}
59
+
60
+ # Copy some of the pertinent fields in the header to the event
61
+ ['version', 'flow_seq_num', 'engine_type', 'engine_id', 'sampling_algorithm', 'sampling_interval', 'flow_records'].each do |f|
62
+ event[@target][f] = flowset[f]
63
+ end
64
+
65
+ # Create fields in the event from each field in the flow record
66
+ record.each_pair do |k,v|
67
+ case k.to_s
68
+ when /_switched$/
69
+ # The flow record sets the first and last times to the device
70
+ # uptime in milliseconds. Given the actual uptime is provided
71
+ # in the flowset header along with the epoch seconds we can
72
+ # convert these into absolute times
73
+ millis = flowset.uptime - v
74
+ seconds = flowset.unix_sec - (millis / 1000)
75
+ micros = (flowset.unix_nsec / 1000) - (millis % 1000)
76
+ if micros < 0
77
+ seconds--
78
+ micros += 1000000
79
+ end
80
+ # FIXME Again, probably doing this wrong WRT JRuby?
81
+ event[@target][k.to_s] = Time.at(seconds, micros).utc.strftime("%Y-%m-%dT%H:%M:%S.%3NZ")
82
+ else
83
+ event[@target][k.to_s] = v
84
+ end
85
+ end
86
+
87
+ yield event
88
+ elsif flowset.version == 9
89
+ case record.flowset_id
90
+ when 0
91
+ # Template flowset
92
+ record.flowset_data.templates.each do |template|
93
+ catch (:field) do
94
+ fields = []
95
+ template.fields.each do |field|
96
+ entry = netflow_field_for(field.field_type, field.field_length)
97
+ if ! entry
98
+ throw :field
99
+ end
100
+ fields += entry
101
+ end
102
+ # We get this far, we have a list of fields
103
+ #key = "#{flowset.source_id}|#{event["source"]}|#{template.template_id}"
104
+ key = "#{flowset.source_id}|#{template.template_id}"
105
+ @templates[key, @cache_ttl] = BinData::Struct.new(:endian => :big, :fields => fields)
106
+ # Purge any expired templates
107
+ @templates.cleanup!
108
+ end
109
+ end
110
+ when 1
111
+ # Options template flowset
112
+ record.flowset_data.templates.each do |template|
113
+ catch (:field) do
114
+ fields = []
115
+ template.option_fields.each do |field|
116
+ entry = netflow_field_for(field.field_type, field.field_length)
117
+ if ! entry
118
+ throw :field
119
+ end
120
+ fields += entry
121
+ end
122
+ # We get this far, we have a list of fields
123
+ #key = "#{flowset.source_id}|#{event["source"]}|#{template.template_id}"
124
+ key = "#{flowset.source_id}|#{template.template_id}"
125
+ @templates[key, @cache_ttl] = BinData::Struct.new(:endian => :big, :fields => fields)
126
+ # Purge any expired templates
127
+ @templates.cleanup!
128
+ end
129
+ end
130
+ when 256..65535
131
+ # Data flowset
132
+ #key = "#{flowset.source_id}|#{event["source"]}|#{record.flowset_id}"
133
+ key = "#{flowset.source_id}|#{record.flowset_id}"
134
+ template = @templates[key]
135
+
136
+ if ! template
137
+ #@logger.warn("No matching template for flow id #{record.flowset_id} from #{event["source"]}")
138
+ @logger.warn("No matching template for flow id #{record.flowset_id}")
139
+ next
140
+ end
141
+
142
+ length = record.flowset_length - 4
143
+
144
+ # Template shouldn't be longer than the record and there should
145
+ # be at most 3 padding bytes
146
+ if template.num_bytes > length or ! (length % template.num_bytes).between?(0, 3)
147
+ @logger.warn("Template length doesn't fit cleanly into flowset", :template_id => record.flowset_id, :template_length => template.num_bytes, :record_length => length)
148
+ next
149
+ end
150
+
151
+ array = BinData::Array.new(:type => template, :initial_length => length / template.num_bytes)
152
+
153
+ records = array.read(record.flowset_data)
154
+
155
+ records.each do |r|
156
+ event = LogStash::Event.new(
157
+ "@timestamp" => Time.at(flowset.unix_sec).utc,
158
+ @target => {}
159
+ )
160
+
161
+ # Fewer fields in the v9 header
162
+ ['version', 'flow_seq_num'].each do |f|
163
+ event[@target][f] = flowset[f]
164
+ end
165
+
166
+ event[@target]['flowset_id'] = record.flowset_id
167
+
168
+ r.each_pair do |k,v|
169
+ case k.to_s
170
+ when /_switched$/
171
+ millis = flowset.uptime - v
172
+ seconds = flowset.unix_sec - (millis / 1000)
173
+ # v9 did away with the nanosecs field
174
+ micros = 1000000 - (millis % 1000)
175
+ event[@target][k.to_s] = Time.at(seconds, micros).utc.strftime("%Y-%m-%dT%H:%M:%S.%3NZ")
176
+ else
177
+ event[@target][k.to_s] = v
178
+ end
179
+ end
180
+
181
+ yield event
182
+ end
183
+ else
184
+ @logger.warn("Unsupported flowset id #{record.flowset_id}")
185
+ end
186
+ end
187
+ end
188
+ end # def filter
189
+
190
+ private
191
+ def uint_field(length, default)
192
+ # If length is 4, return :uint32, etc. and use default if length is 0
193
+ ("uint" + (((length > 0) ? length : default) * 8).to_s).to_sym
194
+ end # def uint_field
195
+
196
+ private
197
+ def netflow_field_for(type, length)
198
+ case type
199
+ when 1
200
+ [[uint_field(length, 4), :in_bytes]]
201
+ when 2
202
+ [[uint_field(length, 4), :in_pkts]]
203
+ when 3
204
+ [[uint_field(length, 4), :flows]]
205
+ when 4
206
+ [[:uint8, :protocol]]
207
+ when 5
208
+ [[:uint8, :src_tos]]
209
+ when 6
210
+ [[:uint8, :tcp_flags]]
211
+ when 7
212
+ [[:uint16, :l4_src_port]]
213
+ when 8
214
+ [[:ip4_addr, :ipv4_src_addr]]
215
+ when 9
216
+ [[:uint8, :src_mask]]
217
+ when 10
218
+ [[uint_field(length, 2), :input_snmp]]
219
+ when 11
220
+ [[:uint16, :l4_dst_port]]
221
+ when 12
222
+ [[:ip4_addr, :ipv4_dst_addr]]
223
+ when 13
224
+ [[:uint8, :dst_mask]]
225
+ when 14
226
+ [[uint_field(length, 2), :output_snmp]]
227
+ when 15
228
+ [[:ip4_addr, :ipv4_next_hop]]
229
+ when 16
230
+ [[uint_field(length, 2), :src_as]]
231
+ when 17
232
+ [[uint_field(length, 2), :dst_as]]
233
+ when 18
234
+ [[:ip4_addr, :bgp_ipv4_next_hop]]
235
+ when 19
236
+ [[uint_field(length, 4), :mul_dst_pkts]]
237
+ when 20
238
+ [[uint_field(length, 4), :mul_dst_bytes]]
239
+ when 21
240
+ [[:uint32, :last_switched]]
241
+ when 22
242
+ [[:uint32, :first_switched]]
243
+ when 23
244
+ [[uint_field(length, 4), :out_bytes]]
245
+ when 24
246
+ [[uint_field(length, 4), :out_pkts]]
247
+ when 25
248
+ [[:uint16, :min_pkt_length]]
249
+ when 26
250
+ [[:uint16, :max_pkg_length]]
251
+ when 27
252
+ [[:ip6_addr, :ipv6_src_addr]]
253
+ when 28
254
+ [[:ip6_addr, :ipv6_dst_addr]]
255
+ when 29
256
+ [[:uint8, :ipv6_src_mask]]
257
+ when 30
258
+ [[:uint8, :ipv6_dst_mask]]
259
+ when 31
260
+ [[:uint24, :ipv6_flow_label]]
261
+ when 32
262
+ [[:uint16, :icmp_type]]
263
+ when 33
264
+ [[:uint8, :mul_igmp_type]]
265
+ when 34
266
+ [[:uint32, :sampling_interval]]
267
+ when 35
268
+ [[:uint8, :sampling_algorithm]]
269
+ when 36
270
+ [[:uint16, :flow_active_timeout]]
271
+ when 37
272
+ [[:uint16, :flow_inactive_timeout]]
273
+ when 38
274
+ [[:uint8, :engine_type]]
275
+ when 39
276
+ [[:uint8, :engine_id]]
277
+ when 40
278
+ [[uint_field(length, 4), :total_bytes_exp]]
279
+ when 41
280
+ [[uint_field(length, 4), :total_pkts_exp]]
281
+ when 42
282
+ [[uint_field(length, 4), :total_flows_exp]]
283
+ when 43 # Vendor specific field
284
+ [[:skip, nil, {:length => length}]]
285
+ when 44
286
+ [[:ip4_addr, :ipv4_src_prefix]]
287
+ when 45
288
+ [[:ip4_addr, :ipv4_dst_prefix]]
289
+ when 46
290
+ [[:uint8, :mpls_top_label_type]]
291
+ when 47
292
+ [[:uint32, :mpls_top_label_ip_addr]]
293
+ when 48
294
+ [[uint_field(length, 4), :flow_sampler_id]]
295
+ when 49
296
+ [[:uint8, :flow_sampler_mode]]
297
+ when 50
298
+ [[:uint32, :flow_sampler_random_interval]]
299
+ when 51 # Vendor specific field
300
+ [[:skip, nil, {:length => length}]]
301
+ when 52
302
+ [[:uint8, :min_ttl]]
303
+ when 53
304
+ [[:uint8, :max_ttl]]
305
+ when 54
306
+ [[:uint16, :ipv4_ident]]
307
+ when 55
308
+ [[:uint8, :dst_tos]]
309
+ when 56
310
+ [[:mac_addr, :in_src_mac]]
311
+ when 57
312
+ [[:mac_addr, :out_dst_mac]]
313
+ when 58
314
+ [[:uint16, :src_vlan]]
315
+ when 59
316
+ [[:uint16, :dst_vlan]]
317
+ when 60
318
+ [[:uint8, :ip_protocol_version]]
319
+ when 61
320
+ [[:uint8, :direction]]
321
+ when 62
322
+ [[:ip6_addr, :ipv6_next_hop]]
323
+ when 63
324
+ [[:ip6_addr, :bgp_ipv6_next_hop]]
325
+ when 64
326
+ [[:uint32, :ipv6_option_headers]]
327
+ when 65..69 # Vendor specific fields
328
+ [[:skip, nil, {:length => length}]]
329
+ when 80
330
+ [[:mac_addr, :in_dst_mac]]
331
+ when 81
332
+ [[:mac_addr, :out_src_mac]]
333
+ when 82
334
+ [[:string, :if_name, {:length => length, :trim_padding => true}]]
335
+ when 83
336
+ [[:string, :if_desc, {:length => length, :trim_padding => true}]]
337
+ else
338
+ @logger.warn("Unsupported field", :type => type, :length => length)
339
+ nil
340
+ end
341
+ end # def netflow_field_for
342
+ end # class LogStash::Filters::Netflow