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,48 @@
1
+ require "test_utils"
2
+
3
+ describe "parse syslog", :if => RUBY_ENGINE == "jruby" do
4
+ extend LogStash::RSpec
5
+
6
+ config <<-'CONFIG'
7
+ filter {
8
+ grok {
9
+ type => "syslog"
10
+ singles => true
11
+ pattern => [ "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{PROG:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
12
+ add_field => [ "received_at", "%{@timestamp}" ]
13
+ add_field => [ "received_from", "%{source_host}" ]
14
+ }
15
+ syslog_pri {
16
+ type => "syslog"
17
+ }
18
+ date {
19
+ type => "syslog"
20
+ match => ["syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
21
+ }
22
+ mutate {
23
+ type => "syslog"
24
+ exclude_tags => "_grokparsefailure"
25
+ replace => [ "source_host", "%{syslog_hostname}" ]
26
+ replace => [ "message", "%{syslog_message}" ]
27
+ }
28
+ mutate {
29
+ type => "syslog"
30
+ remove => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
31
+ }
32
+ }
33
+ CONFIG
34
+
35
+ sample("message" => "<164>Oct 26 15:19:25 1.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.3/43434 dst outside:192.168.0.1/53 by access-group \"acl_drac\" [0x0, 0x0]", "type" => "syslog") do
36
+ insist { subject["type"] } == "syslog"
37
+ insist { subject["tags"] }.nil?
38
+ insist { subject["syslog_pri"] } == "164"
39
+ end
40
+
41
+ # Single digit day
42
+ sample("message" => "<164>Oct 6 15:19:25 1.2.3.4 %ASA-4-106023: Deny udp src DRAC:10.1.2.3/43434 dst outside:192.168.0.1/53 by access-group \"acl_drac\" [0x0, 0x0]", "type" => "syslog") do
43
+ insist { subject["type"] } == "syslog"
44
+ insist { subject["tags"] }.nil?
45
+ insist { subject["syslog_pri"] } == "164"
46
+ #insist { subject.timestamp } == "2012-10-26T15:19:25.000Z"
47
+ end
48
+ end
@@ -0,0 +1,96 @@
1
+ require "test_utils"
2
+ require "logstash/filters/alter"
3
+
4
+ describe LogStash::Filters::Alter do
5
+ extend LogStash::RSpec
6
+
7
+ describe "condrewrite with static values" do
8
+ config <<-CONFIG
9
+ filter {
10
+ alter {
11
+ condrewrite => ["rewrite-me", "hello", "goodbye"]
12
+ }
13
+ }
14
+ CONFIG
15
+
16
+ sample("rewrite-me" => "hello") do
17
+ insist { subject["rewrite-me"] } == "goodbye"
18
+ end
19
+
20
+ sample("rewrite-me" => "greetings") do
21
+ insist { subject["rewrite-me"] } == "greetings"
22
+ end
23
+ end
24
+
25
+ describe "condrewrite with dynamic values" do
26
+ config <<-CONFIG
27
+ filter {
28
+ alter {
29
+ condrewrite => ["rewrite-me", "%{test}", "%{rewrite-value}"]
30
+ }
31
+ }
32
+ CONFIG
33
+
34
+ sample("rewrite-me" => "hello", "test" => "hello",
35
+ "rewrite-value" => "goodbye") do
36
+ insist { subject["rewrite-me"] } == "goodbye"
37
+ end
38
+
39
+ sample("rewrite-me" => "hello") do
40
+ insist { subject["rewrite-me"] } == "hello"
41
+ end
42
+
43
+ sample("rewrite-me" => "%{test}") do
44
+ insist { subject["rewrite-me"] } == "%{rewrite-value}"
45
+ end
46
+
47
+ sample("rewrite-me" => "hello", "test" => "hello") do
48
+ insist { subject["rewrite-me"] } == "%{rewrite-value}"
49
+ end
50
+
51
+ sample("rewrite-me" => "greetings", "test" => "hello") do
52
+ insist { subject["rewrite-me"] } == "greetings"
53
+ end
54
+ end
55
+
56
+ describe "condrewriteother" do
57
+ config <<-CONFIG
58
+ filter {
59
+ alter {
60
+ condrewriteother => ["test-me", "hello", "rewrite-me","goodbye"]
61
+ }
62
+ }
63
+ CONFIG
64
+
65
+ sample("test-me" => "hello") do
66
+ insist { subject["rewrite-me"] } == "goodbye"
67
+ end
68
+
69
+ sample("test-me" => "hello", "rewrite-me" => "hello2") do
70
+ insist { subject["rewrite-me"] } == "goodbye"
71
+ end
72
+
73
+ sample("test-me" => "greetings") do
74
+ insist { subject["rewrite-me"] }.nil?
75
+ end
76
+
77
+ sample("test-me" => "greetings",
78
+ "rewrite-me" => "hello2") do
79
+ insist { subject["rewrite-me"] } == "hello2"
80
+ end
81
+ end
82
+
83
+ describe "coalesce" do
84
+ config <<-CONFIG
85
+ filter {
86
+ alter {
87
+ coalesce => ["coalesce-me", "%{non-existing-field}", "mydefault"]
88
+ }
89
+ }
90
+ CONFIG
91
+
92
+ sample("coalesce-me" => "Hello") do
93
+ insist { subject["coalesce-me"] } == "mydefault"
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,189 @@
1
+ require "test_utils"
2
+ require "logstash/filters/anonymize"
3
+
4
+ describe LogStash::Filters::Anonymize do
5
+ extend LogStash::RSpec
6
+
7
+ describe "anonymize ipaddress with IPV4_NETWORK algorithm" do
8
+ # The logstash config goes here.
9
+ # At this time, only filters are supported.
10
+ config <<-CONFIG
11
+ filter {
12
+ anonymize {
13
+ fields => ["clientip"]
14
+ algorithm => "IPV4_NETWORK"
15
+ key => 24
16
+ }
17
+ }
18
+ CONFIG
19
+
20
+ sample("clientip" => "233.255.13.44") do
21
+ insist { subject["clientip"] } == "233.255.13.0"
22
+ end
23
+ end
24
+
25
+ describe "anonymize string with MURMUR3 algorithm" do
26
+ config <<-CONFIG
27
+ filter {
28
+ anonymize {
29
+ fields => ["clientip"]
30
+ algorithm => "MURMUR3"
31
+ key => ""
32
+ }
33
+ }
34
+ CONFIG
35
+
36
+ sample("clientip" => "123.52.122.33") do
37
+ insist { subject["clientip"] } == 1541804874
38
+ end
39
+ end
40
+
41
+ describe "anonymize string with SHA1 alogrithm" do
42
+ # The logstash config goes here.
43
+ # At this time, only filters are supported.
44
+ config <<-CONFIG
45
+ filter {
46
+ anonymize {
47
+ fields => ["clientip"]
48
+ key => "longencryptionkey"
49
+ algorithm => 'SHA1'
50
+ }
51
+ }
52
+ CONFIG
53
+
54
+ sample("clientip" => "123.123.123.123") do
55
+ insist { subject["clientip"] } == "fdc60acc4773dc5ac569ffb78fcb93c9630797f4"
56
+ end
57
+ end
58
+
59
+ # HMAC-SHA224 isn't implemented in JRuby OpenSSL
60
+ #describe "anonymize string with SHA224 alogrithm" do
61
+ # The logstash config goes here.
62
+ # At this time, only filters are supported.
63
+ #config <<-CONFIG
64
+ #filter {
65
+ #anonymize {
66
+ #fields => ["clientip"]
67
+ #key => "longencryptionkey"
68
+ #algorithm => 'SHA224'
69
+ #}
70
+ #}
71
+ #CONFIG
72
+
73
+ #sample("clientip" => "123.123.123.123") do
74
+ #insist { subject["clientip"] } == "5744bbcc4f64acb6a805b7fee3013a8958cc8782d3fb0fb318cec915"
75
+ #end
76
+ #end
77
+
78
+ describe "anonymize string with SHA256 alogrithm" do
79
+ # The logstash config goes here.
80
+ # At this time, only filters are supported.
81
+ config <<-CONFIG
82
+ filter {
83
+ anonymize {
84
+ fields => ["clientip"]
85
+ key => "longencryptionkey"
86
+ algorithm => 'SHA256'
87
+ }
88
+ }
89
+ CONFIG
90
+
91
+ sample("clientip" => "123.123.123.123") do
92
+ insist { subject["clientip"] } == "345bec3eff242d53b568916c2610b3e393d885d6b96d643f38494fd74bf4a9ca"
93
+ end
94
+ end
95
+
96
+ describe "anonymize string with SHA384 alogrithm" do
97
+ # The logstash config goes here.
98
+ # At this time, only filters are supported.
99
+ config <<-CONFIG
100
+ filter {
101
+ anonymize {
102
+ fields => ["clientip"]
103
+ key => "longencryptionkey"
104
+ algorithm => 'SHA384'
105
+ }
106
+ }
107
+ CONFIG
108
+
109
+ sample("clientip" => "123.123.123.123") do
110
+ insist { subject["clientip"] } == "22d4c0e8c4fbcdc4887d2038fca7650f0e2e0e2457ff41c06eb2a980dded6749561c814fe182aff93e2538d18593947a"
111
+ end
112
+ end
113
+
114
+ describe "anonymize string with SHA512 alogrithm" do
115
+ # The logstash config goes here.
116
+ # At this time, only filters are supported.
117
+ config <<-CONFIG
118
+ filter {
119
+ anonymize {
120
+ fields => ["clientip"]
121
+ key => "longencryptionkey"
122
+ algorithm => 'SHA512'
123
+ }
124
+ }
125
+ CONFIG
126
+
127
+ sample("clientip" => "123.123.123.123") do
128
+ insist { subject["clientip"] } == "11c19b326936c08d6c50a3c847d883e5a1362e6a64dd55201a25f2c1ac1b673f7d8bf15b8f112a4978276d573275e3b14166e17246f670c2a539401c5bfdace8"
129
+ end
130
+ end
131
+
132
+ # HMAC-MD4 isn't implemented in JRuby OpenSSL
133
+ #describe "anonymize string with MD4 alogrithm" do
134
+ # The logstash config goes here.
135
+ # At this time, only filters are supported.
136
+ #config <<-CONFIG
137
+ #filter {
138
+ #anonymize {
139
+ #fields => ["clientip"]
140
+ #key => "longencryptionkey"
141
+ #algorithm => 'MD4'
142
+ #}
143
+ #}
144
+ #CONFIG
145
+ #
146
+ #sample("clientip" => "123.123.123.123") do
147
+ #insist { subject["clientip"] } == "0845cb571ab3646e51a07bcabf05e33d"
148
+ #end
149
+ #end
150
+
151
+ describe "anonymize string with MD5 alogrithm" do
152
+ # The logstash config goes here.
153
+ # At this time, only filters are supported.
154
+ config <<-CONFIG
155
+ filter {
156
+ anonymize {
157
+ fields => ["clientip"]
158
+ key => "longencryptionkey"
159
+ algorithm => 'MD5'
160
+ }
161
+ }
162
+ CONFIG
163
+
164
+ sample("clientip" => "123.123.123.123") do
165
+ insist { subject["clientip"] } == "9336c879e305c9604a3843fc3e75948f"
166
+ end
167
+ end
168
+
169
+ describe "Test field with multiple values" do
170
+ # The logstash config goes here.
171
+ # At this time, only filters are supported.
172
+ config <<-CONFIG
173
+ filter {
174
+ anonymize {
175
+ fields => ["clientip"]
176
+ key => "longencryptionkey"
177
+ algorithm => 'MD5'
178
+ }
179
+ }
180
+ CONFIG
181
+
182
+ sample("clientip" => [ "123.123.123.123", "223.223.223.223" ]) do
183
+ insist { subject["clientip"]} == [ "9336c879e305c9604a3843fc3e75948f", "7a6c66b8d3f42a7d650e3354af508df3" ]
184
+ end
185
+ end
186
+
187
+
188
+
189
+ end
@@ -0,0 +1,41 @@
1
+ require "test_utils"
2
+ require "logstash/filters/checksum"
3
+ require 'openssl'
4
+
5
+ describe LogStash::Filters::Checksum do
6
+ extend LogStash::RSpec
7
+
8
+ LogStash::Filters::Checksum::ALGORITHMS.each do |alg|
9
+ describe "#{alg} checksum with single field" do
10
+ config <<-CONFIG
11
+ filter {
12
+ checksum {
13
+ algorithm => "#{alg}"
14
+ keys => ["test"]
15
+ }
16
+ }
17
+ CONFIG
18
+
19
+ sample "test" => "foo bar" do
20
+ insist { !subject["logstash_checksum"].nil? }
21
+ insist { subject["logstash_checksum"] } == OpenSSL::Digest.hexdigest(alg, "|test|foo bar|")
22
+ end
23
+ end
24
+
25
+ describe "#{alg} checksum with multiple keys" do
26
+ config <<-CONFIG
27
+ filter {
28
+ checksum {
29
+ algorithm => "#{alg}"
30
+ keys => ["test1", "test2"]
31
+ }
32
+ }
33
+ CONFIG
34
+
35
+ sample "test1" => "foo", "test2" => "bar" do
36
+ insist { !subject["logstash_checksum"].nil? }
37
+ insist { subject["logstash_checksum"] } == OpenSSL::Digest.hexdigest(alg, "|test1|foo|test2|bar|")
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,67 @@
1
+ require "test_utils"
2
+ require "logstash/filters/clone"
3
+
4
+ describe LogStash::Filters::Clone do
5
+ extend LogStash::RSpec
6
+
7
+ describe "all defaults" do
8
+ type "original"
9
+ config <<-CONFIG
10
+ filter {
11
+ clone {
12
+ type => "original"
13
+ clones => ["clone", "clone", "clone"]
14
+ }
15
+ }
16
+ CONFIG
17
+
18
+ sample("message" => "hello world", "type" => "original") do
19
+ insist { subject }.is_a? Array
20
+ insist { subject.length } == 4
21
+ subject.each_with_index do |s,i|
22
+ if i == 0 # last one should be 'original'
23
+ insist { s["type"] } == "original"
24
+ else
25
+ insist { s["type"]} == "clone"
26
+ end
27
+ insist { s["message"] } == "hello world"
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "Complex use" do
33
+ config <<-CONFIG
34
+ filter {
35
+ clone {
36
+ type => "nginx-access"
37
+ tags => ['TESTLOG']
38
+ clones => ["nginx-access-clone1", "nginx-access-clone2"]
39
+ add_tag => ['RABBIT','NO_ES']
40
+ remove_tag => ["TESTLOG"]
41
+ }
42
+ }
43
+ CONFIG
44
+
45
+ sample("type" => "nginx-access", "tags" => ["TESTLOG"], "message" => "hello world") do
46
+ insist { subject }.is_a? Array
47
+ insist { subject.length } == 3
48
+
49
+ insist { subject[0]["type"] } == "nginx-access"
50
+ #Initial event remains unchanged
51
+ insist { subject[0]["tags"] }.include? "TESTLOG"
52
+ reject { subject[0]["tags"] }.include? "RABBIT"
53
+ reject { subject[0]["tags"] }.include? "NO_ES"
54
+ #All clones go through filter_matched
55
+ insist { subject[1]["type"] } == "nginx-access-clone1"
56
+ reject { subject[1]["tags"] }.include? "TESTLOG"
57
+ insist { subject[1]["tags"] }.include? "RABBIT"
58
+ insist { subject[1]["tags"] }.include? "NO_ES"
59
+
60
+ insist { subject[2]["type"] } == "nginx-access-clone2"
61
+ reject { subject[2]["tags"] }.include? "TESTLOG"
62
+ insist { subject[2]["tags"] }.include? "RABBIT"
63
+ insist { subject[2]["tags"] }.include? "NO_ES"
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,122 @@
1
+ require "test_utils"
2
+ require "logstash/filters/collate"
3
+
4
+ describe LogStash::Filters::Collate do
5
+ extend LogStash::RSpec
6
+
7
+ describe "collate when count is full" do
8
+ config <<-CONFIG
9
+ filter {
10
+ collate {
11
+ count => 2
12
+ }
13
+ }
14
+ CONFIG
15
+
16
+ events = [
17
+ {
18
+ "@timestamp" => Time.iso8601("2013-01-02T00:00:00.000Z"),
19
+ "message" => "later message"
20
+ },
21
+ {
22
+ "@timestamp" => Time.iso8601("2013-01-01T00:00:00.000Z"),
23
+ "message" => "earlier message"
24
+ }
25
+ ]
26
+
27
+ sample(events) do
28
+ insist { subject }.is_a? Array
29
+ insist { subject.length } == 2
30
+ subject.each_with_index do |s,i|
31
+ if i == 0 # first one should be the earlier message
32
+ insist { s["message"] } == "earlier message"
33
+ end
34
+ if i == 1 # second one should be the later message
35
+ insist { s["message"]} == "later message"
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "collate by desc" do
42
+ config <<-CONFIG
43
+ filter {
44
+ collate {
45
+ count => 3
46
+ order => "descending"
47
+ }
48
+ }
49
+ CONFIG
50
+
51
+ events = [
52
+ {
53
+ "@timestamp" => Time.iso8601("2013-01-03T00:00:00.000Z"),
54
+ "message" => "third message"
55
+ },
56
+ {
57
+ "@timestamp" => Time.iso8601("2013-01-01T00:00:00.000Z"),
58
+ "message" => "first message"
59
+ },
60
+ {
61
+ "@timestamp" => Time.iso8601("2013-01-02T00:00:00.000Z"),
62
+ "message" => "second message"
63
+ }
64
+ ]
65
+
66
+ sample(events) do
67
+ insist { subject }.is_a? Array
68
+ insist { subject.length } == 3
69
+ subject.each_with_index do |s,i|
70
+ if i == 0 # first one should be the third message
71
+ insist { s["message"] } == "third message"
72
+ end
73
+ if i == 1 # second one should be the second message
74
+ insist { s["message"]} == "second message"
75
+ end
76
+ if i == 2 # third one should be the third message
77
+ insist { s["message"]} == "first message"
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ # (Ignored) Currently this case can't pass because of the case depends on the flush function of the filter in the test,
84
+ # there was a TODO marked in the code (test_utils.rb, # TODO(sissel): pipeline flush needs to be implemented.),
85
+ # and the case wants to test the scenario which collate was triggered by a scheduler, so in this case, it needs to sleep few seconds
86
+ # waiting the scheduler triggered, and after the events were flushed, then the result can be checked.
87
+
88
+ # describe "collate when interval reached" do
89
+ # config <<-CONFIG
90
+ # filter {
91
+ # collate {
92
+ # interval => "1s"
93
+ # }
94
+ # }
95
+ # CONFIG
96
+
97
+ # events = [
98
+ # {
99
+ # "@timestamp" => Time.iso8601("2013-01-02T00:00:00.000Z"),
100
+ # "message" => "later message"
101
+ # },
102
+ # {
103
+ # "@timestamp" => Time.iso8601("2013-01-01T00:00:00.000Z"),
104
+ # "message" => "earlier message"
105
+ # }
106
+ # ]
107
+
108
+ # sample(events) do
109
+ # sleep(2)
110
+ # insist { subject }.is_a? Array
111
+ # insist { subject.length } == 2
112
+ # subject.each_with_index do |s,i|
113
+ # if i == 0 # first one should be the earlier message
114
+ # insist { s["message"] } == "earlier message"
115
+ # end
116
+ # if i == 1 # second one should be the later message
117
+ # insist { s["message"]} == "later message"
118
+ # end
119
+ # end
120
+ # end
121
+ # end
122
+ end