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,138 @@
1
+ # encoding: utf-8
2
+ require "date"
3
+ require "logstash/inputs/base"
4
+ require "logstash/namespace"
5
+ require "socket"
6
+
7
+ # Read gelf messages as events over the network.
8
+ #
9
+ # This input is a good choice if you already use graylog2 today.
10
+ #
11
+ # The main reasoning for this input is to leverage existing GELF
12
+ # logging libraries such as the gelf log4j appender
13
+ #
14
+ class LogStash::Inputs::Gelf < LogStash::Inputs::Base
15
+ config_name "gelf"
16
+ milestone 2
17
+
18
+ default :codec, "plain"
19
+
20
+ # The address to listen on
21
+ config :host, :validate => :string, :default => "0.0.0.0"
22
+
23
+ # The port to listen on. Remember that ports less than 1024 (privileged
24
+ # ports) may require root to use.
25
+ config :port, :validate => :number, :default => 12201
26
+
27
+ # Whether or not to remap the gelf message fields to logstash event fields or
28
+ # leave them intact.
29
+ #
30
+ # Default is true
31
+ #
32
+ # Remapping converts the following gelf fields to logstash equivalents:
33
+ #
34
+ # * event["message"] becomes full_message
35
+ # if no full_message, use event["message"] becomes short_message
36
+ # if no short_message, event["message"] is the raw json input
37
+ config :remap, :validate => :boolean, :default => true
38
+
39
+ # Whether or not to remove the leading '_' in GELF fields or leave them
40
+ # in place. (Logstash < 1.2 did not remove them by default.)
41
+ #
42
+ # _foo becomes foo
43
+ #
44
+ # Default is true
45
+ config :strip_leading_underscore, :validate => :boolean, :default => true
46
+
47
+ public
48
+ def initialize(params)
49
+ super
50
+ BasicSocket.do_not_reverse_lookup = true
51
+ end # def initialize
52
+
53
+ public
54
+ def register
55
+ require 'gelfd'
56
+ @udp = nil
57
+ end # def register
58
+
59
+ public
60
+ def run(output_queue)
61
+ begin
62
+ # udp server
63
+ udp_listener(output_queue)
64
+ rescue => e
65
+ @logger.warn("gelf listener died", :exception => e, :backtrace => e.backtrace)
66
+ sleep(5)
67
+ retry
68
+ end # begin
69
+ end # def run
70
+
71
+ private
72
+ def udp_listener(output_queue)
73
+ @logger.info("Starting gelf listener", :address => "#{@host}:#{@port}")
74
+
75
+ if @udp
76
+ @udp.close_read rescue nil
77
+ @udp.close_write rescue nil
78
+ end
79
+
80
+ @udp = UDPSocket.new(Socket::AF_INET)
81
+ @udp.bind(@host, @port)
82
+
83
+ while true
84
+ line, client = @udp.recvfrom(8192)
85
+ begin
86
+ data = Gelfd::Parser.parse(line)
87
+ rescue => ex
88
+ @logger.warn("Gelfd failed to parse a message skipping", :exception => ex, :backtrace => ex.backtrace)
89
+ next
90
+ end
91
+
92
+ # Gelfd parser outputs null if it received and cached a non-final chunk
93
+ next if data.nil?
94
+
95
+ event = LogStash::Event.new(JSON.parse(data))
96
+ event["source_host"] = client[3]
97
+ if event["timestamp"].is_a?(Numeric)
98
+ event["@timestamp"] = Time.at(event["timestamp"]).gmtime
99
+ event.remove("timestamp")
100
+ end
101
+ remap_gelf(event) if @remap
102
+ strip_leading_underscore(event) if @strip_leading_underscore
103
+ decorate(event)
104
+ output_queue << event
105
+ end
106
+ rescue LogStash::ShutdownSignal
107
+ # Do nothing, shutdown.
108
+ ensure
109
+ if @udp
110
+ @udp.close_read rescue nil
111
+ @udp.close_write rescue nil
112
+ end
113
+ end # def udp_listener
114
+
115
+ private
116
+ def remap_gelf(event)
117
+ if event["full_message"]
118
+ event["message"] = event["full_message"].dup
119
+ event.remove("full_message")
120
+ if event["short_message"] == event["message"]
121
+ event.remove("short_message")
122
+ end
123
+ elsif event["short_message"]
124
+ event["message"] = event["short_message"].dup
125
+ event.remove("short_message")
126
+ end
127
+ end # def remap_gelf
128
+
129
+ private
130
+ def strip_leading_underscore(event)
131
+ # Map all '_foo' fields to simply 'foo'
132
+ event.to_hash.keys.each do |key|
133
+ next unless key[0,1] == "_"
134
+ event[key[1..-1]] = event[key]
135
+ event.remove(key)
136
+ end
137
+ end # deef removing_leading_underscores
138
+ end # class LogStash::Inputs::Gelf
@@ -0,0 +1,222 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/threadable"
3
+ require "logstash/namespace"
4
+
5
+ # Push events to a GemFire region.
6
+ #
7
+ # GemFire is an object database.
8
+ #
9
+ # To use this plugin you need to add gemfire.jar to your CLASSPATH.
10
+ # Using format=json requires jackson.jar too; use of continuous
11
+ # queries requires antlr.jar.
12
+ #
13
+ # Note: this plugin has only been tested with GemFire 7.0.
14
+ #
15
+ class LogStash::Inputs::Gemfire < LogStash::Inputs::Threadable
16
+
17
+ config_name "gemfire"
18
+ milestone 1
19
+
20
+ default :codec, "plain"
21
+
22
+ # Your client cache name
23
+ config :cache_name, :validate => :string, :default => "logstash"
24
+
25
+ # The path to a GemFire client cache XML file.
26
+ #
27
+ # Example:
28
+ #
29
+ # <client-cache>
30
+ # <pool name="client-pool" subscription-enabled="true" subscription-redundancy="1">
31
+ # <locator host="localhost" port="31331"/>
32
+ # </pool>
33
+ # <region name="Logstash">
34
+ # <region-attributes refid="CACHING_PROXY" pool-name="client-pool" >
35
+ # </region-attributes>
36
+ # </region>
37
+ # </client-cache>
38
+ #
39
+ config :cache_xml_file, :validate => :string, :default => nil
40
+
41
+ # The region name
42
+ config :region_name, :validate => :string, :default => "Logstash"
43
+
44
+ # A regexp to use when registering interest for cache events.
45
+ # Ignored if a :query is specified.
46
+ config :interest_regexp, :validate => :string, :default => ".*"
47
+
48
+ # A query to run as a GemFire "continuous query"; if specified it takes
49
+ # precedence over :interest_regexp which will be ignore.
50
+ #
51
+ # Important: use of continuous queries requires subscriptions to be enabled on the client pool.
52
+ config :query, :validate => :string, :default => nil
53
+
54
+ # How the message is serialized in the cache. Can be one of "json" or "plain"; default is plain
55
+ config :serialization, :validate => :string, :default => nil
56
+
57
+ public
58
+ def register
59
+ import com.gemstone.gemfire.cache.AttributesMutator
60
+ import com.gemstone.gemfire.cache.InterestResultPolicy
61
+ import com.gemstone.gemfire.cache.client.ClientCacheFactory
62
+ import com.gemstone.gemfire.cache.client.ClientRegionShortcut
63
+ import com.gemstone.gemfire.cache.query.CqQuery
64
+ import com.gemstone.gemfire.cache.query.CqAttributes
65
+ import com.gemstone.gemfire.cache.query.CqAttributesFactory
66
+ import com.gemstone.gemfire.cache.query.QueryService
67
+ import com.gemstone.gemfire.cache.query.SelectResults
68
+ import com.gemstone.gemfire.pdx.JSONFormatter
69
+
70
+ @logger.info("Registering input", :plugin => self)
71
+ end # def register
72
+
73
+ def run(queue)
74
+ return if terminating?
75
+ connect
76
+
77
+ @logstash_queue = queue
78
+
79
+ if @query
80
+ continuous_query(@query)
81
+ else
82
+ register_interest(@interest_regexp)
83
+ end
84
+ end # def run
85
+
86
+ def teardown
87
+ @cache.close if @cache
88
+ @cache = nil
89
+ finished
90
+ end # def teardown
91
+
92
+ protected
93
+ def connect
94
+ begin
95
+ @logger.debug("Connecting to GemFire #{@cache_name}")
96
+
97
+ @cache = ClientCacheFactory.new.
98
+ set("name", @cache_name).
99
+ set("cache-xml-file", @cache_xml_file).create
100
+ @logger.debug("Created cache #{@cache.inspect}")
101
+
102
+ rescue => e
103
+ if terminating?
104
+ return
105
+ else
106
+ @logger.error("Gemfire connection error (during connect), will reconnect",
107
+ :exception => e, :backtrace => e.backtrace)
108
+ sleep(1)
109
+ retry
110
+ end
111
+ end
112
+
113
+ @region = @cache.getRegion(@region_name);
114
+ @logger.debug("Created region #{@region.inspect}")
115
+ end # def connect
116
+
117
+ protected
118
+ def continuous_query(query)
119
+ qs = @cache.getQueryService
120
+
121
+ cqAf = CqAttributesFactory.new
122
+ cqAf.addCqListener(self)
123
+ cqa = cqAf.create
124
+
125
+ @logger.debug("Running continuous query #{query}")
126
+ cq = qs.newCq("logstashCQ" + self.object_id.to_s, query, cqa)
127
+
128
+ cq.executeWithInitialResults
129
+ end
130
+
131
+ def register_interest(interest)
132
+ @region.getAttributesMutator.addCacheListener(self)
133
+ @region.registerInterestRegex(interest, InterestResultPolicy::NONE, false, true)
134
+ end
135
+
136
+ def deserialize_message(message)
137
+ if @serialization == "json"
138
+ message ? JSONFormatter.toJSON(message) : "{}"
139
+ else
140
+ message
141
+ end
142
+ end
143
+
144
+ def process_event(event, event_name)
145
+ message = deserialize_message(event)
146
+ @codec.decode(message) do |event|
147
+ decorate(event)
148
+ @logstash_queue << event
149
+ end
150
+ end
151
+
152
+ # multiple interfaces
153
+ def close
154
+ end
155
+
156
+ #
157
+ # CqListener interface
158
+ #
159
+ def onEvent(event)
160
+ key = event.getKey
161
+ newValue = event.getNewValue
162
+ @logger.debug("onEvent #{event.getQueryOperation} #{key} #{newValue}")
163
+
164
+ process_event(event.getNewValue, "onEvent", "gemfire://query/#{key}/#{event.getQueryOperation}")
165
+ end
166
+
167
+ def onError(event)
168
+ @logger.debug("onError #{event}")
169
+ end
170
+
171
+ #
172
+ # CacheListener interface
173
+ #
174
+ protected
175
+ def afterCreate(event)
176
+ regionName = event.getRegion.getName
177
+ key = event.getKey
178
+ newValue = event.getNewValue
179
+ @logger.debug("afterCreate #{regionName} #{key} #{newValue}")
180
+
181
+ process_event(event.getNewValue, "afterCreate", "gemfire://#{regionName}/#{key}/afterCreate")
182
+ end
183
+
184
+ def afterDestroy(event)
185
+ regionName = event.getRegion.getName
186
+ key = event.getKey
187
+ newValue = event.getNewValue
188
+ @logger.debug("afterDestroy #{regionName} #{key} #{newValue}")
189
+
190
+ process_event(nil, "afterDestroy", "gemfire://#{regionName}/#{key}/afterDestroy")
191
+ end
192
+
193
+ def afterUpdate(event)
194
+ regionName = event.getRegion.getName
195
+ key = event.getKey
196
+ oldValue = event.getOldValue
197
+ newValue = event.getNewValue
198
+ @logger.debug("afterUpdate #{regionName} #{key} #{oldValue} -> #{newValue}")
199
+
200
+ process_event(event.getNewValue, "afterUpdate", "gemfire://#{regionName}/#{key}/afterUpdate")
201
+ end
202
+
203
+ def afterRegionLive(event)
204
+ @logger.debug("afterRegionLive #{event}")
205
+ end
206
+
207
+ def afterRegionCreate(event)
208
+ @logger.debug("afterRegionCreate #{event}")
209
+ end
210
+
211
+ def afterRegionClear(event)
212
+ @logger.debug("afterRegionClear #{event}")
213
+ end
214
+
215
+ def afterRegionDestroy(event)
216
+ @logger.debug("afterRegionDestroy #{event}")
217
+ end
218
+
219
+ def afterRegionInvalidate(event)
220
+ @logger.debug("afterRegionInvalidate #{event}")
221
+ end
222
+ end # class LogStash::Inputs::Gemfire
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/threadable"
3
+ require "logstash/namespace"
4
+ require "socket" # for Socket.gethostname
5
+
6
+ # Generate random log events.
7
+ #
8
+ # The general intention of this is to test performance of plugins.
9
+ #
10
+ # An event is generated first
11
+ class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
12
+ config_name "generator"
13
+ milestone 3
14
+
15
+ default :codec, "plain"
16
+
17
+ # The message string to use in the event.
18
+ #
19
+ # If you set this to 'stdin' then this plugin will read a single line from
20
+ # stdin and use that as the message string for every event.
21
+ #
22
+ # Otherwise, this value will be used verbatim as the event message.
23
+ config :message, :validate => :string, :default => "Hello world!"
24
+
25
+ # The lines to emit, in order. This option cannot be used with the 'message'
26
+ # setting.
27
+ #
28
+ # Example:
29
+ #
30
+ # input {
31
+ # generator {
32
+ # lines => [
33
+ # "line 1",
34
+ # "line 2",
35
+ # "line 3"
36
+ # ]
37
+ # }
38
+ #
39
+ # # Emit all lines 3 times.
40
+ # count => 3
41
+ # }
42
+ #
43
+ # The above will emit "line 1" then "line 2" then "line", then "line 1", etc...
44
+ config :lines, :validate => :array
45
+
46
+ # Set how many messages should be generated.
47
+ #
48
+ # The default, 0, means generate an unlimited number of events.
49
+ config :count, :validate => :number, :default => 0
50
+
51
+ public
52
+ def register
53
+ @host = Socket.gethostname
54
+ @count = @count.first if @count.is_a?(Array)
55
+ @lines = [@message] if @lines.nil?
56
+ end # def register
57
+
58
+ def run(queue)
59
+ number = 0
60
+
61
+ if @message == "stdin"
62
+ @logger.info("Generator plugin reading a line from stdin")
63
+ @message = $stdin.readline
64
+ @logger.debug("Generator line read complete", :message => @message)
65
+ end
66
+
67
+ while !finished? && (@count <= 0 || number < @count)
68
+ @lines.each do |line|
69
+ @codec.decode(line.clone) do |event|
70
+ decorate(event)
71
+ event["host"] = @host
72
+ event["sequence"] = number
73
+ queue << event
74
+ end
75
+ end
76
+ number += 1
77
+ end # loop
78
+
79
+ if @codec.respond_to?(:flush)
80
+ @codec.flush do |event|
81
+ decorate(event)
82
+ event["host"] = @host
83
+ queue << event
84
+ end
85
+ end
86
+ end # def run
87
+
88
+ public
89
+ def teardown
90
+ @codec.flush do |event|
91
+ decorate(event)
92
+ event["host"] = @host
93
+ queue << event
94
+ end
95
+ finished
96
+ end # def teardown
97
+ end # class LogStash::Inputs::Generator