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,87 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # Read snmp trap messages as events
6
+ #
7
+ # Resulting @message looks like :
8
+ # #<SNMP::SNMPv1_Trap:0x6f1a7a4 @varbind_list=[#<SNMP::VarBind:0x2d7bcd8f @value="teststring",
9
+ # @name=[1.11.12.13.14.15]>], @timestamp=#<SNMP::TimeTicks:0x1af47e9d @value=55>, @generic_trap=6,
10
+ # @enterprise=[1.2.3.4.5.6], @source_ip="127.0.0.1", @agent_addr=#<SNMP::IpAddress:0x29a4833e @value="\xC0\xC1\xC2\xC3">,
11
+ # @specific_trap=99>
12
+ #
13
+
14
+ class LogStash::Inputs::Snmptrap < LogStash::Inputs::Base
15
+ config_name "snmptrap"
16
+ milestone 1
17
+
18
+ # The address to listen on
19
+ config :host, :validate => :string, :default => "0.0.0.0"
20
+
21
+ # The port to listen on. Remember that ports less than 1024 (privileged
22
+ # ports) may require root to use. hence the default of 1062.
23
+ config :port, :validate => :number, :default => 1062
24
+
25
+ # SNMP Community String to listen for.
26
+ config :community, :validate => :string, :default => "public"
27
+
28
+ # directory of YAML MIB maps (same format ruby-snmp uses)
29
+ config :yamlmibdir, :validate => :string
30
+
31
+ def initialize(*args)
32
+ super(*args)
33
+ end # def initialize
34
+
35
+ public
36
+ def register
37
+ require "snmp"
38
+ @snmptrap = nil
39
+ if @yamlmibdir
40
+ @logger.info("checking #{@yamlmibdir} for MIBs")
41
+ Dir["#{@yamlmibdir}/*.yaml"].each do |yamlfile|
42
+ mib_name = File.basename(yamlfile, ".*")
43
+ @yaml_mibs ||= []
44
+ @yaml_mibs << mib_name
45
+ end
46
+ @logger.info("found MIBs: #{@yaml_mibs.join(',')}") if @yaml_mibs
47
+ end
48
+ end # def register
49
+
50
+ public
51
+ def run(output_queue)
52
+ begin
53
+ # snmp trap server
54
+ snmptrap_listener(output_queue)
55
+ rescue => e
56
+ @logger.warn("SNMP Trap listener died", :exception => e, :backtrace => e.backtrace)
57
+ sleep(5)
58
+ retry
59
+ end # begin
60
+ end # def run
61
+
62
+ private
63
+ def snmptrap_listener(output_queue)
64
+ traplistener_opts = {:Port => @port, :Community => @community, :Host => @host}
65
+ if !@yaml_mibs.empty?
66
+ traplistener_opts.merge!({:MibDir => @yamlmibdir, :MibModules => @yaml_mibs})
67
+ end
68
+ @logger.info("It's a Trap!", traplistener_opts.dup)
69
+ @snmptrap = SNMP::TrapListener.new(traplistener_opts)
70
+
71
+ @snmptrap.on_trap_default do |trap|
72
+ begin
73
+ event = LogStash::Event.new("message" => trap.inspect, "host" => trap.source_ip)
74
+ decorate(event)
75
+ trap.each_varbind do |vb|
76
+ event[vb.name.to_s] = vb.value.to_s
77
+ end
78
+ @logger.debug("SNMP Trap received: ", :trap_object => trap.inspect)
79
+ output_queue << event
80
+ rescue => event
81
+ @logger.error("Failed to create event", :trap_object => trap.inspect)
82
+ end
83
+ end
84
+ @snmptrap.join
85
+ end # def snmptrap_listener
86
+
87
+ end # class LogStash::Inputs::Snmptrap
@@ -0,0 +1,185 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Read rows from an sqlite database.
7
+ #
8
+ # This is most useful in cases where you are logging directly to a table.
9
+ # Any tables being watched must have an 'id' column that is monotonically
10
+ # increasing.
11
+ #
12
+ # All tables are read by default except:
13
+ # * ones matching 'sqlite_%' - these are internal/adminstrative tables for sqlite
14
+ # * 'since_table' - this is used by this plugin to track state.
15
+ #
16
+ # ## Example
17
+ #
18
+ # % sqlite /tmp/example.db
19
+ # sqlite> CREATE TABLE weblogs (
20
+ # id INTEGER PRIMARY KEY AUTOINCREMENT,
21
+ # ip STRING,
22
+ # request STRING,
23
+ # response INTEGER);
24
+ # sqlite> INSERT INTO weblogs (ip, request, response)
25
+ # VALUES ("1.2.3.4", "/index.html", 200);
26
+ #
27
+ # Then with this logstash config:
28
+ #
29
+ # input {
30
+ # sqlite {
31
+ # path => "/tmp/example.db"
32
+ # type => weblogs
33
+ # }
34
+ # }
35
+ # output {
36
+ # stdout {
37
+ # debug => true
38
+ # }
39
+ # }
40
+ #
41
+ # Sample output:
42
+ #
43
+ # {
44
+ # "@source" => "sqlite://sadness/tmp/x.db",
45
+ # "@tags" => [],
46
+ # "@fields" => {
47
+ # "ip" => "1.2.3.4",
48
+ # "request" => "/index.html",
49
+ # "response" => 200
50
+ # },
51
+ # "@timestamp" => "2013-05-29T06:16:30.850Z",
52
+ # "@source_host" => "sadness",
53
+ # "@source_path" => "/tmp/x.db",
54
+ # "@message" => "",
55
+ # "@type" => "foo"
56
+ # }
57
+ #
58
+ class LogStash::Inputs::Sqlite < LogStash::Inputs::Base
59
+ config_name "sqlite"
60
+ milestone 1
61
+
62
+ # The path to the sqlite database file.
63
+ config :path, :validate => :string, :required => true
64
+
65
+ # Any tables to exclude by name.
66
+ # By default all tables are followed.
67
+ config :exclude_tables, :validate => :array, :default => []
68
+
69
+ # How many rows to fetch at a time from each SELECT call.
70
+ config :batch, :validate => :number, :default => 5
71
+
72
+ SINCE_TABLE = :since_table
73
+
74
+ public
75
+ def init_placeholder_table(db)
76
+ begin
77
+ db.create_table SINCE_TABLE do
78
+ String :table
79
+ Int :place
80
+ end
81
+ rescue
82
+ @logger.debug("since tables already exists")
83
+ end
84
+ end
85
+
86
+ public
87
+ def get_placeholder(db, table)
88
+ since = db[SINCE_TABLE]
89
+ x = since.where(:table => "#{table}")
90
+ if x[:place].nil?
91
+ init_placeholder(db, table)
92
+ return 0
93
+ else
94
+ @logger.debug("placeholder already exists, it is #{x[:place]}")
95
+ return x[:place][:place]
96
+ end
97
+ end
98
+
99
+ public
100
+ def init_placeholder(db, table)
101
+ @logger.debug("init placeholder for #{table}")
102
+ since = db[SINCE_TABLE]
103
+ since.insert(:table => table, :place => 0)
104
+ end
105
+
106
+ public
107
+ def update_placeholder(db, table, place)
108
+ @logger.debug("set placeholder to #{place}")
109
+ since = db[SINCE_TABLE]
110
+ since.where(:table => table).update(:place => place)
111
+ end
112
+
113
+ public
114
+ def get_all_tables(db)
115
+ return db["SELECT * FROM sqlite_master WHERE type = 'table' AND tbl_name != '#{SINCE_TABLE}' AND tbl_name NOT LIKE 'sqlite_%'"].map { |t| t[:name] }.select { |n| !@exclude_tables.include?(n) }
116
+ end
117
+
118
+ public
119
+ def get_n_rows_from_table(db, table, offset, limit)
120
+ dataset = db["SELECT * FROM #{table}"]
121
+ return db["SELECT * FROM #{table} WHERE (id > #{offset}) ORDER BY 'id' LIMIT #{limit}"].map { |row| row }
122
+ end
123
+
124
+ public
125
+ def register
126
+ require "sequel"
127
+ require "jdbc/sqlite3"
128
+ @host = Socket.gethostname
129
+ @logger.info("Registering sqlite input", :database => @path)
130
+ @db = Sequel.connect("jdbc:sqlite:#{@path}")
131
+ @tables = get_all_tables(@db)
132
+ @table_data = {}
133
+ @tables.each do |table|
134
+ init_placeholder_table(@db)
135
+ last_place = get_placeholder(@db, table)
136
+ @table_data[table] = { :name => table, :place => last_place }
137
+ end
138
+ end # def register
139
+
140
+ public
141
+ def run(queue)
142
+ sleep_min = 0.01
143
+ sleep_max = 5
144
+ sleeptime = sleep_min
145
+
146
+ begin
147
+ @logger.debug("Tailing sqlite db", :path => @path)
148
+ loop do
149
+ count = 0
150
+ @table_data.each do |k, table|
151
+ table_name = table[:name]
152
+ offset = table[:place]
153
+ @logger.debug("offset is #{offset}", :k => k, :table => table_name)
154
+ rows = get_n_rows_from_table(@db, table_name, offset, @batch)
155
+ count += rows.count
156
+ rows.each do |row|
157
+ event = LogStash::Event.new("host" => @host, "db" => @db)
158
+ decorate(event)
159
+ # store each column as a field in the event.
160
+ row.each do |column, element|
161
+ next if column == :id
162
+ event[column.to_s] = element
163
+ end
164
+ queue << event
165
+ @table_data[k][:place] = row[:id]
166
+ end
167
+ # Store the last-seen row in the database
168
+ update_placeholder(@db, table_name, @table_data[k][:place])
169
+ end
170
+
171
+ if count == 0
172
+ # nothing found in that iteration
173
+ # sleep a bit
174
+ @logger.debug("No new rows. Sleeping.", :time => sleeptime)
175
+ sleeptime = [sleeptime * 2, sleep_max].min
176
+ sleep(sleeptime)
177
+ else
178
+ sleeptime = sleep_min
179
+ end
180
+ end # loop
181
+ end # begin/rescue
182
+ end #run
183
+
184
+ end # class Logtstash::Inputs::EventLog
185
+
@@ -0,0 +1,172 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/threadable"
3
+ require "logstash/namespace"
4
+ require "logstash/plugin_mixins/aws_config"
5
+ require "digest/sha2"
6
+
7
+ # Pull events from an Amazon Web Services Simple Queue Service (SQS) queue.
8
+ #
9
+ # SQS is a simple, scalable queue system that is part of the
10
+ # Amazon Web Services suite of tools.
11
+ #
12
+ # Although SQS is similar to other queuing systems like AMQP, it
13
+ # uses a custom API and requires that you have an AWS account.
14
+ # See http://aws.amazon.com/sqs/ for more details on how SQS works,
15
+ # what the pricing schedule looks like and how to setup a queue.
16
+ #
17
+ # To use this plugin, you *must*:
18
+ #
19
+ # * Have an AWS account
20
+ # * Setup an SQS queue
21
+ # * Create an identify that has access to consume messages from the queue.
22
+ #
23
+ # The "consumer" identity must have the following permissions on the queue:
24
+ #
25
+ # * sqs:ChangeMessageVisibility
26
+ # * sqs:ChangeMessageVisibilityBatch
27
+ # * sqs:DeleteMessage
28
+ # * sqs:DeleteMessageBatch
29
+ # * sqs:GetQueueAttributes
30
+ # * sqs:GetQueueUrl
31
+ # * sqs:ListQueues
32
+ # * sqs:ReceiveMessage
33
+ #
34
+ # Typically, you should setup an IAM policy, create a user and apply the IAM policy to the user.
35
+ # A sample policy is as follows:
36
+ #
37
+ # {
38
+ # "Statement": [
39
+ # {
40
+ # "Action": [
41
+ # "sqs:ChangeMessageVisibility",
42
+ # "sqs:ChangeMessageVisibilityBatch",
43
+ # "sqs:GetQueueAttributes",
44
+ # "sqs:GetQueueUrl",
45
+ # "sqs:ListQueues",
46
+ # "sqs:SendMessage",
47
+ # "sqs:SendMessageBatch"
48
+ # ],
49
+ # "Effect": "Allow",
50
+ # "Resource": [
51
+ # "arn:aws:sqs:us-east-1:123456789012:Logstash"
52
+ # ]
53
+ # }
54
+ # ]
55
+ # }
56
+ #
57
+ # See http://aws.amazon.com/iam/ for more details on setting up AWS identities.
58
+ #
59
+ class LogStash::Inputs::SQS < LogStash::Inputs::Threadable
60
+ include LogStash::PluginMixins::AwsConfig
61
+
62
+ config_name "sqs"
63
+ milestone 1
64
+
65
+ default :codec, "json"
66
+
67
+ # Name of the SQS Queue name to pull messages from. Note that this is just the name of the queue, not the URL or ARN.
68
+ config :queue, :validate => :string, :required => true
69
+
70
+ # Name of the event field in which to store the SQS message ID
71
+ config :id_field, :validate => :string
72
+
73
+ # Name of the event field in which to store the SQS message MD5 checksum
74
+ config :md5_field, :validate => :string
75
+
76
+ # Name of the event field in which to store the SQS message Sent Timestamp
77
+ config :sent_timestamp_field, :validate => :string
78
+
79
+ public
80
+ def aws_service_endpoint(region)
81
+ return {
82
+ :sqs_endpoint => "sqs.#{region}.amazonaws.com"
83
+ }
84
+ end
85
+
86
+ public
87
+ def register
88
+ @logger.info("Registering SQS input", :queue => @queue)
89
+ require "aws-sdk"
90
+
91
+ @sqs = AWS::SQS.new(aws_options_hash)
92
+
93
+ begin
94
+ @logger.debug("Connecting to AWS SQS queue", :queue => @queue)
95
+ @sqs_queue = @sqs.queues.named(@queue)
96
+ @logger.info("Connected to AWS SQS queue successfully.", :queue => @queue)
97
+ rescue Exception => e
98
+ @logger.error("Unable to access SQS queue.", :error => e.to_s, :queue => @queue)
99
+ throw e
100
+ end # begin/rescue
101
+ end # def register
102
+
103
+ public
104
+ def run(output_queue)
105
+ @logger.debug("Polling SQS queue", :queue => @queue)
106
+
107
+ receive_opts = {
108
+ :limit => 10,
109
+ :visibility_timeout => 30,
110
+ :attributes => [:sent_at]
111
+ }
112
+
113
+ continue_polling = true
114
+ while running? && continue_polling
115
+ continue_polling = run_with_backoff(60, 1) do
116
+ @sqs_queue.receive_message(receive_opts) do |message|
117
+ if message
118
+ @codec.decode(message.body) do |event|
119
+ decorate(event)
120
+ if @id_field
121
+ event[@id_field] = message.id
122
+ end
123
+ if @md5_field
124
+ event[@md5_field] = message.md5
125
+ end
126
+ if @sent_timestamp_field
127
+ event[@sent_timestamp_field] = message.sent_timestamp.utc
128
+ end
129
+ @logger.debug? && @logger.debug("Processed SQS message", :message_id => message.id, :message_md5 => message.md5, :sent_timestamp => message.sent_timestamp, :queue => @queue)
130
+ output_queue << event
131
+ message.delete
132
+ end # codec.decode
133
+ end # valid SQS message
134
+ end # receive_message
135
+ end # run_with_backoff
136
+ end # polling loop
137
+ end # def run
138
+
139
+ def teardown
140
+ @sqs_queue = nil
141
+ finished
142
+ end # def teardown
143
+
144
+ private
145
+ # Runs an AWS request inside a Ruby block with an exponential backoff in case
146
+ # we exceed the allowed AWS RequestLimit.
147
+ #
148
+ # @param [Integer] max_time maximum amount of time to sleep before giving up.
149
+ # @param [Integer] sleep_time the initial amount of time to sleep before retrying.
150
+ # @param [Block] block Ruby code block to execute.
151
+ def run_with_backoff(max_time, sleep_time, &block)
152
+ if sleep_time > max_time
153
+ @logger.error("AWS::EC2::Errors::RequestLimitExceeded ... failed.", :queue => @queue)
154
+ return false
155
+ end # retry limit exceeded
156
+
157
+ begin
158
+ block.call
159
+ rescue AWS::EC2::Errors::RequestLimitExceeded
160
+ @logger.info("AWS::EC2::Errors::RequestLimitExceeded ... retrying SQS request", :queue => @queue, :sleep_time => sleep_time)
161
+ sleep sleep_time
162
+ run_with_backoff(max_time, sleep_time * 2, &block)
163
+ rescue AWS::EC2::Errors::InstanceLimitExceeded
164
+ @logger.warn("AWS::EC2::Errors::InstanceLimitExceeded ... aborting SQS message retreival.")
165
+ return false
166
+ rescue Exception => bang
167
+ @logger.error("Error reading SQS queue.", :error => bang, :queue => @queue)
168
+ return false
169
+ end # begin/rescue
170
+ return true
171
+ end # def run_with_backoff
172
+ end # class LogStash::Inputs::SQS
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket" # for Socket.gethostname
5
+
6
+ # Read events from standard input.
7
+ #
8
+ # By default, each event is assumed to be one line. If you
9
+ # want to join lines, you'll want to use the multiline filter.
10
+ class LogStash::Inputs::Stdin < LogStash::Inputs::Base
11
+ config_name "stdin"
12
+ milestone 3
13
+
14
+ default :codec, "line"
15
+
16
+ public
17
+ def register
18
+ @host = Socket.gethostname
19
+ end # def register
20
+
21
+ def run(queue)
22
+ while true
23
+ begin
24
+ # Based on some testing, there is no way to interrupt an IO.sysread nor
25
+ # IO.select call in JRuby. Bummer :(
26
+ data = $stdin.sysread(16384)
27
+ @codec.decode(data) do |event|
28
+ decorate(event)
29
+ event["host"] = @host
30
+ queue << event
31
+ end
32
+ rescue EOFError, LogStash::ShutdownSignal
33
+ # stdin closed or a requested shutdown
34
+ break
35
+ end
36
+ end # while true
37
+ finished
38
+ end # def run
39
+
40
+ public
41
+ def teardown
42
+ @logger.debug("stdin shutting down.")
43
+ $stdin.close rescue nil
44
+ finished
45
+ end # def teardown
46
+ end # class LogStash::Inputs::Stdin