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,113 @@
1
+ # encoding: utf-8
2
+ require "rack/handler/ftw" # gem ftw
3
+ require "ftw" # gem ftw
4
+ require "sinatra/base" # gem sinatra
5
+ require "optparse"
6
+ require "mime/types"
7
+
8
+ class Rack::Handler::FTW
9
+ alias_method :handle_connection_, :handle_connection
10
+ def handle_connection(connection)
11
+ #require "pry"; binding.pry
12
+ return handle_connection_(connection)
13
+ end
14
+ end
15
+
16
+ module LogStash::Kibana
17
+ class App < Sinatra::Base
18
+ set :logging, true
19
+
20
+ use Rack::CommonLogger
21
+ use Rack::ShowExceptions
22
+
23
+ get "/" do
24
+ redirect "index.html"
25
+ end
26
+
27
+ # Sinatra has problems serving static files from
28
+ # jar files, so let's hack this by hand.
29
+ #set :public, "#{File.dirname(__FILE__)}/public"
30
+ get "/config.js" do static_file end
31
+ get "/index.html" do static_file end
32
+ get "/app/*" do static_file end
33
+ get "/css/*" do static_file end
34
+ get "/font/*" do static_file end
35
+ get "/img/*" do static_file end
36
+ get "/vendor/*" do static_file end
37
+
38
+ def static_file
39
+ # request.path_info is the full path of the request.
40
+ docroot = File.expand_path(File.join(File.dirname(__FILE__), "../../vendor/kibana"))
41
+ path = File.join(docroot, *request.path_info.split("/"))
42
+ if File.exists?(path)
43
+ ext = path.split(".").last
44
+ content_type MIME::Types.type_for(ext).first.to_s
45
+ body File.new(path, "r").read
46
+ else
47
+ status 404
48
+ content_type "text/plain"
49
+ body "File not found: #{path}"
50
+ end
51
+ end # def static_file
52
+ end # class App
53
+
54
+ class Runner
55
+ Settings = Struct.new(:logfile, :address, :port, :backend)
56
+
57
+ public
58
+ def run(args)
59
+ settings = Settings.new
60
+ settings.address = "0.0.0.0"
61
+ settings.port = 9292
62
+ settings.backend = "localhost"
63
+
64
+ progname = File.basename($0)
65
+
66
+ opts = OptionParser.new do |opts|
67
+ opts.banner = "Usage: #{progname} [options]"
68
+ opts.on("-a", "--address ADDRESS", "Address on which to start webserver. Default is 0.0.0.0.") do |address|
69
+ settings.address = address
70
+ end
71
+
72
+ opts.on("-p", "--port PORT", "Port on which to start webserver. Default is 9292.") do |port|
73
+ settings.port = port.to_i
74
+ end
75
+
76
+ #opts.on("-b", "--backend host",
77
+ #"The backend host to use. Default is 'localhost'") do |host|
78
+ #settings.backend = host
79
+ #end
80
+ end
81
+
82
+ begin
83
+ args = opts.parse(args)
84
+ rescue SystemExit
85
+ # if you ask for --help, optparse will exit.
86
+ # capture it and return normally
87
+ return []
88
+ end
89
+
90
+ @thread = Thread.new do
91
+ Cabin::Channel.get.info("Starting web server", :settings => settings)
92
+ ftw = Rack::Handler::FTW.new(LogStash::Kibana::App.new,
93
+ :Host => settings.address,
94
+ :Port => settings.port)
95
+ trap_id = Stud::trap("INT") do
96
+ puts "Stopping web..."
97
+ ftw.stop rescue nil
98
+ raise SystemExit
99
+ end
100
+
101
+ ftw.run
102
+ end
103
+
104
+ return args
105
+ end # def run
106
+
107
+ public
108
+ def wait
109
+ @thread.join if @thread
110
+ return 0
111
+ end # def wait
112
+ end
113
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ jarpath = File.join(File.dirname(__FILE__), "../../vendor/**/*.jar")
3
+ Dir[jarpath].each do |jar|
4
+ if $DEBUG
5
+ puts "Loading #{jar}"
6
+ end
7
+ require jar
8
+ end
9
+
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+ require "cabin"
4
+ require "logger"
5
+
6
+ class LogStash::Logger
7
+ attr_accessor :target
8
+
9
+ public
10
+ def initialize(*args)
11
+ super()
12
+
13
+ #self[:program] = File.basename($0)
14
+ #subscribe(::Logger.new(*args))
15
+ @target = args[0]
16
+ @channel = Cabin::Channel.get(LogStash)
17
+
18
+ # lame hack until cabin's smart enough not to doubley-subscribe something.
19
+ # without this subscription count check, running the test suite
20
+ # causes Cabin to subscribe to STDOUT maaaaaany times.
21
+ subscriptions = @channel.instance_eval { @subscribers.count }
22
+ @channel.subscribe(@target) unless subscriptions > 0
23
+
24
+ # Set default loglevel to WARN unless $DEBUG is set (run with 'ruby -d')
25
+ @level = $DEBUG ? :debug : :warn
26
+ if ENV["LOGSTASH_DEBUG"]
27
+ @level = :debug
28
+ end
29
+
30
+ # Direct metrics elsewhere.
31
+ @channel.metrics.channel = Cabin::Channel.new
32
+ end # def initialize
33
+
34
+ # Delegation
35
+ def level=(value) @channel.level = value; end
36
+ def debug(*args); @channel.debug(*args); end
37
+ def debug?(*args); @channel.debug?(*args); end
38
+ def info(*args); @channel.info(*args); end
39
+ def info?(*args); @channel.info?(*args); end
40
+ def warn(*args); @channel.warn(*args); end
41
+ def warn?(*args); @channel.warn?(*args); end
42
+ def error(*args); @channel.error(*args); end
43
+ def error?(*args); @channel.error?(*args); end
44
+ def fatal(*args); @channel.fatal(*args); end
45
+ def fatal?(*args); @channel.fatal?(*args); end
46
+
47
+ def self.setup_log4j(logger)
48
+ require "java"
49
+
50
+ properties = java.util.Properties.new
51
+ log4j_level = "WARN"
52
+ case logger.level
53
+ when :debug
54
+ log4j_level = "DEBUG"
55
+ when :info
56
+ log4j_level = "INFO"
57
+ when :warn
58
+ log4j_level = "WARN"
59
+ end # case level
60
+ properties.setProperty("log4j.rootLogger", "#{log4j_level},logstash")
61
+
62
+ # TODO(sissel): This is a shitty hack to work around the fact that
63
+ # LogStash::Logger isn't used anymore. We should fix that.
64
+ target = logger.instance_eval { @subscribers }.values.first.instance_eval { @io }
65
+ case target
66
+ when STDOUT
67
+ properties.setProperty("log4j.appender.logstash",
68
+ "org.apache.log4j.ConsoleAppender")
69
+ properties.setProperty("log4j.appender.logstash.Target", "System.out")
70
+ when STDERR
71
+ properties.setProperty("log4j.appender.logstash",
72
+ "org.apache.log4j.ConsoleAppender")
73
+ properties.setProperty("log4j.appender.logstash.Target", "System.err")
74
+ else
75
+ properties.setProperty("log4j.appender.logstash",
76
+ "org.apache.log4j.FileAppender")
77
+ properties.setProperty("log4j.appender.logstash.File", target.path)
78
+ end # case target
79
+
80
+ properties.setProperty("log4j.appender.logstash.layout",
81
+ "org.apache.log4j.PatternLayout")
82
+ properties.setProperty("log4j.appender.logstash.layout.conversionPattern",
83
+ "log4j, [%d{yyyy-MM-dd}T%d{HH:mm:ss.SSS}] %5p: %c: %m%n")
84
+
85
+ org.apache.log4j.LogManager.resetConfiguration
86
+ org.apache.log4j.PropertyConfigurator.configure(properties)
87
+ logger.debug("log4j java properties setup", :log4j_level => log4j_level)
88
+ end
89
+ end # class LogStash::Logger
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require "logstash/JRUBY-6970" if RUBY_PLATFORM == "java"
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ if $DEBUGLIST.include?("require")
3
+ ROOT = File.dirname(__FILE__)
4
+ module Kernel
5
+ alias_method :require_debug, :require
6
+
7
+ def require(path)
8
+ start = Time.now
9
+ result = require_debug(path)
10
+ duration = Time.now - start
11
+
12
+ origin = caller[1]
13
+ if origin =~ /rubygems\/custom_require/
14
+ origin = caller[3]
15
+ if origin.nil?
16
+ STDERR.puts "Unknown origin"
17
+ STDERR.puts caller.join("\n")
18
+ end
19
+ end
20
+ origin = origin.gsub(/:[0-9]+:in .*/, "") if origin
21
+
22
+ # Only print require() calls that did actual work.
23
+ # require() returns true on load, false if already loaded.
24
+ if result
25
+ source = caller[0]
26
+ #p source.include?("/lib/polyglot.rb:63:in `require'") => source
27
+ if source.include?("/lib/polyglot.rb:63:in `require'")
28
+ source = caller[1]
29
+ end
30
+
31
+ #target = $LOADED_FEATURES.grep(/#{path}/).first
32
+ #puts path
33
+ #puts caller.map { |c| " #{c}" }.join("\n")
34
+ #fontsize = [10, duration * 48].max
35
+ puts "#{duration},#{path},#{source}"
36
+ end
37
+ #puts caller.map { |c| " => #{c}" }.join("\n")
38
+ end
39
+
40
+ alias_method :load_debug, :load
41
+
42
+ def load(path)
43
+ puts "load(\"#{path}\")"
44
+ return load_debug(path)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ if RUBY_PLATFORM == "java"
3
+ class << File
4
+ # mpp == monkey patch for performance
5
+ alias_method :mpp_file?, :file?
6
+ alias_method :mpp_exist?, :exist?
7
+ alias_method :mpp_exists?, :exists?
8
+
9
+ JAR_RE = /^(?:jar:)?file:(\/.*\.jar)!(\/.*$)/
10
+ def file?(path)
11
+ #return mpp_file?(path)
12
+ # If path is in a jar (file://blah/foo.jar!/some/path)
13
+ # - create a cache for this jar of all files
14
+ # - return cached results only
15
+ if RUBY_PLATFORM == "java"
16
+ m = JAR_RE.match(path)
17
+ return mpp_file?(path) if !m # not a jar file
18
+ c = __zipcache(m[1], m[2]) # m[1] == the jar path
19
+ # ZipEntry has only 'isDirectory()' so I assume any
20
+ # non-directories are files.
21
+ rc = (!c.nil? && !c.isDirectory)
22
+ #p path => rc
23
+ return rc
24
+ end
25
+ return mpp_file?(path)
26
+ end
27
+
28
+ def exist?(path)
29
+ #return mpp_exist?(path)
30
+ # If path is in a jar (file://blah/foo.jar!/some/path)
31
+ # - create a cache for this jar of all files
32
+ # - return cached results only
33
+ if RUBY_PLATFORM == "java"
34
+ m = JAR_RE.match(path)
35
+ return mpp_exists?(path) if !m # not a jar file
36
+ c = __zipcache(m[1], m[2]) # m[1] == the jar path
37
+ return !c.nil?
38
+ end
39
+ return mpp_exists?(path)
40
+ end
41
+
42
+ def exists?(path)
43
+ return exist?(path)
44
+ end
45
+
46
+ def __zipcache(jarpath, path)
47
+ @jarcache ||= Hash.new { |h,k| h[k] = {} }
48
+
49
+ if @jarcache[jarpath].empty?
50
+ #puts "Caching file entries for #{jarpath}"
51
+ s = Time.now
52
+ zip = java.util.zip.ZipFile.new(jarpath)
53
+ zip.entries.each do |entry|
54
+ #puts "Caching file entries for #{jarpath}: /#{entry.name}"
55
+ # Prefix entry name with "/" because that's what the jar path looks
56
+ # like in jruby: file://some.jar!/some/path
57
+ @jarcache[jarpath]["/" + entry.name] = entry
58
+ end
59
+ end
60
+
61
+ entry = @jarcache[jarpath][path]
62
+ #puts "Serving cached file info #{path}: #{entry}"
63
+ return entry
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+ require "cabin"
4
+
5
+ class LogStash::MultiQueue
6
+ attr_accessor :logger
7
+
8
+ public
9
+ def initialize(*queues)
10
+ @logger = Cabin::Channel.get(LogStash)
11
+ @mutex = Mutex.new
12
+ @queues = queues
13
+ end # def initialize
14
+
15
+ public
16
+ def logger=(_logger)
17
+ @logger = _logger
18
+
19
+ # Set the logger for all known queues, too.
20
+ @queues.each do |q|
21
+ q.logger = _logger
22
+ end
23
+ end # def logger=
24
+
25
+ # Push an object to all queues.
26
+ public
27
+ def push(object)
28
+ @queues.each { |q| q.push(object) }
29
+ end # def push
30
+ alias :<< :push
31
+
32
+ alias_method :<<, :push
33
+
34
+ # Add a new Queue to this queue.
35
+ public
36
+ def add_queue(queue)
37
+ @mutex.synchronize do
38
+ @queues << queue
39
+ end
40
+ end # def add_queue
41
+
42
+ public
43
+ def remove_queue(queue)
44
+ @mutex.synchronize do
45
+ @queues.delete(queue)
46
+ end
47
+ end # def remove_queue
48
+
49
+ public
50
+ def size
51
+ return @queues.collect { |q| q.size }
52
+ end # def size
53
+ end # class LogStash::MultiQueue
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ #$: << File.join(File.dirname(__FILE__), "..", "..", "vendor", "bundle")
3
+
4
+ module LogStash
5
+ module Inputs; end
6
+ module Outputs; end
7
+ module Filters; end
8
+ module Search; end
9
+ module Config; end
10
+ module File; end
11
+ module Web; end
12
+ module Util; end
13
+ module PluginMixins; end
14
+
15
+ SHUTDOWN = :shutdown
16
+ end # module LogStash
@@ -0,0 +1,120 @@
1
+ # encoding: utf-8
2
+ require "cgi"
3
+ require "logstash/event"
4
+ require "logstash/logging"
5
+ require "logstash/plugin"
6
+ require "logstash/namespace"
7
+ require "logstash/config/mixin"
8
+ require "uri"
9
+
10
+ class LogStash::Outputs::Base < LogStash::Plugin
11
+ include LogStash::Config::Mixin
12
+
13
+ config_name "output"
14
+
15
+ # The type to act on. If a type is given, then this output will only
16
+ # act on messages with the same type. See any input plugin's "type"
17
+ # attribute for more.
18
+ # Optional.
19
+ config :type, :validate => :string, :default => "", :deprecated => "You can achieve this same behavior with the new conditionals, like: `if [type] == \"sometype\" { %PLUGIN% { ... } }`."
20
+
21
+ # Only handle events with all of these tags. Note that if you specify
22
+ # a type, the event must also match that type.
23
+ # Optional.
24
+ config :tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if \"sometag\" in [tags] { %PLUGIN% { ... } }`"
25
+
26
+ # Only handle events without any of these tags. Note this check is additional to type and tags.
27
+ config :exclude_tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if !(\"sometag\" in [tags]) { %PLUGIN% { ... } }`"
28
+
29
+ # The codec used for output data
30
+ config :codec, :validate => :codec, :default => "plain"
31
+
32
+ # The number of workers to use for this output.
33
+ # Note that this setting may not be useful for all outputs.
34
+ config :workers, :validate => :number, :default => 1
35
+
36
+ public
37
+ def workers_not_supported(message=nil)
38
+ return if @workers == 1
39
+ if message
40
+ @logger.warn(I18n.t("logstash.pipeline.output-worker-unsupported-with-message", :plugin => self.class.config_name, :worker_count => @workers, :message => message))
41
+ else
42
+ @logger.warn(I18n.t("logstash.pipeline.output-worker-unsupported", :plugin => self.class.config_name, :worker_count => @workers))
43
+ end
44
+ @workers = 1
45
+ end
46
+
47
+ public
48
+ def initialize(params={})
49
+ super
50
+ config_init(params)
51
+ end
52
+
53
+ public
54
+ def register
55
+ raise "#{self.class}#register must be overidden"
56
+ end # def register
57
+
58
+ public
59
+ def receive(event)
60
+ raise "#{self.class}#receive must be overidden"
61
+ end # def receive
62
+
63
+ public
64
+ def worker_setup
65
+ return unless @workers > 1
66
+
67
+ define_singleton_method(:handle, method(:handle_worker))
68
+ @worker_queue = SizedQueue.new(20)
69
+
70
+ @worker_threads = @workers.times do |i|
71
+ Thread.new(original_params, @worker_queue) do |params, queue|
72
+ LogStash::Util::set_thread_name(">#{self.class.config_name}.#{i}")
73
+ worker_params = params.merge("workers" => 1, "codec" => @codec.clone)
74
+ worker_plugin = self.class.new(worker_params)
75
+ worker_plugin.register
76
+ while true
77
+ event = queue.pop
78
+ worker_plugin.handle(event)
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ public
85
+ def handle(event)
86
+ receive(event)
87
+ end # def handle
88
+
89
+ def handle_worker(event)
90
+ @worker_queue.push(event)
91
+ end
92
+
93
+ private
94
+ def output?(event)
95
+ if !@type.empty?
96
+ if event["type"] != @type
97
+ @logger.debug? and @logger.debug(["outputs/#{self.class.name}: Dropping event because type doesn't match #{@type}", event])
98
+ return false
99
+ end
100
+ end
101
+
102
+ if !@tags.empty?
103
+ return false if !event["tags"]
104
+ @include_method = :any?
105
+ if !@tags.send(@include_method) {|tag| event["tags"].include?(tag)}
106
+ @logger.debug? and @logger.debug("outputs/#{self.class.name}: Dropping event because tags don't match #{@tags.inspect}", event)
107
+ return false
108
+ end
109
+ end
110
+
111
+ if !@exclude_tags.empty? && event["tags"]
112
+ if @exclude_tags.send(@exclude_method) {|tag| event["tags"].include?(tag)}
113
+ @logger.debug? and @logger.debug("outputs/#{self.class.name}: Dropping event because tags contains excluded tags: #{exclude_tags.inspect}", event)
114
+ return false
115
+ end
116
+ end
117
+
118
+ return true
119
+ end
120
+ end # class LogStash::Outputs::Base