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,242 @@
1
+ require "rubygems"
2
+ require "erb"
3
+ require "optparse"
4
+ require "bluecloth" # for markdown parsing
5
+
6
+ $: << Dir.pwd
7
+ $: << File.join(File.dirname(__FILE__), "..", "lib")
8
+
9
+ require "logstash/config/mixin"
10
+ require "logstash/inputs/base"
11
+ require "logstash/codecs/base"
12
+ require "logstash/filters/base"
13
+ require "logstash/outputs/base"
14
+ require "logstash/version"
15
+
16
+ class LogStashConfigDocGenerator
17
+ COMMENT_RE = /^ *#(?: (.*)| *$)/
18
+
19
+ def initialize
20
+ @rules = {
21
+ COMMENT_RE => lambda { |m| add_comment(m[1]) },
22
+ /^ *class.*< *LogStash::(Outputs|Filters|Inputs|Codecs)::(Base|Threadable)/ => \
23
+ lambda { |m| set_class_description },
24
+ /^ *config +[^=].*/ => lambda { |m| add_config(m[0]) },
25
+ /^ *milestone .*/ => lambda { |m| set_milestone(m[0]) },
26
+ /^ *config_name .*/ => lambda { |m| set_config_name(m[0]) },
27
+ /^ *flag[( ].*/ => lambda { |m| add_flag(m[0]) },
28
+ /^ *(class|def|module) / => lambda { |m| clear_comments },
29
+ }
30
+ end
31
+
32
+ def parse(string)
33
+ clear_comments
34
+ buffer = ""
35
+ string.split(/\r\n|\n/).each do |line|
36
+ # Join long lines
37
+ if line =~ COMMENT_RE
38
+ # nothing
39
+ else
40
+ # Join extended lines
41
+ if line =~ /(, *$)|(\\$)|(\[ *$)/
42
+ buffer += line.gsub(/\\$/, "")
43
+ next
44
+ end
45
+ end
46
+
47
+ line = buffer + line
48
+ buffer = ""
49
+
50
+ @rules.each do |re, action|
51
+ m = re.match(line)
52
+ if m
53
+ action.call(m)
54
+ end
55
+ end # RULES.each
56
+ end # string.split("\n").each
57
+ end # def parse
58
+
59
+ def set_class_description
60
+ @class_description = @comments.join("\n")
61
+ clear_comments
62
+ end # def set_class_description
63
+
64
+ def add_comment(comment)
65
+ return if comment == "encoding: utf-8"
66
+ @comments << comment
67
+ end # def add_comment
68
+
69
+ def add_config(code)
70
+ # I just care about the 'config :name' part
71
+ code = code.sub(/,.*/, "")
72
+
73
+ # call the code, which calls 'config' in this class.
74
+ # This will let us align comments with config options.
75
+ name, opts = eval(code)
76
+
77
+ # TODO(sissel): This hack is only required until regexp configs
78
+ # are gone from logstash.
79
+ name = name.to_s unless name.is_a?(Regexp)
80
+
81
+ description = BlueCloth.new(@comments.join("\n")).to_html
82
+ @attributes[name][:description] = description
83
+ clear_comments
84
+ end # def add_config
85
+
86
+ def add_flag(code)
87
+ # call the code, which calls 'config' in this class.
88
+ # This will let us align comments with config options.
89
+ #p :code => code
90
+ fixed_code = code.gsub(/ do .*/, "")
91
+ #p :fixedcode => fixed_code
92
+ name, description = eval(fixed_code)
93
+ @flags[name] = description
94
+ clear_comments
95
+ end # def add_flag
96
+
97
+ def set_config_name(code)
98
+ name = eval(code)
99
+ @name = name
100
+ end # def set_config_name
101
+
102
+ def set_milestone(code)
103
+ @milestone = eval(code)
104
+ end
105
+
106
+ # pretend to be the config DSL and just get the name
107
+ def config(name, opts={})
108
+ return name, opts
109
+ end # def config
110
+
111
+ # Pretend to support the flag DSL
112
+ def flag(*args, &block)
113
+ name = args.first
114
+ description = args.last
115
+ return name, description
116
+ end # def config
117
+
118
+ # pretend to be the config dsl's 'config_name' method
119
+ def config_name(name)
120
+ return name
121
+ end # def config_name
122
+
123
+ # pretend to be the config dsl's 'milestone' method
124
+ def milestone(m)
125
+ return m
126
+ end # def milestone
127
+
128
+ def clear_comments
129
+ @comments.clear
130
+ end # def clear_comments
131
+
132
+ def generate(file, settings)
133
+ @class_description = ""
134
+ @milestone = ""
135
+ @comments = []
136
+ @attributes = Hash.new { |h,k| h[k] = {} }
137
+ @flags = {}
138
+
139
+ # local scoping for the monkeypatch belowg
140
+ attributes = @attributes
141
+ # Monkeypatch the 'config' method to capture
142
+ # Note, this monkeypatch requires us do the config processing
143
+ # one at a time.
144
+ #LogStash::Config::Mixin::DSL.instance_eval do
145
+ #define_method(:config) do |name, opts={}|
146
+ #p name => opts
147
+ #attributes[name].merge!(opts)
148
+ #end
149
+ #end
150
+
151
+ # Loading the file will trigger the config dsl which should
152
+ # collect all the config settings.
153
+ load file
154
+
155
+ # parse base first
156
+ parse(File.new(File.join(File.dirname(file), "base.rb"), "r").read)
157
+
158
+ # Now parse the real library
159
+ code = File.new(file).read
160
+
161
+ # inputs either inherit from Base or Threadable.
162
+ if code =~ /\< LogStash::Inputs::Threadable/
163
+ parse(File.new(File.join(File.dirname(file), "threadable.rb"), "r").read)
164
+ end
165
+
166
+ if code =~ /include LogStash::PluginMixins/
167
+ mixin = code.gsub(/.*include LogStash::PluginMixins::(\w+)\s.*/m, '\1')
168
+ mixin.gsub!(/(.)([A-Z])/, '\1_\2')
169
+ mixin.downcase!
170
+ parse(File.new(File.join(File.dirname(file), "..", "plugin_mixins", "#{mixin}.rb")).read)
171
+ end
172
+
173
+ parse(code)
174
+
175
+ puts "Generating docs for #{file}"
176
+
177
+ if @name.nil?
178
+ $stderr.puts "Missing 'config_name' setting in #{file}?"
179
+ return nil
180
+ end
181
+
182
+ klass = LogStash::Config::Registry.registry[@name]
183
+ if klass.ancestors.include?(LogStash::Inputs::Base)
184
+ section = "input"
185
+ elsif klass.ancestors.include?(LogStash::Filters::Base)
186
+ section = "filter"
187
+ elsif klass.ancestors.include?(LogStash::Outputs::Base)
188
+ section = "output"
189
+ elsif klass.ancestors.include?(LogStash::Codecs::Base)
190
+ section = "codec"
191
+ end
192
+
193
+ template_file = File.join(File.dirname(__FILE__), "plugin-doc.html.erb")
194
+ template = ERB.new(File.new(template_file).read, nil, "-")
195
+
196
+ # descriptions are assumed to be markdown
197
+ description = BlueCloth.new(@class_description).to_html
198
+
199
+ klass.get_config.each do |name, settings|
200
+ @attributes[name].merge!(settings)
201
+ end
202
+ sorted_attributes = @attributes.sort { |a,b| a.first.to_s <=> b.first.to_s }
203
+ klassname = LogStash::Config::Registry.registry[@name].to_s
204
+ name = @name
205
+
206
+ synopsis_file = File.join(File.dirname(__FILE__), "plugin-synopsis.html.erb")
207
+ synopsis = ERB.new(File.new(synopsis_file).read, nil, "-").result(binding)
208
+
209
+ if settings[:output]
210
+ dir = File.join(settings[:output], section + "s")
211
+ path = File.join(dir, "#{name}.html")
212
+ Dir.mkdir(settings[:output]) if !File.directory?(settings[:output])
213
+ Dir.mkdir(dir) if !File.directory?(dir)
214
+ File.open(path, "w") do |out|
215
+ html = template.result(binding)
216
+ html.gsub!("%VERSION%", LOGSTASH_VERSION)
217
+ html.gsub!("%PLUGIN%", @name)
218
+ out.puts(html)
219
+ end
220
+ else
221
+ puts template.result(binding)
222
+ end
223
+ end # def generate
224
+
225
+ end # class LogStashConfigDocGenerator
226
+
227
+ if __FILE__ == $0
228
+ opts = OptionParser.new
229
+ settings = {}
230
+ opts.on("-o DIR", "--output DIR",
231
+ "Directory to output to; optional. If not specified,"\
232
+ "we write to stdout.") do |val|
233
+ settings[:output] = val
234
+ end
235
+
236
+ args = opts.parse(ARGV)
237
+
238
+ args.each do |arg|
239
+ gen = LogStashConfigDocGenerator.new
240
+ gen.generate(arg, settings)
241
+ end
242
+ end
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: How to extend - logstash
3
+ layout: content_right
4
+ ---
5
+ # Add a new filter
6
+
7
+ This document shows you how to add a new filter to logstash.
8
+
9
+ For a general overview of how to add a new plugin, see [the extending
10
+ logstash](.) overview.
11
+
12
+ ## Write code.
13
+
14
+ Let's write a 'hello world' filter. This filter will replace the 'message' in
15
+ the event with "Hello world!"
16
+
17
+ First, logstash expects plugins in a certain directory structure: `logstash/TYPE/PLUGIN_NAME.rb`
18
+
19
+ Since we're creating a filter, let's mkdir this:
20
+
21
+ mkdir -p logstash/filters/
22
+ cd logstash/filters
23
+
24
+ Now add the code:
25
+
26
+ # Call this file 'foo.rb' (in logstash/filters, as above)
27
+ require "logstash/filters/base"
28
+ require "logstash/namespace"
29
+
30
+ class LogStash::Filters::Foo < LogStash::Filters::Base
31
+
32
+ # Setting the config_name here is required. This is how you
33
+ # configure this filter from your logstash config.
34
+ #
35
+ # filter {
36
+ # foo { ... }
37
+ # }
38
+ config_name "foo"
39
+
40
+ # New plugins should start life at milestone 1.
41
+ milestone 1
42
+
43
+ # Replace the message with this value.
44
+ config :message, :validate => :string
45
+
46
+ public
47
+ def register
48
+ # nothing to do
49
+ end # def register
50
+
51
+ public
52
+ def filter(event)
53
+ # return nothing unless there's an actual filter event
54
+ return unless filter?(event)
55
+ if @message
56
+ # Replace the event message with our message as configured in the
57
+ # config file.
58
+ event["message"] = @message
59
+ end
60
+ # filter_matched should go in the last line of our successful code
61
+ filter_matched(event)
62
+ end # def filter
63
+ end # class LogStash::Filters::Foo
64
+
65
+ ## Add it to your configuration
66
+
67
+ For this simple example, let's just use stdin input and stdout output.
68
+ The config file looks like this:
69
+
70
+ input {
71
+ stdin { type => "foo" }
72
+ }
73
+ filter {
74
+ if [type] == "foo" {
75
+ foo {
76
+ message => "Hello world!"
77
+ }
78
+ }
79
+ }
80
+ output {
81
+ stdout { }
82
+ }
83
+
84
+ Call this file 'example.conf'
85
+
86
+ ## Tell logstash about it.
87
+
88
+ Depending on how you installed logstash, you have a few ways of including this
89
+ plugin.
90
+
91
+ You can use the agent flag --pluginpath flag to specify where the root of your
92
+ plugin tree is. In our case, it's the current directory.
93
+
94
+ % logstash --pluginpath . -f example.conf
95
+
96
+ If you use the jar release of logstash, you have an additional option - you can
97
+ include the plugin right in the jar file.
98
+
99
+ # This command will take your 'logstash/filters/foo.rb' file
100
+ # and add it into the jar file.
101
+ % jar -uf logstash-%VERSION%-flatjar.jar logstash/filters/foo.rb
102
+
103
+ # Verify it's in the right location in the jar!
104
+ % jar tf logstash-%VERSION%-flatjar.jar | grep foo.rb
105
+ logstash/filters/foo.rb
106
+
107
+ % java -jar logstash-%VERSION%-flatjar.jar agent -f example.conf
108
+
109
+ ## Example running
110
+
111
+ In the example below, I typed in "the quick brown fox" after running the java
112
+ command.
113
+
114
+ % java -jar logstash-%VERSION%-flatjar.jar agent -f example.conf
115
+ the quick brown fox
116
+ 2011-05-12T01:05:09.495000Z stdin://snack.home/: Hello world!
117
+
118
+ The output is the standard logstash stdout output, but in this case our "the
119
+ quick brown fox" message was replaced with "Hello world!"
120
+
121
+ All done! :)
@@ -0,0 +1,91 @@
1
+ ---
2
+ title: How to extend - logstash
3
+ layout: content_right
4
+ ---
5
+ # Extending logstash
6
+
7
+ You can add your own input, output, or filter plugins to logstash.
8
+
9
+ If you're looking to extend logstash today, please look at the existing plugins.
10
+
11
+ ## Good examples of plugins
12
+
13
+ * [inputs/tcp](https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/tcp.rb)
14
+ * [filters/multiline](https://github.com/logstash/logstash/blob/master/lib/logstash/filters/multiline.rb)
15
+ * [outputs/mongodb](https://github.com/logstash/logstash/blob/master/lib/logstash/outputs/mongodb.rb)
16
+
17
+ ## Common concepts
18
+
19
+ * The `config_name` sets the name used in the config file.
20
+ * The `milestone` sets the milestone number of the plugin. See <../plugin-milestones> for more info.
21
+ * The `config` lines define config options.
22
+ * The `register` method is called per plugin instantiation. Do any of your initialization here.
23
+
24
+ ### Required modules
25
+
26
+ All plugins should require the Logstash module.
27
+
28
+ require 'logstash/namespace'
29
+
30
+ ### Plugin name
31
+
32
+ Every plugin must have a name set with the `config_name` method. If this
33
+ is not specified plugins will fail to load with an error.
34
+
35
+ ### Milestones
36
+
37
+ Every plugin needs a milestone set using `milestone`. See
38
+ <../plugin-milestones> for more info.
39
+
40
+ ### Config lines
41
+
42
+ The `config` lines define configuration options and are constructed like
43
+ so:
44
+
45
+ config :host, :validate => :string, :default => "0.0.0.0"
46
+
47
+ The name of the option is specified, here `:host` and then the
48
+ attributes of the option. They can include `:validate`, `:default`,
49
+ `:required` (a Boolean `true` or `false`), and `:deprecated` (also a
50
+ Boolean).
51
+
52
+ ## Inputs
53
+
54
+ All inputs require the LogStash::Inputs::Base class:
55
+
56
+ require 'logstash/inputs/base'
57
+
58
+ Inputs have two methods: `register` and `run`.
59
+
60
+ * Each input runs as its own thread.
61
+ * The `run` method is expected to run-forever.
62
+
63
+ ## Filters
64
+
65
+ All filters require the LogStash::Filters::Base class:
66
+
67
+ require 'logstash/filters/base'
68
+
69
+ Filters have two methods: `register` and `filter`.
70
+
71
+ * The `filter` method gets an event.
72
+ * Call `event.cancel` to drop the event.
73
+ * To modify an event, simply make changes to the event you are given.
74
+ * The return value is ignored.
75
+
76
+ ## Outputs
77
+
78
+ All outputs require the LogStash::Outputs::Base class:
79
+
80
+ require 'logstash/outputs/base'
81
+
82
+ Outputs have two methods: `register` and `receive`.
83
+
84
+ * The `register` method is called per plugin instantiation. Do any of your initialization here.
85
+ * The `receive` method is called when an event gets pushed to your output
86
+
87
+ ## Example: a new filter
88
+
89
+ Learn by example how to [add a new filter to logstash](example-add-a-new-filter)
90
+
91
+