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,32 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Strip everything but punctuation from a field and store the remainder in the
6
+ # a separate field. This is often used for fingerprinting log events.
7
+ class LogStash::Filters::Punct < LogStash::Filters::Base
8
+ config_name "punct"
9
+ milestone 1
10
+
11
+ # The field reference to use for punctuation stripping
12
+ config :source, :validate => :string, :default => "message"
13
+
14
+ # The field to store the result.
15
+ config :target, :validate => :string, :default => "punct"
16
+
17
+ public
18
+ def register
19
+ # Nothing to do
20
+ end # def register
21
+
22
+ public
23
+ def filter(event)
24
+ return unless filter?(event)
25
+
26
+ original_value = event[@source]
27
+
28
+ # If for some reason the field is an array of values, take the first only.
29
+ original_value = original_value.first if original_value.is_a?(Array)
30
+ event[@target] = original_value.tr('A-Za-z0-9 \t','')
31
+ end # def filter
32
+ end # class LogStash::Filters::Punct
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+ # parallel request filter
3
+ #
4
+ # This filter will separate out the parallel requests into separate events.
5
+ #
6
+
7
+ require "logstash/filters/base"
8
+ require "logstash/namespace"
9
+ require "set"
10
+
11
+ class LogStash::Filters::Railsparallelrequest < LogStash::Filters::Base
12
+
13
+ config_name "railsparallelrequest"
14
+ milestone 1
15
+
16
+ public
17
+ def initialize(config = {})
18
+ super
19
+ @threadsafe = false
20
+ @pending = Hash.new
21
+ @last_event = nil
22
+ @recently_error = nil
23
+ @last_uuid = nil
24
+ end
25
+
26
+ def register ;end
27
+
28
+ def filter(event)
29
+ return unless filter?(event)
30
+ return if event["tags"].include? self.class.config_name
31
+
32
+ event["tags"] << self.class.config_name
33
+
34
+ line = event["message"]
35
+
36
+ if line =~ /^\[(.*?)\]/
37
+ uuid = $1
38
+ event["uuid"] = uuid
39
+ if @recently_error
40
+ if @last_uuid == uuid
41
+ merge_events(@recently_error, event, uuid)
42
+ event.cancel
43
+ return
44
+ else
45
+ @recently_error.uncancel
46
+ yield @recently_error
47
+ @recently_error = nil
48
+ end
49
+ end
50
+
51
+ @last_uuid = uuid
52
+ if @pending[uuid]
53
+ merge_events(@pending[uuid], event, uuid)
54
+ else
55
+ @pending[uuid] = event
56
+ end
57
+ @last_event = @pending[uuid]
58
+
59
+ if line =~ /Error/
60
+ event.overwrite(@pending[uuid].to_hash)
61
+ @pending.delete uuid
62
+ @recently_error = event
63
+ elsif line =~ /Completed/
64
+ event.overwrite(@pending[uuid])
65
+ @pending.delete uuid
66
+ return
67
+ end
68
+ event.cancel
69
+ elsif @last_event
70
+ @last_event.append(event)
71
+ event.cancel
72
+ end
73
+ end
74
+
75
+ def flush
76
+ events = @pending.values.each { |event| event.uncancel }
77
+ @pending.clear
78
+ events
79
+ end
80
+
81
+ private
82
+ def merge_events(dest, source, uuid)
83
+ source["message"].gsub!("[#{uuid}]", "")
84
+ dest.append(source)
85
+ end
86
+ end
@@ -0,0 +1,142 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # This filter is used to check that certain fields are within expected size/length ranges.
6
+ # Supported types are numbers and strings.
7
+ # Numbers are checked to be within numeric value range.
8
+ # Strings are checked to be within string length range.
9
+ # More than one range can be specified for same fieldname, actions will be applied incrementally.
10
+ # When field value is within a specified range an action will be taken.
11
+ # Supported actions are drop event, add tag, or add field with specified value.
12
+ #
13
+ # Example use cases are for histogram-like tagging of events
14
+ # or for finding anomaly values in fields or too big events that should be dropped.
15
+
16
+ class LogStash::Filters::Range < LogStash::Filters::Base
17
+ config_name "range"
18
+ milestone 1
19
+
20
+ # An array of field, min, max, action tuples.
21
+ # Example:
22
+ #
23
+ # filter {
24
+ # %PLUGIN% {
25
+ # ranges => [ "message", 0, 10, "tag:short",
26
+ # "message", 11, 100, "tag:medium",
27
+ # "message", 101, 1000, "tag:long",
28
+ # "message", 1001, 1e1000, "drop",
29
+ # "duration", 0, 100, "field:latency:fast",
30
+ # "duration", 101, 200, "field:latency:normal",
31
+ # "duration", 201, 1000, "field:latency:slow",
32
+ # "duration", 1001, 1e1000, "field:latency:outlier",
33
+ # "requests", 0, 10, "tag:too_few_%{host}_requests" ]
34
+ # }
35
+ # }
36
+ #
37
+ # Supported actions are drop tag or field with specified value.
38
+ # Added tag names and field names and field values can have %{dynamic} values.
39
+ #
40
+ # TODO(piavlo): The action syntax is ugly at the moment due to logstash grammar limitations - arrays grammar should support
41
+ # TODO(piavlo): simple not nested hashses as values in addition to numaric and string values to prettify the syntax.
42
+ config :ranges, :validate => :array, :default => []
43
+
44
+ # Negate the range match logic, events should be outsize of the specified range to match.
45
+ config :negate, :validate => :boolean, :default => false
46
+
47
+ public
48
+ def register
49
+ if @ranges.length % 4 != 0
50
+ raise "#{self.class.name}: ranges array should consist of 4 field tuples (field,min,max,action)"
51
+ end
52
+
53
+ @range_tuples = {}
54
+
55
+ while !@ranges.empty?
56
+ fieldname, min, max, action = @ranges.shift(4)
57
+
58
+ raise "#{self.class.name}: range field name value should be a string" if !fieldname.is_a?(String)
59
+ raise "#{self.class.name}: range min value should be a number" if !min.is_a?(Integer) and !min.is_a?(Float)
60
+ raise "#{self.class.name}: range max value should be a number" if !max.is_a?(Integer) and !max.is_a?(Float)
61
+ raise "#{self.class.name}: range action value should be a string" if !action.is_a?(String)
62
+
63
+ action = action.split(':')
64
+
65
+ case action.first
66
+ when "drop"
67
+ raise "#{self.class.name}: drop action does not accept any parameters" unless action.length == 1
68
+ action = { :name => :drop }
69
+ when "tag"
70
+ raise "#{self.class.name}: tag action accepts exactly one arg which is a tag name" unless action.length == 2
71
+ action = { :name => :add_tag, :tag => action.last }
72
+ when "field"
73
+ raise "#{self.class.name}: field action accepts exactly 2 args which are a field name and field value" unless action.length == 3
74
+ if action.last == action.last.to_i.to_s
75
+ value = action.last.to_i
76
+ elsif action.last == action.last.to_f.to_s
77
+ value = action.last.to_f
78
+ else
79
+ value = action.last
80
+ end
81
+ action = { :name => :add_field, :field => action[1], :value => value }
82
+ else
83
+ raise "#{self.class.name}: unsupported action #{action}"
84
+ end
85
+
86
+ @range_tuples[fieldname] ||= []
87
+ @range_tuples[fieldname] << { :min => min, :max => max, :action => action }
88
+ end
89
+ end # def register
90
+
91
+
92
+ public
93
+ def filter(event)
94
+ return unless filter?(event)
95
+
96
+ @range_tuples.each_key do |fieldname|
97
+ if event.include?(fieldname)
98
+ @range_tuples[fieldname].each do |range|
99
+ matched = false
100
+
101
+ field = event[fieldname]
102
+ case field
103
+ when Integer
104
+ matched = field.between?(range[:min], range[:max])
105
+ when Float
106
+ matched = field.between?(range[:min], range[:max])
107
+ when String
108
+ matched = field.length.between?(range[:min], range[:max])
109
+ else
110
+ @logger.warn("#{self.class.name}: action field value has unsupported type")
111
+ end
112
+
113
+ matched = !matched if @negate
114
+ next unless matched
115
+
116
+ case range[:action][:name]
117
+ when :drop
118
+ @logger.debug? and @logger.debug("#{self.class.name}: dropping event due to range match", :event => event)
119
+ event.cancel
120
+ return
121
+ when :add_tag
122
+ @logger.debug? and @logger.debug("#{self.class.name}: adding tag due to range match",
123
+ :event => event, :tag => range[:action][:tag] )
124
+ event.tag(event.sprintf(range[:action][:tag]))
125
+ when :add_field
126
+ @logger.debug? and @logger.debug("#{self.class.name}: adding field due to range match",
127
+ :event => event, :field => range[:action][:field], :value => range[:action][:value])
128
+ new_field = event.sprintf(range[:action][:field])
129
+ if event[new_field]
130
+ event[new_field] = [event[new_field]] if !event[new_field].is_a?(Array)
131
+ event[new_field] << event.sprintf(range[:action][:value])
132
+ else
133
+ event[new_field] = range[:action][:value].is_a?(String) ? event.sprintf(range[:action][:value]) : range[:action][:value]
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+ filter_matched(event)
141
+ end # def filter
142
+ end # class LogStash::Filters::Range
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Execute ruby code.
6
+ #
7
+ # For example, to cancel 90% of events, you can do this:
8
+ #
9
+ # filter {
10
+ # ruby {
11
+ # # Cancel 90% of events
12
+ # code => "event.cancel if rand <= 0.90"
13
+ # }
14
+ # }
15
+ #
16
+ class LogStash::Filters::Ruby < LogStash::Filters::Base
17
+ config_name "ruby"
18
+ milestone 1
19
+
20
+ # Any code to execute at logstash startup-time
21
+ config :init, :validate => :string
22
+
23
+ # The code to execute for every event.
24
+ # You will have an 'event' variable available that is the event itself.
25
+ config :code, :validate => :string, :required => true
26
+
27
+ public
28
+ def register
29
+ # TODO(sissel): Compile the ruby code
30
+ eval(@init, binding, "(ruby filter init)") if @init
31
+ eval("@codeblock = lambda { |event| #{@code} }", binding, "(ruby filter code)")
32
+ end # def register
33
+
34
+ public
35
+ def filter(event)
36
+ return unless filter?(event)
37
+
38
+ @codeblock.call(event)
39
+
40
+ filter_matched(event)
41
+ end # def filter
42
+ end # class LogStash::Filters::Ruby
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Sleep a given amount of time. This will cause logstash
6
+ # to stall for the given amount of time. This is useful
7
+ # for rate limiting, etc.
8
+ #
9
+ class LogStash::Filters::Sleep < LogStash::Filters::Base
10
+ config_name "sleep"
11
+ milestone 1
12
+
13
+ # The length of time to sleep, in seconds, for every event.
14
+ #
15
+ # This can be a number (eg, 0.5), or a string (eg, "%{foo}")
16
+ # The second form (string with a field value) is useful if
17
+ # you have an attribute of your event that you want to use
18
+ # to indicate the amount of time to sleep.
19
+ #
20
+ # Example:
21
+ #
22
+ # filter {
23
+ # sleep {
24
+ # # Sleep 1 second for every event.
25
+ # time => "1"
26
+ # }
27
+ # }
28
+ config :time, :validate => :string
29
+
30
+ # Sleep on every N'th. This option is ignored in replay mode.
31
+ #
32
+ # Example:
33
+ #
34
+ # filter {
35
+ # sleep {
36
+ # time => "1" # Sleep 1 second
37
+ # every => 10 # on every 10th event
38
+ # }
39
+ # }
40
+ config :every, :validate => :string, :default => 1
41
+
42
+ # Enable replay mode.
43
+ #
44
+ # Replay mode tries to sleep based on timestamps in each event.
45
+ #
46
+ # The amount of time to sleep is computed by subtracting the
47
+ # previous event's timestamp from the current event's timestamp.
48
+ # This helps you replay events in the same timeline as original.
49
+ #
50
+ # If you specify a `time` setting as well, this filter will
51
+ # use the `time` value as a speed modifier. For example,
52
+ # a `time` value of 2 will replay at double speed, while a
53
+ # value of 0.25 will replay at 1/4th speed.
54
+ #
55
+ # For example:
56
+ #
57
+ # filter {
58
+ # sleep {
59
+ # time => 2
60
+ # replay => true
61
+ # }
62
+ # }
63
+ #
64
+ # The above will sleep in such a way that it will perform
65
+ # replay 2-times faster than the original time speed.
66
+ config :replay, :validate => :boolean, :default => false
67
+
68
+ public
69
+ def register
70
+ if @replay && @time.nil?
71
+ # Default time multiplier is 1 when replay is set.
72
+ @time = 1
73
+ end
74
+ if @time.nil?
75
+ raise ArgumentError, "Missing required parameter 'time' for input/eventlog"
76
+ end
77
+ @count = 0
78
+ end # def register
79
+
80
+ public
81
+ def filter(event)
82
+ return unless filter?(event)
83
+ @count += 1
84
+
85
+ case @time
86
+ when Fixnum, Float; time = @time
87
+ when nil; # nothing
88
+ else; time = event.sprintf(@time).to_f
89
+ end
90
+
91
+ if @replay
92
+ clock = event["@timestamp"].to_f
93
+ if @last_clock
94
+ delay = clock - @last_clock
95
+ time = delay/time
96
+ if time > 0
97
+ @logger.debug? && @logger.debug("Sleeping", :delay => time)
98
+ sleep(time)
99
+ end
100
+ end
101
+ @last_clock = clock
102
+ else
103
+ if @count >= @every
104
+ @count = 0
105
+ @logger.debug? && @logger.debug("Sleeping", :delay => time)
106
+ sleep(time)
107
+ end
108
+ end
109
+ filter_matched(event)
110
+ end # def filter
111
+ end # class LogStash::Filters::Sleep
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # The split filter is for splitting multiline messages into separate events.
6
+ #
7
+ # An example use case of this filter is for taking output from the 'exec' input
8
+ # which emits one event for the whole output of a command and splitting that
9
+ # output by newline - making each line an event.
10
+ #
11
+ # The end result of each split is a complete copy of the event
12
+ # with only the current split section of the given field changed.
13
+ class LogStash::Filters::Split < LogStash::Filters::Base
14
+
15
+ config_name "split"
16
+ milestone 2
17
+
18
+ # The string to split on. This is usually a line terminator, but can be any
19
+ # string.
20
+ config :terminator, :validate => :string, :default => "\n"
21
+
22
+ # The field which value is split by the terminator
23
+ config :field, :validate => :string, :default => "message"
24
+
25
+ public
26
+ def register
27
+ # Nothing to do
28
+ end # def register
29
+
30
+ public
31
+ def filter(event)
32
+ return unless filter?(event)
33
+
34
+ events = []
35
+
36
+ original_value = event[@field]
37
+
38
+ # If for some reason the field is an array of values, take the first only.
39
+ original_value = original_value.first if original_value.is_a?(Array)
40
+
41
+ # Using -1 for 'limit' on String#split makes ruby not drop trailing empty
42
+ # splits.
43
+ splits = original_value.split(@terminator, -1)
44
+
45
+ # Skip filtering if splitting this event resulted in only one thing found.
46
+ return if splits.length == 1
47
+ #or splits[1].empty?
48
+
49
+ splits.each do |value|
50
+ next if value.empty?
51
+
52
+ event_split = event.clone
53
+ @logger.debug("Split event", :value => value, :field => @field)
54
+ event_split[@field] = value
55
+ filter_matched(event_split)
56
+
57
+ # Push this new event onto the stack at the LogStash::FilterWorker
58
+ yield event_split
59
+ end
60
+
61
+ # Cancel this event, we'll use the newly generated ones above.
62
+ event.cancel
63
+ end # def filter
64
+ end # class LogStash::Filters::Split