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,124 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/plugin_mixins/aws_config"
5
+
6
+ # SNS output.
7
+ #
8
+ # Send events to Amazon's Simple Notification Service, a hosted pub/sub
9
+ # framework. It supports subscribers of type email, HTTP/S, SMS, and SQS.
10
+ #
11
+ # For further documentation about the service see:
12
+ #
13
+ # http://docs.amazonwebservices.com/sns/latest/api/
14
+ #
15
+ # This plugin looks for the following fields on events it receives:
16
+ #
17
+ # * `sns` - If no ARN is found in the configuration file, this will be used as
18
+ # the ARN to publish.
19
+ # * `sns_subject` - The subject line that should be used.
20
+ # Optional. The "%{host}" will be used if not present and truncated at
21
+ # `MAX_SUBJECT_SIZE_IN_CHARACTERS`.
22
+ # * `sns_message` - The message that should be
23
+ # sent. Optional. The event serialzed as JSON will be used if not present and
24
+ # with the @message truncated so that the length of the JSON fits in
25
+ # `MAX_MESSAGE_SIZE_IN_BYTES`.
26
+ #
27
+ class LogStash::Outputs::Sns < LogStash::Outputs::Base
28
+ include LogStash::PluginMixins::AwsConfig
29
+
30
+ MAX_SUBJECT_SIZE_IN_CHARACTERS = 100
31
+ MAX_MESSAGE_SIZE_IN_BYTES = 32768
32
+
33
+ config_name "sns"
34
+ milestone 1
35
+
36
+ # Message format. Defaults to plain text.
37
+ config :format, :validate => [ "json", "plain" ], :default => "plain"
38
+
39
+ # SNS topic ARN.
40
+ config :arn, :validate => :string
41
+
42
+ # When an ARN for an SNS topic is specified here, the message
43
+ # "Logstash successfully booted" will be sent to it when this plugin
44
+ # is registered.
45
+ #
46
+ # Example: arn:aws:sns:us-east-1:770975001275:logstash-testing
47
+ #
48
+ config :publish_boot_message_arn, :validate => :string
49
+
50
+ public
51
+ def aws_service_endpoint(region)
52
+ return {
53
+ :sns_endpoint => "sns.#{region}.amazonaws.com"
54
+ }
55
+ end
56
+
57
+ public
58
+ def register
59
+ require "aws-sdk"
60
+
61
+ @sns = AWS::SNS.new(aws_options_hash)
62
+
63
+ # Try to publish a "Logstash booted" message to the ARN provided to
64
+ # cause an error ASAP if the credentials are bad.
65
+ if @publish_boot_message_arn
66
+ @sns.topics[@publish_boot_message_arn].publish("Logstash successfully booted", :subject => "Logstash booted")
67
+ end
68
+ end
69
+
70
+ public
71
+ def receive(event)
72
+ return unless output?(event)
73
+
74
+ arn = Array(event["sns"]).first || @arn
75
+
76
+ raise "An SNS ARN required." unless arn
77
+
78
+ message = Array(event["sns_message"]).first
79
+ subject = Array(event["sns_subject"]).first || event.source
80
+
81
+ # Ensure message doesn't exceed the maximum size.
82
+ if message
83
+ # TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
84
+ message = message.slice(0, MAX_MESSAGE_SIZE_IN_BYTES)
85
+ else
86
+ if @format == "plain"
87
+ message = self.class.format_message(event)
88
+ else
89
+ message = self.class.json_message(event)
90
+ end
91
+ end
92
+
93
+ # Log event.
94
+ @logger.debug("Sending event to SNS topic [#{arn}] with subject [#{subject}] and message:")
95
+ message.split("\n").each { |line| @logger.debug(line) }
96
+
97
+ # Publish the message.
98
+ @sns.topics[arn].publish(message, :subject => subject.slice(0, MAX_SUBJECT_SIZE_IN_CHARACTERS))
99
+ end
100
+
101
+ def self.json_message(event)
102
+ json = event.to_json
103
+ json_size = json.bytesize
104
+
105
+ # Truncate only the message if the JSON structure is too large.
106
+ if json_size > MAX_MESSAGE_SIZE_IN_BYTES
107
+ # TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
108
+ event["message"] = event["message"].slice(0, (event["message"].bytesize - (json_size - MAX_MESSAGE_SIZE_IN_BYTES)))
109
+ end
110
+
111
+ event.to_json
112
+ end
113
+
114
+ def self.format_message(event)
115
+ message = "Date: #{event["@timestamp"]}\n"
116
+ message << "Source: #{event["source"]}\n"
117
+ message << "Tags: #{event["tags"].join(', ')}\n"
118
+ message << "Fields: #{event.to_hash.inspect}\n"
119
+ message << "Message: #{event["message"]}"
120
+
121
+ # TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
122
+ message.slice(0, MAX_MESSAGE_SIZE_IN_BYTES)
123
+ end
124
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "stud/buffer"
5
+ require "rubygems"
6
+ require "uuidtools"
7
+
8
+ # This output lets you index&store your logs in Solr. If you want to get
9
+ # started quickly you should use version 4.4 or above in schemaless mode,
10
+ # which will try and guess your fields automatically. To turn that on,
11
+ # you can use the example included in the Solr archive:
12
+ #
13
+ # tar zxf solr-4.4.0.tgz
14
+ # cd example
15
+ # mv solr solr_ #back up the existing sample conf
16
+ # cp -r example-schemaless/solr/ . #put the schemaless conf in place
17
+ # java -jar start.jar #start Solr
18
+ #
19
+ # You can learn more about Solr at <https://lucene.apache.org/solr/>
20
+
21
+ class LogStash::Outputs::SolrHTTP < LogStash::Outputs::Base
22
+ include Stud::Buffer
23
+
24
+ config_name "solr_http"
25
+
26
+ milestone 1
27
+
28
+ # URL used to connect to Solr
29
+ config :solr_url, :validate => :string, :default => "http://localhost:8983/solr"
30
+
31
+ # Number of events to queue up before writing to Solr
32
+ config :flush_size, :validate => :number, :default => 100
33
+
34
+ # Amount of time since the last flush before a flush is done even if
35
+ # the number of buffered events is smaller than flush_size
36
+ config :idle_flush_time, :validate => :number, :default => 1
37
+
38
+ # Solr document ID for events. You'd typically have a variable here, like
39
+ # '%{foo}' so you can assign your own IDs
40
+ config :document_id, :validate => :string, :default => nil
41
+
42
+ public
43
+ def register
44
+ require "rsolr"
45
+ @solr = RSolr.connect :url => @solr_url
46
+ buffer_initialize(
47
+ :max_items => @flush_size,
48
+ :max_interval => @idle_flush_time,
49
+ :logger => @logger
50
+ )
51
+ end #def register
52
+
53
+ public
54
+ def receive(event)
55
+ return unless output?(event)
56
+ buffer_receive(event)
57
+ end #def receive
58
+
59
+ public
60
+ def flush(events, teardown=false)
61
+ documents = [] #this is the array of hashes that we push to Solr as documents
62
+
63
+ events.each do |event|
64
+ document = event.to_hash()
65
+ document["@timestamp"] = document["@timestamp"].iso8601 #make the timestamp ISO
66
+ if @document_id.nil?
67
+ document ["id"] = UUIDTools::UUID.random_create #add a unique ID
68
+ else
69
+ document ["id"] = event.sprintf(@document_id) #or use the one provided
70
+ end
71
+ documents.push(document)
72
+ end
73
+
74
+ @solr.add(documents)
75
+ rescue Exception => e
76
+ @logger.warn("An error occurred while indexing: #{e.message}")
77
+ end #def flush
78
+ end #class LogStash::Outputs::SolrHTTP
@@ -0,0 +1,141 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/plugin_mixins/aws_config"
5
+ require "stud/buffer"
6
+ require "digest/sha2"
7
+
8
+ # Push events to an Amazon Web Services Simple Queue Service (SQS) queue.
9
+ #
10
+ # SQS is a simple, scalable queue system that is part of the
11
+ # Amazon Web Services suite of tools.
12
+ #
13
+ # Although SQS is similar to other queuing systems like AMQP, it
14
+ # uses a custom API and requires that you have an AWS account.
15
+ # See http://aws.amazon.com/sqs/ for more details on how SQS works,
16
+ # what the pricing schedule looks like and how to setup a queue.
17
+ #
18
+ # To use this plugin, you *must*:
19
+ #
20
+ # * Have an AWS account
21
+ # * Setup an SQS queue
22
+ # * Create an identify that has access to publish messages to the queue.
23
+ #
24
+ # The "consumer" identity must have the following permissions on the queue:
25
+ #
26
+ # * sqs:ChangeMessageVisibility
27
+ # * sqs:ChangeMessageVisibilityBatch
28
+ # * sqs:GetQueueAttributes
29
+ # * sqs:GetQueueUrl
30
+ # * sqs:ListQueues
31
+ # * sqs:SendMessage
32
+ # * sqs:SendMessageBatch
33
+ #
34
+ # Typically, you should setup an IAM policy, create a user and apply the IAM policy to the user.
35
+ # A sample policy is as follows:
36
+ #
37
+ # {
38
+ # "Statement": [
39
+ # {
40
+ # "Sid": "Stmt1347986764948",
41
+ # "Action": [
42
+ # "sqs:ChangeMessageVisibility",
43
+ # "sqs:ChangeMessageVisibilityBatch",
44
+ # "sqs:DeleteMessage",
45
+ # "sqs:DeleteMessageBatch",
46
+ # "sqs:GetQueueAttributes",
47
+ # "sqs:GetQueueUrl",
48
+ # "sqs:ListQueues",
49
+ # "sqs:ReceiveMessage"
50
+ # ],
51
+ # "Effect": "Allow",
52
+ # "Resource": [
53
+ # "arn:aws:sqs:us-east-1:200850199751:Logstash"
54
+ # ]
55
+ # }
56
+ # ]
57
+ # }
58
+ #
59
+ # See http://aws.amazon.com/iam/ for more details on setting up AWS identities.
60
+ #
61
+ class LogStash::Outputs::SQS < LogStash::Outputs::Base
62
+ include LogStash::PluginMixins::AwsConfig
63
+ include Stud::Buffer
64
+
65
+ config_name "sqs"
66
+ milestone 1
67
+
68
+ # Name of SQS queue to push messages into. Note that this is just the name of the queue, not the URL or ARN.
69
+ config :queue, :validate => :string, :required => true
70
+
71
+ # Set to true if you want send messages to SQS in batches with batch_send
72
+ # from the amazon sdk
73
+ config :batch, :validate => :boolean, :default => true
74
+
75
+ # If batch is set to true, the number of events we queue up for a batch_send.
76
+ config :batch_events, :validate => :number, :default => 10
77
+
78
+ # If batch is set to true, the maximum amount of time between batch_send commands when there are pending events to flush.
79
+ config :batch_timeout, :validate => :number, :default => 5
80
+
81
+ public
82
+ def aws_service_endpoint(region)
83
+ return {
84
+ :sqs_endpoint => "sqs.#{region}.amazonaws.com"
85
+ }
86
+ end
87
+
88
+ public
89
+ def register
90
+ require "aws-sdk"
91
+
92
+ @sqs = AWS::SQS.new(aws_options_hash)
93
+
94
+ if @batch
95
+ if @batch_events > 10
96
+ raise RuntimeError.new(
97
+ "AWS only allows a batch_events parameter of 10 or less"
98
+ )
99
+ elsif @batch_events <= 1
100
+ raise RuntimeError.new(
101
+ "batch_events parameter must be greater than 1 (or its not a batch)"
102
+ )
103
+ end
104
+ buffer_initialize(
105
+ :max_items => @batch_events,
106
+ :max_interval => @batch_timeout,
107
+ :logger => @logger
108
+ )
109
+ end
110
+
111
+ begin
112
+ @logger.debug("Connecting to AWS SQS queue '#{@queue}'...")
113
+ @sqs_queue = @sqs.queues.named(@queue)
114
+ rescue Exception => e
115
+ @logger.error("Unable to access SQS queue '#{@queue}': #{e.to_s}")
116
+ end # begin/rescue
117
+
118
+ @logger.info("Connected to AWS SQS queue '#{@queue}' successfully.")
119
+ end # def register
120
+
121
+ public
122
+ def receive(event)
123
+ if @batch
124
+ buffer_receive(event.to_json)
125
+ return
126
+ end
127
+ @sqs_queue.send_message(event.to_json)
128
+ end # def receive
129
+
130
+ # called from Stud::Buffer#buffer_flush when there are events to flush
131
+ def flush(events, teardown=false)
132
+ @sqs_queue.batch_send(events)
133
+ end
134
+
135
+ public
136
+ def teardown
137
+ buffer_flush(:final => true)
138
+ @sqs_queue = nil
139
+ finished
140
+ end # def teardown
141
+ end
@@ -0,0 +1,116 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # statsd is a server for aggregating counters and other metrics to ship to
6
+ # graphite.
7
+ #
8
+ # The most basic coverage of this plugin is that the 'namespace', 'sender', and
9
+ # 'metric' names are combined into the full metric path like so:
10
+ #
11
+ # namespace.sender.metric
12
+ #
13
+ # The general idea is that you send statsd count or latency data and every few
14
+ # seconds it will emit the aggregated values to graphite (aggregates like
15
+ # average, max, stddev, etc)
16
+ #
17
+ # You can learn about statsd here:
18
+ #
19
+ # * <http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/>
20
+ # * <https://github.com/etsy/statsd>
21
+ #
22
+ # A simple example usage of this is to count HTTP hits by response code; to learn
23
+ # more about that, check out the
24
+ # [log metrics tutorial](../tutorials/metrics-from-logs)
25
+ class LogStash::Outputs::Statsd < LogStash::Outputs::Base
26
+ ## Regex stolen from statsd code
27
+ RESERVED_CHARACTERS_REGEX = /[\:\|\@]/
28
+ config_name "statsd"
29
+ milestone 2
30
+
31
+ # The address of the Statsd server.
32
+ config :host, :validate => :string, :default => "localhost"
33
+
34
+ # The port to connect to on your statsd server.
35
+ config :port, :validate => :number, :default => 8125
36
+
37
+ # The statsd namespace to use for this metric
38
+ config :namespace, :validate => :string, :default => "logstash"
39
+
40
+ # The name of the sender.
41
+ # Dots will be replaced with underscores
42
+ config :sender, :validate => :string, :default => "%{host}"
43
+
44
+ # An increment metric. metric names as array.
45
+ config :increment, :validate => :array, :default => []
46
+
47
+ # A decrement metric. metric names as array.
48
+ config :decrement, :validate => :array, :default => []
49
+
50
+ # A timing metric. metric_name => duration as hash
51
+ config :timing, :validate => :hash, :default => {}
52
+
53
+ # A count metric. metric_name => count as hash
54
+ config :count, :validate => :hash, :default => {}
55
+
56
+ # A set metric. metric_name => string to append as hash
57
+ config :set, :validate => :hash, :default => {}
58
+
59
+ # A gauge metric. metric_name => gauge as hash
60
+ config :gauge, :validate => :hash, :default => {}
61
+
62
+ # The sample rate for the metric
63
+ config :sample_rate, :validate => :number, :default => 1
64
+
65
+ # The final metric sent to statsd will look like the following (assuming defaults)
66
+ # logstash.sender.file_name
67
+ #
68
+ # Enable debugging output?
69
+ config :debug, :validate => :boolean, :default => false
70
+
71
+ public
72
+ def register
73
+ require "statsd"
74
+ @client = Statsd.new(@host, @port)
75
+ end # def register
76
+
77
+ public
78
+ def receive(event)
79
+ return unless output?(event)
80
+
81
+ @client.namespace = event.sprintf(@namespace) if not @namespace.empty?
82
+ @logger.debug? and @logger.debug("Original sender: #{@sender}")
83
+ sender = event.sprintf(@sender)
84
+ @logger.debug? and @logger.debug("Munged sender: #{sender}")
85
+ @logger.debug? and @logger.debug("Event: #{event}")
86
+ @increment.each do |metric|
87
+ @client.increment(build_stat(event.sprintf(metric), sender), @sample_rate)
88
+ end
89
+ @decrement.each do |metric|
90
+ @client.decrement(build_stat(event.sprintf(metric), sender), @sample_rate)
91
+ end
92
+ @count.each do |metric, val|
93
+ @client.count(build_stat(event.sprintf(metric), sender),
94
+ event.sprintf(val).to_f, @sample_rate)
95
+ end
96
+ @timing.each do |metric, val|
97
+ @client.timing(build_stat(event.sprintf(metric), sender),
98
+ event.sprintf(val).to_f, @sample_rate)
99
+ end
100
+ @set.each do |metric, val|
101
+ @client.set(build_stat(event.sprintf(metric), sender),
102
+ event.sprintf(val), @sample_rate)
103
+ end
104
+ @gauge.each do |metric, val|
105
+ @client.gauge(build_stat(event.sprintf(metric), sender),
106
+ event.sprintf(val).to_f, @sample_rate)
107
+ end
108
+ end # def receive
109
+
110
+ def build_stat(metric, sender=@sender)
111
+ sender = sender.gsub('::','.').gsub(RESERVED_CHARACTERS_REGEX, '_').gsub(".", "_")
112
+ metric = metric.gsub('::','.').gsub(RESERVED_CHARACTERS_REGEX, '_')
113
+ @logger.debug? and @logger.debug("Formatted value", :sender => sender, :metric => metric)
114
+ return "#{sender}.#{metric}"
115
+ end
116
+ end # class LogStash::Outputs::Statsd