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,18 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+ require "logstash/inputs/base"
4
+
5
+ # This is the threadable class for logstash inputs.
6
+ # Use this class in your inputs if it can support multiple threads
7
+ class LogStash::Inputs::Threadable < LogStash::Inputs::Base
8
+
9
+ # Set this to the number of threads you want this input to spawn.
10
+ # This is the same as declaring the input multiple times
11
+ config :threads, :validate => :number, :default => 1
12
+
13
+ def initialize(params)
14
+ super
15
+ @threadable = true
16
+ end
17
+
18
+ end # class LogStash::Inputs::Threadable
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "json"
5
+
6
+ # Read events from the twitter streaming api.
7
+ class LogStash::Inputs::Twitter < LogStash::Inputs::Base
8
+
9
+ config_name "twitter"
10
+ milestone 1
11
+
12
+ # Your twitter app's consumer key
13
+ #
14
+ # Don't know what this is? You need to create an "application"
15
+ # on twitter, see this url: <https://dev.twitter.com/apps/new>
16
+ config :consumer_key, :validate => :string, :required => true
17
+
18
+ # Your twitter app's consumer secret
19
+ #
20
+ # If you don't have one of these, you can create one by
21
+ # registering a new application with twitter:
22
+ # <https://dev.twitter.com/apps/new>
23
+ config :consumer_secret, :validate => :password, :required => true
24
+
25
+ # Your oauth token.
26
+ #
27
+ # To get this, login to twitter with whatever account you want,
28
+ # then visit <https://dev.twitter.com/apps>
29
+ #
30
+ # Click on your app (used with the consumer_key and consumer_secret settings)
31
+ # Then at the bottom of the page, click 'Create my access token' which
32
+ # will create an oauth token and secret bound to your account and that
33
+ # application.
34
+ config :oauth_token, :validate => :string, :required => true
35
+
36
+ # Your oauth token secret.
37
+ #
38
+ # To get this, login to twitter with whatever account you want,
39
+ # then visit <https://dev.twitter.com/apps>
40
+ #
41
+ # Click on your app (used with the consumer_key and consumer_secret settings)
42
+ # Then at the bottom of the page, click 'Create my access token' which
43
+ # will create an oauth token and secret bound to your account and that
44
+ # application.
45
+ config :oauth_token_secret, :validate => :password, :required => true
46
+
47
+ # Any keywords to track in the twitter stream
48
+ config :keywords, :validate => :array, :required => true
49
+
50
+ public
51
+ def register
52
+ require "twitter"
53
+ @client = Twitter::Streaming::Client.new do |c|
54
+ c.consumer_key = @consumer_key
55
+ c.consumer_secret = @consumer_secret.value
56
+ c.access_token = @oauth_token
57
+ c.access_token_secret = @oauth_token_secret.value
58
+ end
59
+ end
60
+
61
+ public
62
+ def run(queue)
63
+ @logger.info("Starting twitter tracking", :keywords => @keywords)
64
+ @client.filter(:track => @keywords.join(",")) do |tweet|
65
+ @logger.info? && @logger.info("Got tweet", :user => tweet.user.screen_name, :text => tweet.text)
66
+ event = LogStash::Event.new(
67
+ "@timestamp" => tweet.created_at.gmtime,
68
+ "message" => tweet.full_text,
69
+ "user" => tweet.user.screen_name,
70
+ "client" => tweet.source,
71
+ "retweeted" => tweet.retweeted?,
72
+ "source" => "http://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id}"
73
+ )
74
+ decorate(event)
75
+ event["in-reply-to"] = tweet.in_reply_to_status_id if tweet.reply?
76
+ unless tweet.urls.empty?
77
+ event["urls"] = tweet.urls.map(&:expanded_url).map(&:to_s)
78
+ end
79
+ queue << event
80
+ end # client.filter
81
+ end # def run
82
+ end # class LogStash::Inputs::Twitter
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ require "date"
3
+ require "logstash/inputs/base"
4
+ require "logstash/namespace"
5
+ require "socket"
6
+
7
+ # Read messages as events over the network via udp.
8
+ #
9
+ class LogStash::Inputs::Udp < LogStash::Inputs::Base
10
+ config_name "udp"
11
+ milestone 2
12
+
13
+ default :codec, "plain"
14
+
15
+ # The address to listen on
16
+ config :host, :validate => :string, :default => "0.0.0.0"
17
+
18
+ # The port to listen on. Remember that ports less than 1024 (privileged
19
+ # ports) may require root or elevated privileges to use.
20
+ config :port, :validate => :number, :required => true
21
+
22
+ # Buffer size
23
+ config :buffer_size, :validate => :number, :default => 8192
24
+
25
+ public
26
+ def initialize(params)
27
+ super
28
+ BasicSocket.do_not_reverse_lookup = true
29
+ end # def initialize
30
+
31
+ public
32
+ def register
33
+ @udp = nil
34
+ end # def register
35
+
36
+ public
37
+ def run(output_queue)
38
+ begin
39
+ # udp server
40
+ udp_listener(output_queue)
41
+ rescue LogStash::ShutdownSignal
42
+ # do nothing, shutdown was requested.
43
+ rescue => e
44
+ @logger.warn("UDP listener died", :exception => e, :backtrace => e.backtrace)
45
+ sleep(5)
46
+ retry
47
+ end # begin
48
+ end # def run
49
+
50
+ private
51
+ def udp_listener(output_queue)
52
+ @logger.info("Starting UDP listener", :address => "#{@host}:#{@port}")
53
+
54
+ if @udp && ! @udp.closed?
55
+ @udp.close
56
+ end
57
+
58
+ @udp = UDPSocket.new(Socket::AF_INET)
59
+ @udp.bind(@host, @port)
60
+
61
+ loop do
62
+ payload, client = @udp.recvfrom(@buffer_size)
63
+ @codec.decode(payload) do |event|
64
+ decorate(event)
65
+ event["host"] = client[3]
66
+ output_queue << event
67
+ end
68
+ end
69
+ ensure
70
+ if @udp
71
+ @udp.close_read rescue nil
72
+ @udp.close_write rescue nil
73
+ end
74
+ end # def udp_listener
75
+
76
+ public
77
+ def teardown
78
+ @udp.close if @udp && !@udp.closed?
79
+ end
80
+
81
+ end # class LogStash::Inputs::Udp
@@ -0,0 +1,163 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Read events over a UNIX socket.
7
+ #
8
+ # Like stdin and file inputs, each event is assumed to be one line of text.
9
+ #
10
+ # Can either accept connections from clients or connect to a server,
11
+ # depending on `mode`.
12
+ class LogStash::Inputs::Unix < LogStash::Inputs::Base
13
+ class Interrupted < StandardError; end
14
+ config_name "unix"
15
+ milestone 2
16
+
17
+ default :codec, "line"
18
+
19
+ # When mode is `server`, the path to listen on.
20
+ # When mode is `client`, the path to connect to.
21
+ config :path, :validate => :string, :required => true
22
+
23
+ # Remove socket file in case of EADDRINUSE failure
24
+ config :force_unlink, :validate => :boolean, :default => false
25
+
26
+ # The 'read' timeout in seconds. If a particular connection is idle for
27
+ # more than this timeout period, we will assume it is dead and close it.
28
+ #
29
+ # If you never want to timeout, use -1.
30
+ config :data_timeout, :validate => :number, :default => -1
31
+
32
+ # Mode to operate in. `server` listens for client connections,
33
+ # `client` connects to a server.
34
+ config :mode, :validate => ["server", "client"], :default => "server"
35
+
36
+ def initialize(*args)
37
+ super(*args)
38
+ end # def initialize
39
+
40
+ public
41
+ def register
42
+ require "socket"
43
+ require "timeout"
44
+
45
+ if server?
46
+ @logger.info("Starting unix input listener", :address => "#{@path}", :force_unlink => "#{@force_unlink}")
47
+ begin
48
+ @server_socket = UNIXServer.new(@path)
49
+ rescue Errno::EADDRINUSE, IOError
50
+ if @force_unlink
51
+ File.unlink(@path)
52
+ begin
53
+ @server_socket = UNIXServer.new(@path)
54
+ return
55
+ rescue Errno::EADDRINUSE, IOError
56
+ @logger.error("!!!Could not start UNIX server: Address in use",
57
+ :path => @path)
58
+ raise
59
+ end
60
+ end
61
+ @logger.error("Could not start UNIX server: Address in use",
62
+ :path => @path)
63
+ raise
64
+ end
65
+ end
66
+ end # def register
67
+
68
+ private
69
+ def handle_socket(socket, output_queue)
70
+ begin
71
+ hostname = Socket.gethostname
72
+ loop do
73
+ buf = nil
74
+ # NOTE(petef): the timeout only hits after the line is read
75
+ # or socket dies
76
+ # TODO(sissel): Why do we have a timeout here? What's the point?
77
+ if @data_timeout == -1
78
+ buf = socket.readpartial(16384)
79
+ else
80
+ Timeout::timeout(@data_timeout) do
81
+ buf = socket.readpartial(16384)
82
+ end
83
+ end
84
+ @codec.decode(buf) do |event|
85
+ decorate(event)
86
+ event["host"] = hostname
87
+ event["path"] = @path
88
+ output_queue << event
89
+ end
90
+ end # loop do
91
+ rescue => e
92
+ @logger.debug("Closing connection", :path => @path,
93
+ :exception => e, :backtrace => e.backtrace)
94
+ rescue Timeout::Error
95
+ @logger.debug("Closing connection after read timeout",
96
+ :path => @path)
97
+ end # begin
98
+
99
+ ensure
100
+ begin
101
+ socket.close
102
+ rescue IOError
103
+ #pass
104
+ end # begin
105
+ end
106
+
107
+ private
108
+ def server?
109
+ @mode == "server"
110
+ end # def server?
111
+
112
+ public
113
+ def run(output_queue)
114
+ if server?
115
+ @thread = Thread.current
116
+ @client_threads = []
117
+ loop do
118
+ # Start a new thread for each connection.
119
+ begin
120
+ @client_threads << Thread.start(@server_socket.accept) do |s|
121
+ # TODO(sissel): put this block in its own method.
122
+
123
+ @logger.debug("Accepted connection",
124
+ :server => "#{@path}")
125
+ begin
126
+ handle_socket(s, output_queue)
127
+ rescue Interrupted
128
+ s.close rescue nil
129
+ end
130
+ end # Thread.start
131
+ rescue IOError, Interrupted
132
+ if @interrupted
133
+ # Intended shutdown, get out of the loop
134
+ @server_socket.close
135
+ @client_threads.each do |thread|
136
+ thread.raise(IOError.new)
137
+ end
138
+ break
139
+ else
140
+ # Else it was a genuine IOError caused by something else, so propagate it up..
141
+ raise
142
+ end
143
+ end
144
+ end # loop
145
+ else
146
+ loop do
147
+ client_socket = UNIXSocket.new(@path)
148
+ client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
149
+ @logger.debug("Opened connection", :client => @path)
150
+ handle_socket(client_socket, output_queue)
151
+ end # loop
152
+ end
153
+ end # def run
154
+
155
+ public
156
+ def teardown
157
+ if server?
158
+ File.unlink(@path)
159
+ @interrupted = true
160
+ @thread.raise(Interrupted.new)
161
+ end
162
+ end # def teardown
163
+ end # class LogStash::Inputs::Unix
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/threadable"
3
+ require "logstash/namespace"
4
+ require "socket" # for Socket.gethostname
5
+
6
+ # Read from varnish cache's shared memory log
7
+ class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
8
+ config_name "varnishlog"
9
+ milestone 1
10
+
11
+ public
12
+ def register
13
+ require 'varnish'
14
+ @vd = Varnish::VSM.VSM_New
15
+ Varnish::VSL.VSL_Setup(@vd)
16
+ Varnish::VSL.VSL_Open(@vd, 1)
17
+
18
+ end # def register
19
+
20
+ def run(queue)
21
+ @q = queue
22
+ @hostname = Socket.gethostname
23
+ Varnish::VSL.VSL_Dispatch(@vd, self.method(:cb).to_proc, FFI::MemoryPointer.new(:pointer))
24
+ end # def run
25
+
26
+ private
27
+ def cb(priv, tag, fd, len, spec, ptr, bitmap)
28
+ begin
29
+ str = ptr.read_string(len)
30
+ event = LogStash::Event.new("message" => str, "host" => @host)
31
+ decorate(event)
32
+ event["varnish_tag"] = tag
33
+ event["varnish_fd"] = fd
34
+ event["varnish_spec"] = spec
35
+ event["varnish_bitmap"] = bitmap
36
+ @q << event
37
+ rescue => e
38
+ @logger.warn("varnishlog exception: #{e.inspect}")
39
+ ensure
40
+ return 0
41
+ end
42
+ end
43
+
44
+ public
45
+ def teardown
46
+ finished
47
+ end # def teardown
48
+ end # class LogStash::Inputs::Stdin
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Read events over the websocket protocol.
7
+ class LogStash::Inputs::Websocket < LogStash::Inputs::Base
8
+ config_name "websocket"
9
+ milestone 1
10
+
11
+ default :codec, "json"
12
+
13
+ # The url to connect to or serve from
14
+ config :url, :validate => :string, :default => "0.0.0.0"
15
+
16
+ # Operate as a client or a server.
17
+ #
18
+ # Client mode causes this plugin to connect as a websocket client
19
+ # to the URL given. It expects to receive events as websocket messages.
20
+ #
21
+ # (NOT IMPLEMENTED YET) Server mode causes this plugin to listen on
22
+ # the given URL for websocket clients. It expects to receive events
23
+ # as websocket messages from these clients.
24
+ config :mode, :validate => [ "server", "client" ], :default => "client"
25
+
26
+ def register
27
+ require "ftw"
28
+ end # def register
29
+
30
+ public
31
+ def run(output_queue)
32
+ # TODO(sissel): Implement server mode.
33
+ agent = FTW::Agent.new
34
+ begin
35
+ websocket = agent.websocket!(@url)
36
+ websocket.each do |payload|
37
+ @codec.decode(payload) do |event|
38
+ decorate(event)
39
+ output_queue << event
40
+ end
41
+ end
42
+ rescue => e
43
+ @logger.warn("websocket input client threw exception, restarting",
44
+ :exception => e)
45
+ sleep(1)
46
+ retry
47
+ end # begin
48
+ end # def run
49
+
50
+ end # class LogStash::Inputs::Websocket