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 @@
1
+ require "logstash/outputs/rabbitmq/march_hare"
@@ -0,0 +1,143 @@
1
+ # encoding: utf-8
2
+ class LogStash::Outputs::RabbitMQ
3
+ module MarchHareImpl
4
+
5
+
6
+ #
7
+ # API
8
+ #
9
+
10
+ def register
11
+ require "march_hare"
12
+ require "java"
13
+
14
+ @logger.info("Registering output", :plugin => self)
15
+
16
+ @connected = java.util.concurrent.atomic.AtomicBoolean.new
17
+
18
+ connect
19
+ declare_exchange
20
+
21
+ @connected.set(true)
22
+
23
+ @codec.on_event(&method(:publish_serialized))
24
+ end
25
+
26
+
27
+ def receive(event)
28
+ return unless output?(event)
29
+
30
+ begin
31
+ @codec.encode(event)
32
+ rescue JSON::GeneratorError => e
33
+ @logger.warn("Trouble converting event to JSON", :exception => e,
34
+ :event => event)
35
+ end
36
+ end
37
+
38
+ def publish_serialized(message)
39
+ begin
40
+ if @connected.get
41
+ @x.publish(message, :routing_key => @key, :properties => {
42
+ :persistent => @persistent
43
+ })
44
+ else
45
+ @logger.warn("Tried to send a message, but not connected to RabbitMQ.")
46
+ end
47
+ rescue MarchHare::Exception, com.rabbitmq.client.AlreadyClosedException => e
48
+ @connected.set(false)
49
+ n = 10
50
+
51
+ @logger.error("RabbitMQ connection error: #{e.message}. Will attempt to reconnect in #{n} seconds...",
52
+ :exception => e,
53
+ :backtrace => e.backtrace)
54
+ return if terminating?
55
+
56
+ sleep n
57
+
58
+ connect
59
+ declare_exchange
60
+ retry
61
+ end
62
+ end
63
+
64
+ def to_s
65
+ return "amqp://#{@user}@#{@host}:#{@port}#{@vhost}/#{@exchange_type}/#{@exchange}\##{@key}"
66
+ end
67
+
68
+ def teardown
69
+ @connected.set(false)
70
+ @conn.close if @conn && @conn.open?
71
+ @conn = nil
72
+
73
+ finished
74
+ end
75
+
76
+
77
+
78
+ #
79
+ # Implementation
80
+ #
81
+
82
+ def connect
83
+ return if terminating?
84
+
85
+ @vhost ||= "127.0.0.1"
86
+ # 5672. Will be switched to 5671 by Bunny if TLS is enabled.
87
+ @port ||= 5672
88
+
89
+ @settings = {
90
+ :vhost => @vhost,
91
+ :host => @host,
92
+ :port => @port,
93
+ :user => @user,
94
+ :automatic_recovery => false
95
+ }
96
+ @settings[:pass] = if @password
97
+ @password.value
98
+ else
99
+ "guest"
100
+ end
101
+
102
+ @settings[:tls] = @ssl if @ssl
103
+ proto = if @ssl
104
+ "amqp"
105
+ else
106
+ "amqps"
107
+ end
108
+ @connection_url = "#{proto}://#{@user}@#{@host}:#{@port}#{vhost}/#{@queue}"
109
+
110
+ begin
111
+ @conn = MarchHare.connect(@settings)
112
+
113
+ @logger.debug("Connecting to RabbitMQ. Settings: #{@settings.inspect}, queue: #{@queue.inspect}")
114
+
115
+ @ch = @conn.create_channel
116
+ @logger.info("Connected to RabbitMQ at #{@settings[:host]}")
117
+ rescue MarchHare::Exception => e
118
+ @connected.set(false)
119
+ n = 10
120
+
121
+ @logger.error("RabbitMQ connection error: #{e.message}. Will attempt to reconnect in #{n} seconds...",
122
+ :exception => e,
123
+ :backtrace => e.backtrace)
124
+ return if terminating?
125
+
126
+ sleep n
127
+ retry
128
+ end
129
+ end
130
+
131
+ def declare_exchange
132
+ @logger.debug("Declaring an exchange", :name => @exchange, :type => @exchange_type,
133
+ :durable => @durable)
134
+ @x = @ch.exchange(@exchange, :type => @exchange_type.to_sym, :durable => @durable)
135
+
136
+ # sets @connected to true during recovery. MK.
137
+ @connected.set(true)
138
+
139
+ @x
140
+ end
141
+
142
+ end # MarchHareImpl
143
+ end
@@ -0,0 +1,245 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "stud/buffer"
5
+
6
+ # send events to a redis database using RPUSH
7
+ #
8
+ # For more information about redis, see <http://redis.io/>
9
+ class LogStash::Outputs::Redis < LogStash::Outputs::Base
10
+
11
+ include Stud::Buffer
12
+
13
+ config_name "redis"
14
+ milestone 2
15
+
16
+ # Name is used for logging in case there are multiple instances.
17
+ # TODO: delete
18
+ config :name, :validate => :string, :default => 'default',
19
+ :deprecated => true
20
+
21
+ # The hostname(s) of your redis server(s). Ports may be specified on any
22
+ # hostname, which will override the global port config.
23
+ #
24
+ # For example:
25
+ #
26
+ # "127.0.0.1"
27
+ # ["127.0.0.1", "127.0.0.2"]
28
+ # ["127.0.0.1:6380", "127.0.0.1"]
29
+ config :host, :validate => :array, :default => ["127.0.0.1"]
30
+
31
+ # Shuffle the host list during logstash startup.
32
+ config :shuffle_hosts, :validate => :boolean, :default => true
33
+
34
+ # The default port to connect on. Can be overridden on any hostname.
35
+ config :port, :validate => :number, :default => 6379
36
+
37
+ # The redis database number.
38
+ config :db, :validate => :number, :default => 0
39
+
40
+ # Redis initial connection timeout in seconds.
41
+ config :timeout, :validate => :number, :default => 5
42
+
43
+ # Password to authenticate with. There is no authentication by default.
44
+ config :password, :validate => :password
45
+
46
+ # The name of the redis queue (we'll use RPUSH on this). Dynamic names are
47
+ # valid here, for example "logstash-%{type}"
48
+ # TODO: delete
49
+ config :queue, :validate => :string, :deprecated => true
50
+
51
+ # The name of a redis list or channel. Dynamic names are
52
+ # valid here, for example "logstash-%{type}".
53
+ # TODO set required true
54
+ config :key, :validate => :string, :required => false
55
+
56
+ # Either list or channel. If redis_type is list, then we will RPUSH to key.
57
+ # If redis_type is channel, then we will PUBLISH to key.
58
+ # TODO set required true
59
+ config :data_type, :validate => [ "list", "channel" ], :required => false
60
+
61
+ # Set to true if you want redis to batch up values and send 1 RPUSH command
62
+ # instead of one command per value to push on the list. Note that this only
63
+ # works with data_type="list" mode right now.
64
+ #
65
+ # If true, we send an RPUSH every "batch_events" events or
66
+ # "batch_timeout" seconds (whichever comes first).
67
+ # Only supported for list redis data_type.
68
+ config :batch, :validate => :boolean, :default => false
69
+
70
+ # If batch is set to true, the number of events we queue up for an RPUSH.
71
+ config :batch_events, :validate => :number, :default => 50
72
+
73
+ # If batch is set to true, the maximum amount of time between RPUSH commands
74
+ # when there are pending events to flush.
75
+ config :batch_timeout, :validate => :number, :default => 5
76
+
77
+ # Interval for reconnecting to failed redis connections
78
+ config :reconnect_interval, :validate => :number, :default => 1
79
+
80
+ # In case redis data_type is list and has more than @congestion_threshold items, block until someone consumes them and reduces
81
+ # congestion, otherwise if there are no consumers redis will run out of memory, unless it was configured with OOM protection.
82
+ # But even with OOM protection single redis list can block all other users of redis, as well redis cpu consumption
83
+ # becomes bad then it reaches the max allowed ram size.
84
+ # Default value of 0 means that this limit is disabled.
85
+ # Only supported for list redis data_type.
86
+ config :congestion_threshold, :validate => :number, :default => 0
87
+
88
+ # How often to check for congestion, defaults to 1 second.
89
+ # Zero means to check on every event.
90
+ config :congestion_interval, :validate => :number, :default => 1
91
+
92
+ def register
93
+ require 'redis'
94
+
95
+ # TODO remove after setting key and data_type to true
96
+ if @queue
97
+ if @key or @data_type
98
+ raise RuntimeError.new(
99
+ "Cannot specify queue parameter and key or data_type"
100
+ )
101
+ end
102
+ @key = @queue
103
+ @data_type = 'list'
104
+ end
105
+
106
+ if not @key or not @data_type
107
+ raise RuntimeError.new(
108
+ "Must define queue, or key and data_type parameters"
109
+ )
110
+ end
111
+ # end TODO
112
+
113
+
114
+ if @batch
115
+ if @data_type != "list"
116
+ raise RuntimeError.new(
117
+ "batch is not supported with data_type #{@data_type}"
118
+ )
119
+ end
120
+ buffer_initialize(
121
+ :max_items => @batch_events,
122
+ :max_interval => @batch_timeout,
123
+ :logger => @logger
124
+ )
125
+ end
126
+
127
+ @redis = nil
128
+ if @shuffle_hosts
129
+ @host.shuffle!
130
+ end
131
+ @host_idx = 0
132
+
133
+ @congestion_check_times = Hash.new { |h,k| h[k] = Time.now.to_i - @congestion_interval }
134
+ end # def register
135
+
136
+ def receive(event)
137
+ return unless output?(event)
138
+
139
+ if @batch and @data_type == 'list' # Don't use batched method for pubsub.
140
+ # Stud::Buffer
141
+ buffer_receive(event.to_json, event.sprintf(@key))
142
+ return
143
+ end
144
+
145
+ key = event.sprintf(@key)
146
+ # TODO(sissel): We really should not drop an event, but historically
147
+ # we have dropped events that fail to be converted to json.
148
+ # TODO(sissel): Find a way to continue passing events through even
149
+ # if they fail to convert properly.
150
+ begin
151
+ payload = event.to_json
152
+ rescue Encoding::UndefinedConversionError, ArgumentError
153
+ puts "FAILUREENCODING"
154
+ @logger.error("Failed to convert event to JSON. Invalid UTF-8, maybe?",
155
+ :event => event.inspect)
156
+ return
157
+ end
158
+
159
+ begin
160
+ @redis ||= connect
161
+ if @data_type == 'list'
162
+ congestion_check(key)
163
+ @redis.rpush(key, payload)
164
+ else
165
+ @redis.publish(key, payload)
166
+ end
167
+ rescue => e
168
+ @logger.warn("Failed to send event to redis", :event => event,
169
+ :identity => identity, :exception => e,
170
+ :backtrace => e.backtrace)
171
+ sleep @reconnect_interval
172
+ @redis = nil
173
+ retry
174
+ end
175
+ end # def receive
176
+
177
+ def congestion_check(key)
178
+ return if @congestion_threshold == 0
179
+ if (Time.now.to_i - @congestion_check_times[key]) >= @congestion_interval # Check congestion only if enough time has passed since last check.
180
+ while @redis.llen(key) > @congestion_threshold # Don't push event to redis key which has reached @congestion_threshold.
181
+ @logger.warn? and @logger.warn("Redis key size has hit a congestion threshold #{@congestion_threshold} suspending output for #{@congestion_interval} seconds")
182
+ sleep @congestion_interval
183
+ end
184
+ @congestion_check_time = Time.now.to_i
185
+ end
186
+ end
187
+
188
+ # called from Stud::Buffer#buffer_flush when there are events to flush
189
+ def flush(events, key, teardown=false)
190
+ @redis ||= connect
191
+ # we should not block due to congestion on teardown
192
+ # to support this Stud::Buffer#buffer_flush should pass here the :final boolean value.
193
+ congestion_check(key) unless teardown
194
+ @redis.rpush(key, events)
195
+ end
196
+ # called from Stud::Buffer#buffer_flush when an error occurs
197
+ def on_flush_error(e)
198
+ @logger.warn("Failed to send backlog of events to redis",
199
+ :identity => identity,
200
+ :exception => e,
201
+ :backtrace => e.backtrace
202
+ )
203
+ @redis = connect
204
+ end
205
+
206
+ def teardown
207
+ if @batch
208
+ buffer_flush(:final => true)
209
+ end
210
+ if @data_type == 'channel' and @redis
211
+ @redis.quit
212
+ @redis = nil
213
+ end
214
+ end
215
+
216
+ private
217
+ def connect
218
+ @current_host, @current_port = @host[@host_idx].split(':')
219
+ @host_idx = @host_idx + 1 >= @host.length ? 0 : @host_idx + 1
220
+
221
+ if not @current_port
222
+ @current_port = @port
223
+ end
224
+
225
+ params = {
226
+ :host => @current_host,
227
+ :port => @current_port,
228
+ :timeout => @timeout,
229
+ :db => @db
230
+ }
231
+ @logger.debug(params)
232
+
233
+ if @password
234
+ params[:password] = @password.value
235
+ end
236
+
237
+ Redis.new(params)
238
+ end # def connect
239
+
240
+ # A string used to identify a redis instance in log messages
241
+ def identity
242
+ @name || "redis://#{@password}@#{@current_host}:#{@current_port}/#{@db} #{@data_type}:#{@key}"
243
+ end
244
+
245
+ end
@@ -0,0 +1,152 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # Riak is a distributed k/v store from Basho.
6
+ # It's based on the Dynamo model.
7
+
8
+ class LogStash::Outputs::Riak < LogStash::Outputs::Base
9
+ config_name "riak"
10
+ milestone 1
11
+
12
+ # The nodes of your Riak cluster
13
+ # This can be a single host or
14
+ # a Logstash hash of node/port pairs
15
+ # e.g
16
+ # ["node1", "8098", "node2", "8098"]
17
+ config :nodes, :validate => :hash, :default => {"localhost" => "8098"}
18
+
19
+ # The protocol to use
20
+ # HTTP or ProtoBuf
21
+ # Applies to ALL backends listed above
22
+ # No mix and match
23
+ config :proto, :validate => ["http", "pb"], :default => "http"
24
+
25
+ # The bucket name to write events to
26
+ # Expansion is supported here as values are
27
+ # passed through event.sprintf
28
+ # Multiple buckets can be specified here
29
+ # but any bucket-specific settings defined
30
+ # apply to ALL the buckets.
31
+ config :bucket, :validate => :array, :default => ["logstash-%{+YYYY.MM.dd}"]
32
+
33
+ # The event key name
34
+ # variables are valid here.
35
+ #
36
+ # Choose this carefully. Best to let riak decide....
37
+ config :key_name, :validate => :string
38
+
39
+ # Bucket properties (NYI)
40
+ # Logstash hash of properties for the bucket
41
+ # i.e.
42
+ # `bucket_props => ["r", "one", "w", "one", "dw", "one"]`
43
+ # or
44
+ # `bucket_props => ["n_val", "3"]`
45
+ # Note that the Logstash config language cannot support
46
+ # hash or array values
47
+ # Properties will be passed as-is
48
+ config :bucket_props, :validate => :hash
49
+
50
+ # Indices
51
+ # Array of fields to add 2i on
52
+ # e.g.
53
+ # `indices => ["source_host", "type"]
54
+ # Off by default as not everyone runs eleveldb
55
+ config :indices, :validate => :array
56
+
57
+ # Search
58
+ # Enable search on the bucket defined above
59
+ config :enable_search, :validate => :boolean, :default => false
60
+
61
+ # SSL
62
+ # Enable SSL
63
+ config :enable_ssl, :validate => :boolean, :default => false
64
+
65
+ # SSL Options
66
+ # Options for SSL connections
67
+ # Only applied if SSL is enabled
68
+ # Logstash hash that maps to the riak-client options
69
+ # here: https://github.com/basho/riak-ruby-client/wiki/Connecting-to-Riak
70
+ # You'll likely want something like this:
71
+ # `ssl_opts => ["pem", "/etc/riak.pem", "ca_path", "/usr/share/certificates"]
72
+ # Per the riak client docs, the above sample options
73
+ # will turn on SSL `VERIFY_PEER`
74
+ config :ssl_opts, :validate => :hash
75
+
76
+ # Metadata (NYI)
77
+ # Allow the user to set custom metadata on the object
78
+ # Should consider converting logstash data to metadata as well
79
+ #
80
+
81
+ public
82
+ def register
83
+ require 'riak'
84
+ riak_opts = {}
85
+ cluster_nodes = Array.new
86
+ @logger.debug("Setting protocol", :protocol => @proto)
87
+ proto_type = "#{@proto}_port".to_sym
88
+ @nodes.each do |node,port|
89
+ @logger.debug("Adding node", :node => node, :port => port)
90
+ cluster_nodes << {:host => node, proto_type => port}
91
+ end
92
+ @logger.debug("Cluster nodes", :nodes => cluster_nodes)
93
+ if @enable_ssl
94
+ @logger.debug("SSL requested")
95
+ if @ssl_opts
96
+ @logger.debug("SSL options provided", @ssl_opts)
97
+ riak_opts.merge!(@ssl_opts.inject({}) {|h,(k,v)| h[k.to_sym] = v; h})
98
+ else
99
+ riak_opts.merge!({:ssl => true})
100
+ end
101
+ @logger.debug("Riak options:", :riak_opts => riak_opts)
102
+ end
103
+ riak_opts.merge!({:nodes => cluster_nodes})
104
+ @logger.debug("Riak options:", :riak_opts => riak_opts)
105
+ @client = Riak::Client.new(riak_opts)
106
+ end # def register
107
+
108
+ public
109
+ def receive(event)
110
+ return unless output?(event)
111
+
112
+ @bucket.each do |b|
113
+ # setup our bucket(s)
114
+ bukkit = @client.bucket(event.sprintf(b))
115
+ # Disable bucket props for now
116
+ # Need to detect params passed that should be converted to int
117
+ # otherwise setting props fails =(
118
+ # Logstash syntax only supports strings and bools
119
+ # likely fix is to either hack in is_numeric?
120
+ # or whitelist certain params and call to_i
121
+ ##@logger.debug("Setting bucket props", :props => @bucket_props)
122
+ ##bukkit.props = @bucket_props if @bucket_props
123
+ ##@logger.debug("Bucket", :bukkit => bukkit.inspect)
124
+
125
+ if @enable_search
126
+ @logger.debug("Enable search requested", :bucket => bukkit.inspect)
127
+ # Check if search is enabled
128
+ @logger.debug("Checking bucket status", :search_enabled => bukkit.is_indexed?)
129
+ bukkit.enable_index! unless bukkit.is_indexed?
130
+ @logger.debug("Rechecking bucket status", :search_enabled => bukkit.is_indexed?)
131
+ end
132
+ @key_name.nil? ? evt_key=nil : evt_key=event.sprintf(@key_name)
133
+ evt = Riak::RObject.new(bukkit, evt_key)
134
+ @logger.debug("RObject", :robject => evt.to_s)
135
+ begin
136
+ evt.content_type = "application/json"
137
+ evt.data = event
138
+ if @indices
139
+ @indices.each do |k|
140
+ idx_name = "#{k.gsub('@','')}_bin"
141
+ @logger.debug("Riak index name", :idx => idx_name)
142
+ @logger.info("Indexes", :indexes => evt.indexes.to_s)
143
+ evt.indexes[idx_name] << event.sprintf("%{#{k}}")
144
+ end
145
+ end
146
+ evt.store
147
+ rescue Exception => e
148
+ @logger.warn("Exception storing", :message => e.message)
149
+ end
150
+ end
151
+ end # def receive
152
+ end # class LogStash::Outputs::Riak