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,173 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # The alter filter allows you to do general alterations to fields
6
+ # that are not included in the normal mutate filter.
7
+ #
8
+ #
9
+ # NOTE: The functionality provided by this plugin is likely to
10
+ # be merged into the 'mutate' filter in future versions.
11
+ class LogStash::Filters::Alter < LogStash::Filters::Base
12
+ config_name "alter"
13
+ milestone 1
14
+
15
+ # Change the content of the field to the specified value
16
+ # if the actual content is equal to the expected one.
17
+ #
18
+ # Example:
19
+ #
20
+ # filter {
21
+ # alter {
22
+ # condrewrite => [
23
+ # "field_name", "expected_value", "new_value"
24
+ # "field_name2", "expected_value2, "new_value2"
25
+ # ....
26
+ # ]
27
+ # }
28
+ # }
29
+ config :condrewrite, :validate => :array
30
+
31
+ # Change the content of the field to the specified value
32
+ # if the content of another field is equal to the expected one.
33
+ #
34
+ # Example:
35
+ #
36
+ # filter {
37
+ # alter {
38
+ # condrewriteother => [
39
+ # "field_name", "expected_value", "field_name_to_change", "value",
40
+ # "field_name2", "expected_value2, "field_name_to_change2", "value2",
41
+ # ....
42
+ # ]
43
+ # }
44
+ # }
45
+ config :condrewriteother, :validate => :array
46
+
47
+ # Sets the value of field_name to the first nonnull expression among its arguments.
48
+ #
49
+ # Example:
50
+ #
51
+ # filter {
52
+ # alter {
53
+ # coalesce => [
54
+ # "field_name", "value1", "value2", "value3", ...
55
+ # ]
56
+ # }
57
+ # }
58
+ config :coalesce, :validate => :array
59
+
60
+ public
61
+ def register
62
+ @condrewrite_parsed = []
63
+ @condrewrite.nil? or @condrewrite.each_slice(3) do |field, expected, replacement|
64
+ if [field, expected, replacement].any? {|n| n.nil?}
65
+ @logger.error("Invalid condrewrte configuration. condrewrite has to define 3 elements per config entry", :field => field, :expected => expected, :replacement => replacement)
66
+ raise "Bad configuration, aborting."
67
+ end
68
+ @condrewrite_parsed << {
69
+ :field => field,
70
+ :expected => expected,
71
+ :replacement => replacement
72
+ }
73
+ end # condrewrite
74
+
75
+ @condrewriteother_parsed = []
76
+ @condrewriteother.nil? or @condrewriteother.each_slice(4) do |field, expected, replacement_field, replacement_value|
77
+ if [field, expected, replacement_field, replacement_value].any? {|n| n.nil?}
78
+ @logger.error("Invalid condrewrteother configuration. condrewriteother has to define 4 elements per config entry", :field => field, :expected => expected, :replacement_field => replacement_field, :replacement_value => replacement_value)
79
+ raise "Bad configuration, aborting."
80
+ end
81
+ @condrewriteother_parsed << {
82
+ :field => field,
83
+ :expected => expected,
84
+ :replacement_field => replacement_field,
85
+ :replacement_value => replacement_value
86
+ }
87
+ end # condrewriteother
88
+
89
+ @coalesce_parsed = []
90
+ @coalesce.nil? or if not @coalesce.is_a?(Array) or @coalesce.length < 2
91
+ @logger.error("Invalid coalesce configuration. coalesce has to define one Array of at least 2 elements")
92
+ raise "Bad configuration, aborting."
93
+ else
94
+ @coalesce_parsed << {
95
+ :field => @coalesce.slice!(0),
96
+ :subst_array => @coalesce
97
+ }
98
+ end
99
+
100
+
101
+ end # def register
102
+
103
+ public
104
+ def filter(event)
105
+ return unless filter?(event)
106
+
107
+ condrewrite(event) if @condrewrite
108
+ condrewriteother(event) if @condrewriteother
109
+ coalesce(event) if @coalesce
110
+
111
+ filter_matched(event)
112
+ end # def filter
113
+
114
+ private
115
+ def condrewrite(event)
116
+ @condrewrite_parsed.each do |config|
117
+ field = config[:field]
118
+ expected = config[:expected]
119
+ replacement = config[:replacement]
120
+
121
+ if event[field].is_a?(Array)
122
+ event[field] = event[field].map do |v|
123
+ if v == event.sprintf(expected)
124
+ v = event.sprintf(replacement)
125
+ else
126
+ v
127
+ end
128
+ end
129
+ else
130
+ if event[field] == event.sprintf(expected)
131
+ event[field] = event.sprintf(replacement)
132
+ end
133
+ end
134
+ end # @condrewrite_parsed.each
135
+ end # def condrewrite
136
+
137
+ private
138
+ def condrewriteother(event)
139
+ @condrewriteother_parsed.each do |config|
140
+ field = config[:field]
141
+ expected = config[:expected]
142
+ replacement_field = config[:replacement_field]
143
+ replacement_value = config[:replacement_value]
144
+
145
+ if event[field].is_a?(Array)
146
+ event[field].each do |v|
147
+ if v == event.sprintf(expected)
148
+ event[replacement_field] = event.sprintf(replacement_value)
149
+ end
150
+ end
151
+ else
152
+ if event[field] == event.sprintf(expected)
153
+ event[replacement_field] = event.sprintf(replacement_value)
154
+ end
155
+ end
156
+ end # @condrewriteother_parsed.each
157
+ end # def condrewriteother
158
+
159
+ private
160
+ def coalesce(event)
161
+ @coalesce_parsed.each do |config|
162
+ field = config[:field]
163
+ subst_array = config[:subst_array]
164
+
165
+ substitution_parsed = subst_array.map { |x| event.sprintf(x) }
166
+ not_nul_index = substitution_parsed.find_index { |x| not x.nil? and not x.eql?("nil") and not (not x.index("%").nil? && x.match(/%\{[^}]\}/).nil?) }
167
+ if not not_nul_index.nil?
168
+ event[field] = substitution_parsed[not_nul_index]
169
+ end
170
+ end # @coalesce_parsed.each
171
+ end # def coalesce
172
+
173
+ end # class LogStash::Filters::Alter
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Anonymize fields using by replacing values with a consistent hash.
6
+ class LogStash::Filters::Anonymize < LogStash::Filters::Base
7
+ config_name "anonymize"
8
+ milestone 1
9
+
10
+ # The fields to be anonymized
11
+ config :fields, :validate => :array, :required => true
12
+
13
+ # Hashing key
14
+ # When using MURMUR3 the key is ignored but must still be set.
15
+ # When using IPV4_NETWORK key is the subnet prefix lentgh
16
+ config :key, :validate => :string, :required => true
17
+
18
+ # digest/hash type
19
+ config :algorithm, :validate => ['SHA1', 'SHA256', 'SHA384', 'SHA512', 'MD5', "MURMUR3", "IPV4_NETWORK"], :required => true, :default => 'SHA1'
20
+
21
+ public
22
+ def register
23
+ # require any library and set the anonymize function
24
+ case @algorithm
25
+ when "IPV4_NETWORK"
26
+ require 'ipaddr'
27
+ class << self; alias_method :anonymize, :anonymize_ipv4_network; end
28
+ when "MURMUR3"
29
+ require "murmurhash3"
30
+ class << self; alias_method :anonymize, :anonymize_murmur3; end
31
+ else
32
+ require 'openssl'
33
+ class << self; alias_method :anonymize, :anonymize_openssl; end
34
+ end
35
+ end # def register
36
+
37
+ public
38
+ def filter(event)
39
+ return unless filter?(event)
40
+ @fields.each do |field|
41
+ next unless event.include?(field)
42
+ if event[field].is_a?(Array)
43
+ event[field] = event[field].collect { |v| anonymize(v) }
44
+ else
45
+ event[field] = anonymize(event[field])
46
+ end
47
+ end
48
+ end # def filter
49
+
50
+ private
51
+ def anonymize_ipv4_network(ip_string)
52
+ IPAddr.new(ip_string).mask(@key.to_i).to_s
53
+ end
54
+
55
+ def anonymize_openssl(data)
56
+ digest = algorithm()
57
+ OpenSSL::HMAC.hexdigest(digest, @key, data)
58
+ end
59
+
60
+ def anonymize_murmur3(value)
61
+ case value
62
+ when Fixnum
63
+ MurmurHash3::V32.int_hash(value)
64
+ when String
65
+ MurmurHash3::V32.str_hash(value)
66
+ end
67
+ end
68
+
69
+ def algorithm
70
+
71
+ case @algorithm
72
+ #when 'SHA'
73
+ #return OpenSSL::Digest::SHA.new
74
+ when 'SHA1'
75
+ return OpenSSL::Digest::SHA1.new
76
+ #when 'SHA224'
77
+ #return OpenSSL::Digest::SHA224.new
78
+ when 'SHA256'
79
+ return OpenSSL::Digest::SHA256.new
80
+ when 'SHA384'
81
+ return OpenSSL::Digest::SHA384.new
82
+ when 'SHA512'
83
+ return OpenSSL::Digest::SHA512.new
84
+ #when 'MD4'
85
+ #return OpenSSL::Digest::MD4.new
86
+ when 'MD5'
87
+ return OpenSSL::Digest::MD5.new
88
+ else
89
+ @logger.error("Unknown algorithm")
90
+ end
91
+ end
92
+
93
+ end # class LogStash::Filters::Anonymize
@@ -0,0 +1,190 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+ require "logstash/logging"
4
+ require "logstash/plugin"
5
+ require "logstash/config/mixin"
6
+
7
+ class LogStash::Filters::Base < LogStash::Plugin
8
+ include LogStash::Config::Mixin
9
+
10
+ config_name "filter"
11
+
12
+ # Note that all of the specified routing options (type,tags.exclude\_tags,include\_fields,exclude\_fields)
13
+ # must be met in order for the event to be handled by the filter.
14
+
15
+ # The type to act on. If a type is given, then this filter will only
16
+ # act on messages with the same type. See any input plugin's "type"
17
+ # attribute for more.
18
+ # Optional.
19
+ config :type, :validate => :string, :default => "", :deprecated => "You can achieve this same behavior with the new conditionals, like: `if [type] == \"sometype\" { %PLUGIN% { ... } }`."
20
+
21
+ # Only handle events with all/any (controlled by include\_any config option) of these tags.
22
+ # Optional.
23
+ config :tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if \"sometag\" in [tags] { %PLUGIN% { ... } }`"
24
+
25
+ # Only handle events without all/any (controlled by exclude\_any config
26
+ # option) of these tags.
27
+ # Optional.
28
+ config :exclude_tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if !(\"sometag\" in [tags]) { %PLUGIN% { ... } }`"
29
+
30
+ # If this filter is successful, add arbitrary tags to the event.
31
+ # Tags can be dynamic and include parts of the event using the %{field}
32
+ # syntax. Example:
33
+ #
34
+ # filter {
35
+ # %PLUGIN% {
36
+ # add_tag => [ "foo_%{somefield}" ]
37
+ # }
38
+ # }
39
+ #
40
+ # If the event has field "somefield" == "hello" this filter, on success,
41
+ # would add a tag "foo_hello"
42
+ config :add_tag, :validate => :array, :default => []
43
+
44
+ # If this filter is successful, remove arbitrary tags from the event.
45
+ # Tags can be dynamic and include parts of the event using the %{field}
46
+ # syntax. Example:
47
+ #
48
+ # filter {
49
+ # %PLUGIN% {
50
+ # remove_tag => [ "foo_%{somefield}" ]
51
+ # }
52
+ # }
53
+ #
54
+ # If the event has field "somefield" == "hello" this filter, on success,
55
+ # would remove the tag "foo_hello" if it is present
56
+ config :remove_tag, :validate => :array, :default => []
57
+
58
+ # If this filter is successful, add any arbitrary fields to this event.
59
+ # Tags can be dynamic and include parts of the event using the %{field}
60
+ # Example:
61
+ #
62
+ # filter {
63
+ # %PLUGIN% {
64
+ # add_field => [ "foo_%{somefield}", "Hello world, from %{host}" ]
65
+ # }
66
+ # }
67
+ #
68
+ # If the event has field "somefield" == "hello" this filter, on success,
69
+ # would add field "foo_hello" if it is present, with the
70
+ # value above and the %{host} piece replaced with that value from the
71
+ # event.
72
+ config :add_field, :validate => :hash, :default => {}
73
+
74
+ # If this filter is successful, remove arbitrary fields from this event.
75
+ # Fields names can be dynamic and include parts of the event using the %{field}
76
+ # Example:
77
+ #
78
+ # filter {
79
+ # %PLUGIN% {
80
+ # remove_field => [ "foo_%{somefield}" ]
81
+ # }
82
+ # }
83
+ #
84
+ # If the event has field "somefield" == "hello" this filter, on success,
85
+ # would remove the field with name "foo_hello" if it is present
86
+ config :remove_field, :validate => :array, :default => []
87
+
88
+ RESERVED = ["type", "tags", "exclude_tags", "include_fields", "exclude_fields", "add_tag", "remove_tag", "add_field", "remove_field", "include_any", "exclude_any"]
89
+
90
+ public
91
+ def initialize(params)
92
+ super
93
+ config_init(params)
94
+ @threadsafe = true
95
+ end # def initialize
96
+
97
+ public
98
+ def register
99
+ raise "#{self.class}#register must be overidden"
100
+ end # def register
101
+
102
+ public
103
+ def filter(event)
104
+ raise "#{self.class}#filter must be overidden"
105
+ end # def filter
106
+
107
+ public
108
+ def execute(event, &block)
109
+ filter(event, &block)
110
+ end # def execute
111
+
112
+ public
113
+ def threadsafe?
114
+ @threadsafe
115
+ end
116
+
117
+ # a filter instance should call filter_matched from filter if the event
118
+ # matches the filter's conditions (right type, etc)
119
+ protected
120
+ def filter_matched(event)
121
+ @add_field.each do |field, value|
122
+ field = event.sprintf(field)
123
+ value = [value] if !value.is_a?(Array)
124
+ value.each do |v|
125
+ v = event.sprintf(v)
126
+ if event.include?(field)
127
+ event[field] = [event[field]] if !event[field].is_a?(Array)
128
+ event[field] << v
129
+ else
130
+ event[field] = v
131
+ end
132
+ @logger.debug? and @logger.debug("filters/#{self.class.name}: adding value to field",
133
+ :field => field, :value => value)
134
+ end
135
+ end
136
+
137
+ @remove_field.each do |field|
138
+ field = event.sprintf(field)
139
+ @logger.debug? and @logger.debug("filters/#{self.class.name}: removing field",
140
+ :field => field)
141
+ event.remove(field)
142
+ end
143
+
144
+ @add_tag.each do |tag|
145
+ tag = event.sprintf(tag)
146
+ @logger.debug? and @logger.debug("filters/#{self.class.name}: adding tag",
147
+ :tag => tag)
148
+ (event["tags"] ||= []) << tag
149
+ end
150
+
151
+ @remove_tag.each do |tag|
152
+ break if event["tags"].nil?
153
+ tag = event.sprintf(tag)
154
+ @logger.debug? and @logger.debug("filters/#{self.class.name}: removing tag",
155
+ :tag => tag)
156
+ event["tags"].delete(tag)
157
+ end
158
+ end # def filter_matched
159
+
160
+ protected
161
+ def filter?(event)
162
+ if !@type.empty?
163
+ if event["type"] != @type
164
+ @logger.debug? and @logger.debug(["filters/#{self.class.name}: Skipping event because type doesn't match #{@type}", event])
165
+ return false
166
+ end
167
+ end
168
+
169
+ if !@tags.empty?
170
+ # this filter has only works on events with certain tags,
171
+ # and this event has no tags.
172
+ return false if !event["tags"]
173
+
174
+ # Is @tags a subset of the event's tags? If not, skip it.
175
+ if (event["tags"] & @tags).size != @tags.size
176
+ @logger.debug(["filters/#{self.class.name}: Skipping event because tags don't match #{@tags.inspect}", event])
177
+ return false
178
+ end
179
+ end
180
+
181
+ if !@exclude_tags.empty? && event["tags"]
182
+ if (diff_tags = (event["tags"] & @exclude_tags)).size != 0
183
+ @logger.debug(["filters/#{self.class.name}: Skipping event because tags contains excluded tags: #{diff_tags.inspect}", event])
184
+ return false
185
+ end
186
+ end
187
+
188
+ return true
189
+ end
190
+ end # class LogStash::Filters::Base