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,53 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # Receive events using the lumberjack protocol.
6
+ #
7
+ # This is mainly to receive events shipped with lumberjack,
8
+ # <http://github.com/jordansissel/lumberjack>
9
+ class LogStash::Inputs::Lumberjack < LogStash::Inputs::Base
10
+
11
+ config_name "lumberjack"
12
+ milestone 1
13
+
14
+ default :codec, "plain"
15
+
16
+ # the address to listen on.
17
+ config :host, :validate => :string, :default => "0.0.0.0"
18
+
19
+ # the port to listen on.
20
+ config :port, :validate => :number, :required => true
21
+
22
+ # ssl certificate to use
23
+ config :ssl_certificate, :validate => :path, :required => true
24
+
25
+ # ssl key to use
26
+ config :ssl_key, :validate => :path, :required => true
27
+
28
+ # ssl key passphrase to use
29
+ config :ssl_key_passphrase, :validate => :password
30
+
31
+ # TODO(sissel): Add CA to authenticate clients with.
32
+
33
+ public
34
+ def register
35
+ require "lumberjack/server"
36
+
37
+ @logger.info("Starting lumberjack input listener", :address => "#{@host}:#{@port}")
38
+ @lumberjack = Lumberjack::Server.new(:address => @host, :port => @port,
39
+ :ssl_certificate => @ssl_certificate, :ssl_key => @ssl_key,
40
+ :ssl_key_passphrase => @ssl_key_passphrase)
41
+ end # def register
42
+
43
+ public
44
+ def run(output_queue)
45
+ @lumberjack.run do |l|
46
+ @codec.decode(l.delete("line")) do |event|
47
+ decorate(event)
48
+ l.each { |k,v| event[k] = v; v.force_encoding("UTF-8") }
49
+ output_queue << event
50
+ end
51
+ end
52
+ end # def run
53
+ end # class LogStash::Inputs::Lumberjack
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket" # for Socket.gethostname
5
+
6
+ # Stream events from a long running command pipe.
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
+ #
11
+ class LogStash::Inputs::Pipe < LogStash::Inputs::Base
12
+ config_name "pipe"
13
+ milestone 1
14
+
15
+ # TODO(sissel): This should switch to use the 'line' codec by default
16
+ # once we switch away from doing 'readline'
17
+ default :codec, "plain"
18
+
19
+ # Command to run and read events from, one line at a time.
20
+ #
21
+ # Example:
22
+ #
23
+ # command => "echo hello world"
24
+ config :command, :validate => :string, :required => true
25
+
26
+ public
27
+ def register
28
+ @logger.info("Registering pipe input", :command => @command)
29
+ end # def register
30
+
31
+ public
32
+ def run(queue)
33
+ loop do
34
+ begin
35
+ @pipe = IO.popen(@command, mode="r")
36
+ hostname = Socket.gethostname
37
+
38
+ @pipe.each do |line|
39
+ line = line.chomp
40
+ source = "pipe://#{hostname}/#{@command}"
41
+ @logger.debug? && @logger.debug("Received line", :command => @command, :line => line)
42
+ @codec.decode(line) do |event|
43
+ event["host"] = hostname
44
+ event["command"] = @command
45
+ decorate(event)
46
+ queue << event
47
+ end
48
+ end
49
+ rescue Exception => e
50
+ @logger.error("Exception while running command", :e => e, :backtrace => e.backtrace)
51
+ end
52
+
53
+ # Keep running the command forever.
54
+ sleep(10)
55
+ end
56
+ end # def run
57
+ end # class LogStash::Inputs::Pipe
@@ -0,0 +1,126 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/threadable"
3
+ require "logstash/namespace"
4
+
5
+ # Pull events from a RabbitMQ exchange.
6
+ #
7
+ # The default settings will create an entirely transient queue and listen for all messages by default.
8
+ # If you need durability or any other advanced settings, please set the appropriate options
9
+ #
10
+ # This has been tested with Bunny 0.9.x, which supports RabbitMQ 2.x and 3.x. You can
11
+ # find links to both here:
12
+ #
13
+ # * RabbitMQ - <http://www.rabbitmq.com/>
14
+ # * March Hare: <http://rubymarchhare.info>
15
+ # * Bunny - <https://github.com/ruby-amqp/bunny>
16
+ class LogStash::Inputs::RabbitMQ < LogStash::Inputs::Threadable
17
+
18
+ config_name "rabbitmq"
19
+ milestone 1
20
+
21
+ #
22
+ # Connection
23
+ #
24
+
25
+ # RabbitMQ server address
26
+ config :host, :validate => :string, :required => true
27
+
28
+ # RabbitMQ port to connect on
29
+ config :port, :validate => :number, :default => 5672
30
+
31
+ # RabbitMQ username
32
+ config :user, :validate => :string, :default => "guest"
33
+
34
+ # RabbitMQ password
35
+ config :password, :validate => :password, :default => "guest"
36
+
37
+ # The vhost to use. If you don't know what this is, leave the default.
38
+ config :vhost, :validate => :string, :default => "/"
39
+
40
+ # Enable or disable SSL
41
+ config :ssl, :validate => :boolean, :default => false
42
+
43
+ # Validate SSL certificate
44
+ config :verify_ssl, :validate => :boolean, :default => false
45
+
46
+ # Enable or disable logging
47
+ config :debug, :validate => :boolean, :default => false
48
+
49
+
50
+
51
+ #
52
+ # Queue & Consumer
53
+ #
54
+
55
+ # The name of the queue Logstash will consume events from.
56
+ config :queue, :validate => :string, :default => ""
57
+
58
+ # Is this queue durable? (aka; Should it survive a broker restart?)
59
+ config :durable, :validate => :boolean, :default => false
60
+
61
+ # Should the queue be deleted on the broker when the last consumer
62
+ # disconnects? Set this option to 'false' if you want the queue to remain
63
+ # on the broker, queueing up messages until a consumer comes along to
64
+ # consume them.
65
+ config :auto_delete, :validate => :boolean, :default => true
66
+
67
+ # Is the queue exclusive? (aka: Will other clients connect to this named queue?)
68
+ config :exclusive, :validate => :boolean, :default => true
69
+
70
+ # Extra queue arguments as an array.
71
+ # To make a RabbitMQ queue mirrored, use: {"x-ha-policy" => "all"}
72
+ config :arguments, :validate => :array, :default => {}
73
+
74
+ # Prefetch count. Number of messages to prefetch
75
+ config :prefetch_count, :validate => :number, :default => 256
76
+
77
+ # Enable message acknowledgement
78
+ config :ack, :validate => :boolean, :default => true
79
+
80
+ # Passive queue creation? Useful for checking queue existance without modifying server state
81
+ config :passive, :validate => :boolean, :default => false
82
+
83
+
84
+
85
+ #
86
+ # (Optional) Exchange binding
87
+ #
88
+
89
+ # Optional.
90
+ #
91
+ # The name of the exchange to bind the queue to.
92
+ config :exchange, :validate => :string
93
+
94
+ # Optional.
95
+ #
96
+ # The routing key to use when binding a queue to the exchange.
97
+ # This is only relevant for direct or topic exchanges.
98
+ #
99
+ # * Routing keys are ignored on fanout exchanges.
100
+ # * Wildcards are not valid on direct exchanges.
101
+ config :key, :validate => :string, :default => "logstash"
102
+
103
+
104
+ def initialize(params)
105
+ params["codec"] = "json" if !params["codec"]
106
+
107
+ super
108
+ end
109
+
110
+ # Use March Hare on JRuby to avoid IO#select CPU spikes
111
+ # (see github.com/ruby-amqp/bunny/issues/95).
112
+ #
113
+ # On MRI, use Bunny.
114
+ #
115
+ # See http://rubybunny.info and http://rubymarchhare.info
116
+ # for the docs.
117
+ if RUBY_ENGINE == "jruby"
118
+ require "logstash/inputs/rabbitmq/march_hare"
119
+
120
+ include MarchHareImpl
121
+ else
122
+ require "logstash/inputs/rabbitmq/bunny"
123
+
124
+ include BunnyImpl
125
+ end
126
+ end # class LogStash::Inputs::RabbitMQ
@@ -0,0 +1,118 @@
1
+ # encoding: utf-8
2
+ class LogStash::Inputs::RabbitMQ
3
+ module BunnyImpl
4
+ def register
5
+ require "bunny"
6
+
7
+ @vhost ||= Bunny::DEFAULT_HOST
8
+ # 5672. Will be switched to 5671 by Bunny if TLS is enabled.
9
+ @port ||= AMQ::Protocol::DEFAULT_PORT
10
+ @routing_key ||= "#"
11
+
12
+ @settings = {
13
+ :vhost => @vhost,
14
+ :host => @host,
15
+ :port => @port,
16
+ :automatically_recover => false
17
+ }
18
+ @settings[:user] = @user || Bunny::DEFAULT_USER
19
+ @settings[:pass] = if @password
20
+ @password.value
21
+ else
22
+ Bunny::DEFAULT_PASSWORD
23
+ end
24
+
25
+ @settings[:log_level] = if @debug
26
+ :debug
27
+ else
28
+ :error
29
+ end
30
+
31
+ @settings[:tls] = @ssl if @ssl
32
+ @settings[:verify_ssl] = @verify_ssl if @verify_ssl
33
+
34
+ proto = if @ssl
35
+ "amqp"
36
+ else
37
+ "amqps"
38
+ end
39
+ @connection_url = "#{proto}://#{@user}@#{@host}:#{@port}#{vhost}/#{@queue}"
40
+
41
+ @logger.info("Registering input #{@connection_url}")
42
+ end
43
+
44
+ def run(output_queue)
45
+ @output_queue = output_queue
46
+
47
+ begin
48
+ setup
49
+ consume
50
+ rescue Bunny::NetworkFailure, Bunny::ConnectionClosedError, Bunny::ConnectionLevelException, Bunny::TCPConnectionFailed => e
51
+ n = Bunny::Session::DEFAULT_NETWORK_RECOVERY_INTERVAL * 2
52
+
53
+ # Because we manually reconnect instead of letting Bunny
54
+ # handle failures,
55
+ # make sure we don't leave any consumer work pool
56
+ # threads behind. MK.
57
+ @ch.maybe_kill_consumer_work_pool!
58
+ @logger.error("RabbitMQ connection error: #{e.message}. Will attempt to reconnect in #{n} seconds...")
59
+
60
+ sleep n
61
+ retry
62
+ end
63
+ end
64
+
65
+ def teardown
66
+ @consumer.cancel
67
+ @q.delete unless @durable
68
+
69
+ @ch.close if @ch && @ch.open?
70
+ @conn.close if @conn && @conn.open?
71
+
72
+ finished
73
+ end
74
+
75
+ def setup
76
+ @conn = Bunny.new(@settings)
77
+
78
+ @logger.debug("Connecting to RabbitMQ. Settings: #{@settings.inspect}, queue: #{@queue.inspect}")
79
+ return if terminating?
80
+ @conn.start
81
+
82
+ @ch = @conn.create_channel.tap do |ch|
83
+ ch.prefetch(@prefetch_count)
84
+ end
85
+ @logger.info("Connected to RabbitMQ at #{@settings[:host]}")
86
+
87
+ @arguments_hash = Hash[*@arguments]
88
+
89
+ @q = @ch.queue(@queue,
90
+ :durable => @durable,
91
+ :auto_delete => @auto_delete,
92
+ :exclusive => @exclusive,
93
+ :arguments => @arguments)
94
+
95
+ # exchange binding is optional for the input
96
+ if @exchange
97
+ @q.bind(@exchange, :routing_key => @key)
98
+ end
99
+ end
100
+
101
+ def consume
102
+ @logger.info("Will consume events from queue #{@q.name}")
103
+
104
+ # we both need to block the caller in Bunny::Queue#subscribe and have
105
+ # a reference to the consumer so that we can cancel it, so
106
+ # a consumer manually. MK.
107
+ @consumer = Bunny::Consumer.new(@ch, @q)
108
+ @q.subscribe(:manual_ack => @ack, :block => true) do |delivery_info, properties, data|
109
+ @codec.decode(data) do |event|
110
+ decorate(event)
111
+ @output_queue << event
112
+ end
113
+
114
+ @ch.acknowledge(delivery_info.delivery_tag) if @ack
115
+ end
116
+ end
117
+ end # BunnyImpl
118
+ end
@@ -0,0 +1 @@
1
+ require "logstash/inputs/rabbitmq/march_hare"
@@ -0,0 +1,129 @@
1
+ # encoding: utf-8
2
+ class LogStash::Inputs::RabbitMQ
3
+ # MarchHare-based implementation for JRuby
4
+ module MarchHareImpl
5
+ def register
6
+ require "hot_bunnies"
7
+ require "java"
8
+
9
+ @vhost ||= "127.0.0.1"
10
+ # 5672. Will be switched to 5671 by Bunny if TLS is enabled.
11
+ @port ||= 5672
12
+ @key ||= "#"
13
+
14
+ @settings = {
15
+ :vhost => @vhost,
16
+ :host => @host,
17
+ :port => @port,
18
+ :user => @user,
19
+ :automatic_recovery => false
20
+ }
21
+ @settings[:pass] = @password.value if @password
22
+ @settings[:tls] = @ssl if @ssl
23
+
24
+ proto = if @ssl
25
+ "amqp"
26
+ else
27
+ "amqps"
28
+ end
29
+ @connection_url = "#{proto}://#{@user}@#{@host}:#{@port}#{vhost}/#{@queue}"
30
+
31
+ @logger.info("Registering input #{@connection_url}")
32
+ end
33
+
34
+ def run(output_queue)
35
+ @output_queue = output_queue
36
+ @break_out_of_the_loop = java.util.concurrent.atomic.AtomicBoolean.new(false)
37
+
38
+ # MarchHare does not raise exceptions when connection goes down with a blocking
39
+ # consumer running (it uses callbacks, as the RabbitMQ Java client does).
40
+ #
41
+ # However, MarchHare::Channel will make sure to unblock all blocking consumers
42
+ # on any internal shutdown, so #consume will return and another loop iteration
43
+ # will run.
44
+ #
45
+ # This is very similar to how the Bunny implementation works and is sufficient
46
+ # for our needs: it recovers successfully after RabbitMQ is kill -9ed, the
47
+ # network device is shut down, etc. MK.
48
+ until @break_out_of_the_loop.get do
49
+ begin
50
+ setup
51
+ consume
52
+ rescue MarchHare::Exception, java.lang.Throwable, com.rabbitmq.client.AlreadyClosedException => e
53
+ n = 10
54
+ @logger.error("RabbitMQ connection error: #{e}. Will reconnect in #{n} seconds...")
55
+
56
+ sleep n
57
+ retry
58
+ rescue LogStash::ShutdownSignal => ss
59
+ shutdown_consumer
60
+ end
61
+
62
+ n = 10
63
+ @logger.error("RabbitMQ connection error: #{e}. Will reconnect in #{n} seconds...")
64
+ end
65
+ end
66
+
67
+ def teardown
68
+ shutdown_consumer
69
+ @q.delete unless @durable
70
+
71
+ @ch.close if @ch && @ch.open?
72
+ @connection.close if @connection && @connection.open?
73
+
74
+ finished
75
+ end
76
+
77
+ #
78
+ # Implementation
79
+ #
80
+
81
+ protected
82
+
83
+ def setup
84
+ return if terminating?
85
+
86
+ @conn = MarchHare.connect(@settings)
87
+ @logger.info("Connected to RabbitMQ #{@connection_url}")
88
+
89
+ @ch = @conn.create_channel.tap do |ch|
90
+ ch.prefetch = @prefetch_count
91
+ end
92
+
93
+ @arguments_hash = Hash[*@arguments]
94
+
95
+ @q = @ch.queue(@queue,
96
+ :durable => @durable,
97
+ :auto_delete => @auto_delete,
98
+ :exclusive => @exclusive,
99
+ :arguments => @arguments)
100
+
101
+ # exchange binding is optional for the input
102
+ if @exchange
103
+ @q.bind(@exchange, :routing_key => @key)
104
+ end
105
+ end
106
+
107
+ def consume
108
+ return if terminating?
109
+
110
+ # we manually build a consumer here to be able to keep a reference to it
111
+ # in an @ivar even though we use a blocking version of HB::Queue#subscribe
112
+ @consumer = @q.build_consumer(:block => true) do |metadata, data|
113
+ @codec.decode(data) do |event|
114
+ decorate(event)
115
+ @output_queue << event if event
116
+ end
117
+ @ch.ack(metadata.delivery_tag) if @ack
118
+ end
119
+ @q.subscribe_with(@consumer, :manual_ack => @ack, :block => true)
120
+ end
121
+
122
+ def shutdown_consumer
123
+ @break_out_of_the_loop.set(true)
124
+
125
+ @consumer.cancel
126
+ @consumer.gracefully_shut_down
127
+ end
128
+ end # MarchHareImpl
129
+ end