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,109 @@
1
+ # encoding: utf-8
2
+ # Origin https://groups.google.com/forum/#!msg/logstash-users/exgrB4iQ-mw/R34apku5nXsJ
3
+ # and https://botbot.me/freenode/logstash/msg/4169496/
4
+ # via https://gist.github.com/electrical/4660061e8fff11cdcf37#file-jira-rb
5
+
6
+ # Uses jiralicious as the bridge to JIRA
7
+ # By Martin Cleaver, Blended Perspectives
8
+ # with a lot of help from 'electrical' in #logstash
9
+
10
+ require "logstash/outputs/base"
11
+ require "logstash/namespace"
12
+
13
+ #
14
+ # This is so is most useful so you can use logstash to parse and structure
15
+ # your logs and ship structured, json events to JIRA
16
+ #
17
+ # To use this, you'll need to ensure your JIRA instance allows REST calls
18
+
19
+ class LogStash::Outputs::Jira < LogStash::Outputs::Base
20
+ config_name "jira"
21
+ milestone 2
22
+
23
+ # The hostname to send logs to. This should target your JIRA server
24
+ # and has to have the REST interface enabled
25
+ config :host, :validate => :string
26
+
27
+ config :username, :validate => :string, :required => true
28
+ config :password, :validate => :string, :required => true
29
+
30
+ # Javalicious has no proxy support
31
+ ###
32
+ # JIRA Project number
33
+ config :projectid, :validate => :string, :required => true
34
+
35
+ # JIRA Issuetype number
36
+ config :issuetypeid, :validate => :string, :required => true
37
+
38
+ # JIRA Summary
39
+ config :summary, :validate => :string, :required => true
40
+
41
+ # JIRA Priority
42
+ config :priority, :validate => :string, :required => true
43
+
44
+ # JIRA Reporter
45
+ config :reporter, :validate => :string
46
+
47
+ # JIRA Reporter
48
+ config :assignee, :validate => :string
49
+
50
+ ### The following have not been implemented
51
+ # Ticket creation method
52
+ #config :method, :validate => :string, :default => 'new'
53
+
54
+ # Search fields; When in 'append' method. search for a ticket that has these fields and data.
55
+ #config :searchfields, :validate => :hash
56
+
57
+ # createfields; Add data to these fields at initial creation
58
+ #config :createfields, :validate => :hash
59
+
60
+ # appendfields; Update data in these fields when appending data to an existing ticket
61
+ #config :appendfields, :validate => :hash
62
+
63
+ # Comment; Add this in the comment field ( is for new and append method the same )
64
+ #config :comment, :validate => :string
65
+
66
+
67
+ public
68
+ def register
69
+ require "jiralicious" # 0.2.2 works for me
70
+ # nothing to do
71
+ end
72
+
73
+ public
74
+ def receive(event)
75
+ return unless output?(event)
76
+
77
+ if event == LogStash::SHUTDOWN
78
+ finished
79
+ return
80
+ end
81
+
82
+ Jiralicious.configure do |config|
83
+ config.username = @username
84
+ config.password = @password
85
+ config.uri = @host
86
+ config.auth_type = :cookie
87
+ config.api_version = "latest"
88
+ end
89
+
90
+
91
+ issue = Jiralicious::Issue.new
92
+ issue.fields.set_id("project", @projectid) # would have prefered a project key, https://github.com/jstewart/jiralicious/issues/16
93
+ issue.fields.set("summary", @summary)
94
+ issue.fields.set_id("issuetype", @issuetypeid)
95
+ issue.fields.set_name("reporter", @reporter)
96
+ issue.fields.set_name("assignee", @assignee)
97
+ issue.fields.set_id("priority", @priority)
98
+ #puts issue.fields.to_yaml
99
+ issue.save
100
+
101
+
102
+
103
+ # if response.is_a?(Net::HTTPSuccess)
104
+ # @logger.info("Event send to JIRA OK!")
105
+ # else
106
+ # @logger.warn("HTTP error", :error => response.error!)
107
+ # end
108
+ end # def receive
109
+ end # class LogStash::Outputs::Jira
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/event"
5
+
6
+ # Push messages to the juggernaut websockets server:
7
+ #
8
+ # * https://github.com/maccman/juggernaut
9
+ #
10
+ # Wraps Websockets and supports other methods (including xhr longpolling) This
11
+ # is basically, just an extension of the redis output (Juggernaut pulls
12
+ # messages from redis). But it pushes messages to a particular channel and
13
+ # formats the messages in the way juggernaut expects.
14
+ class LogStash::Outputs::Juggernaut < LogStash::Outputs::Base
15
+
16
+ config_name "juggernaut"
17
+ milestone 1
18
+
19
+ # The hostname of the redis server to which juggernaut is listening.
20
+ config :host, :validate => :string, :default => "127.0.0.1"
21
+
22
+ # The port to connect on.
23
+ config :port, :validate => :number, :default => 6379
24
+
25
+ # The redis database number.
26
+ config :db, :validate => :number, :default => 0
27
+
28
+ # Redis initial connection timeout in seconds.
29
+ config :timeout, :validate => :number, :default => 5
30
+
31
+ # Password to authenticate with. There is no authentication by default.
32
+ config :password, :validate => :password
33
+
34
+ # List of channels to which to publish. Dynamic names are
35
+ # valid here, for example "logstash-%{type}".
36
+ config :channels, :validate => :array, :required => true
37
+
38
+ # How should the message be formatted before pushing to the websocket.
39
+ config :message_format, :validate => :string
40
+
41
+ public
42
+ def register
43
+ require 'redis'
44
+
45
+ if not @channels
46
+ raise RuntimeError.new(
47
+ "Must define the channels on which to publish the messages"
48
+ )
49
+ end
50
+ # end TODO
51
+
52
+ @redis = nil
53
+ end # def register
54
+
55
+ private
56
+ def connect
57
+ Redis.new(
58
+ :host => @host,
59
+ :port => @port,
60
+ :timeout => @timeout,
61
+ :db => @db,
62
+ :password => @password
63
+ )
64
+ end # def connect
65
+
66
+ # A string used to identify a redis instance in log messages
67
+ private
68
+ def identity
69
+ @name || "redis://#{@password}@#{@host}:#{@port}/#{@db} #{@data_type}:#{@key}"
70
+ end
71
+
72
+
73
+ public
74
+ def receive(event)
75
+ return unless output?(event)
76
+ begin
77
+ @redis ||= connect
78
+ if @message_format
79
+ formatted = event.sprintf(@message_format)
80
+ else
81
+ formatted = event.to_json
82
+ end
83
+ juggernaut_message = {
84
+ "channels" => @channels.collect{ |x| event.sprintf(x) },
85
+ "data" => event["message"]
86
+ }
87
+
88
+ @redis.publish 'juggernaut', juggernaut_message.to_json
89
+ rescue => e
90
+ @logger.warn("Failed to send event to redis", :event => event,
91
+ :identity => identity, :exception => e,
92
+ :backtrace => e.backtrace)
93
+ raise e
94
+ end
95
+ end # def receive
96
+
97
+ public
98
+ def teardown
99
+ if @data_type == 'channel' and @redis
100
+ @redis.quit
101
+ @redis = nil
102
+ end
103
+ end
104
+
105
+ end
@@ -0,0 +1,146 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+
5
+ class LogStash::Outputs::Librato < LogStash::Outputs::Base
6
+ # This output lets you send metrics, annotations and alerts to
7
+ # Librato based on Logstash events
8
+ #
9
+ # This is VERY experimental and inefficient right now.
10
+
11
+ config_name "librato"
12
+ milestone 1
13
+
14
+ # Your Librato account
15
+ # usually an email address
16
+ config :account_id, :validate => :string, :required => true
17
+
18
+ # Your Librato API Token
19
+ config :api_token, :validate => :string, :required => true
20
+
21
+ # Gauges
22
+ # Send data to Librato as a gauge
23
+ #
24
+ # Example:
25
+ # ["value", "%{bytes_recieved}", "source", "%{host}", "name", "apache_bytes"]
26
+ # Additionally, you can override the `measure_time` for the event. Must be a unix timestamp:
27
+ # ["value", "%{bytes_recieved}", "source", "%{host}", "name", "apache_bytes","measure_time", "%{my_unixtime_field}]
28
+ # Default is to use the event's timestamp
29
+ config :gauge, :validate => :hash, :default => {}
30
+
31
+ # Counters
32
+ # Send data to Librato as a counter
33
+ #
34
+ # Example:
35
+ # ["value", "1", "source", "%{host}", "name", "messages_received"]
36
+ # Additionally, you can override the `measure_time` for the event. Must be a unix timestamp:
37
+ # ["value", "1", "source", "%{host}", "name", "messages_received", "measure_time", "%{my_unixtime_field}"]
38
+ # Default is to use the event's timestamp
39
+ config :counter, :validate => :hash, :default => {}
40
+
41
+ # Annotations
42
+ # Registers an annotation with Librato
43
+ # The only required field is `title` and `name`.
44
+ # `start_time` and `end_time` will be set to `event["@timestamp"].to_i`
45
+ # You can add any other optional annotation values as well.
46
+ # All values will be passed through `event.sprintf`
47
+ #
48
+ # Example:
49
+ # ["title":"Logstash event on %{host}", "name":"logstash_stream"]
50
+ # or
51
+ # ["title":"Logstash event", "description":"%{message}", "name":"logstash_stream"]
52
+ config :annotation, :validate => :hash, :default => {}
53
+
54
+ # Batch size
55
+ # Number of events to batch up before sending to Librato.
56
+ #
57
+ config :batch_size, :validate => :string, :default => "10"
58
+
59
+ public
60
+ def register
61
+ require "net/https"
62
+ require "uri"
63
+ @url = "https://metrics-api.librato.com/v1/"
64
+ @uri = URI.parse(@url)
65
+ @client = Net::HTTP.new(@uri.host, @uri.port)
66
+ @client.use_ssl = true
67
+ @client.verify_mode = OpenSSL::SSL::VERIFY_NONE
68
+
69
+ end # def register
70
+
71
+ public
72
+ def receive(event)
73
+ # TODO (lusis)
74
+ # batch and flush
75
+ return unless output?(event)
76
+
77
+ metrics_event = Hash.new
78
+ unless @gauge.size == 0
79
+ g_hash = Hash[*@gauge.collect{|k,v| [k,event.sprintf(v)]}.flatten]
80
+ g_hash.each do |k,v|
81
+ g_hash[k] = v.to_f if k=="value"
82
+ end
83
+ g_hash['measure_time'] = event["@timestamp"].to_i unless g_hash['measure_time']
84
+ @logger.warn("Gauges hash", :data => g_hash)
85
+ metrics_event['gauges'] = Array.new
86
+ metrics_event['gauges'] << g_hash
87
+ @logger.warn("Metrics hash", :data => metrics_event)
88
+ end
89
+ unless @counter.size == 0
90
+ c_hash = Hash[*@counter.collect{|k,v| [k,event.sprintf(v)]}.flatten]
91
+ c_hash.each do |k,v|
92
+ c_hash[k] = v.to_f if k=="value"
93
+ end
94
+ c_hash['measure_time'] = event["@timestamp"].to_i unless c_hash['measure_time']
95
+ @logger.warn("Counters hash", :data => c_hash)
96
+ metrics_event['counters'] = Array.new
97
+ metrics_event['counters'] << c_hash
98
+ @logger.warn("Metrics hash", :data => metrics_event)
99
+ end
100
+
101
+ # TODO (lusis)
102
+ # Clean this mess up
103
+ unless metrics_event.size == 0
104
+ request = Net::HTTP::Post.new(@uri.path+"metrics")
105
+ request.basic_auth(@account_id, @api_token)
106
+
107
+ begin
108
+ request.body = metrics_event.to_json
109
+ request.add_field("Content-Type", 'application/json')
110
+ response = @client.request(request)
111
+ @logger.warn("Librato convo", :request => request.inspect, :response => response.inspect)
112
+ raise unless response.code == '200'
113
+ rescue Exception => e
114
+ @logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect)
115
+ end
116
+ end
117
+
118
+ unless @annotation.size == 0
119
+ annotation_hash = Hash.new
120
+ annotation_hash['annotations'] = Array.new
121
+ @logger.warn("Original Annotation", :data => @annotation)
122
+ annotation_event = Hash[*@annotation.collect{|k,v| [event.sprintf(k),event.sprintf(v)]}.flatten]
123
+ @logger.warn("Annotation event", :data => annotation_event)
124
+
125
+ annotation_path = "#{@uri.path}annotations/#{annotation_event['name']}"
126
+ @logger.warn("Annotation path", :data => annotation_path)
127
+ request = Net::HTTP::Post.new(annotation_path)
128
+ request.basic_auth(@account_id, @api_token)
129
+ annotation_event.delete('name')
130
+ annotation_event['start_time'] = event["@timestamp"].to_i unless annotation_event['start_time']
131
+ annotation_event['end_time'] = event["@timestamp"].to_i unless annotation_event['end_time']
132
+ annotation_hash['annotations'] << annotation_event
133
+ @logger.warn("Annotation event", :data => annotation_event)
134
+
135
+ begin
136
+ request.body = annotation_event.to_json
137
+ request.add_field("Content-Type", 'application/json')
138
+ response = @client.request(request)
139
+ @logger.warn("Librato convo", :request => request.inspect, :response => response.inspect)
140
+ raise unless response.code == '201'
141
+ rescue Exception => e
142
+ @logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect)
143
+ end
144
+ end
145
+ end # def receive
146
+ end
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "uri"
5
+ # TODO(sissel): Move to something that performs better than net/http
6
+ require "net/http"
7
+ require "net/https"
8
+
9
+ # Ugly monkey patch to get around <http://jira.codehaus.org/browse/JRUBY-5529>
10
+ Net::BufferedIO.class_eval do
11
+ BUFSIZE = 1024 * 16
12
+
13
+ def rbuf_fill
14
+ timeout(@read_timeout) {
15
+ @rbuf << @io.sysread(BUFSIZE)
16
+ }
17
+ end
18
+ end
19
+
20
+ # Got a loggly account? Use logstash to ship logs to Loggly!
21
+ #
22
+ # This is most useful so you can use logstash to parse and structure
23
+ # your logs and ship structured, json events to your account at Loggly.
24
+ #
25
+ # To use this, you'll need to use a Loggly input with type 'http'
26
+ # and 'json logging' enabled.
27
+ class LogStash::Outputs::Loggly < LogStash::Outputs::Base
28
+ config_name "loggly"
29
+ milestone 2
30
+
31
+ # The hostname to send logs to. This should target the loggly http input
32
+ # server which is usually "logs.loggly.com"
33
+ config :host, :validate => :string, :default => "logs.loggly.com"
34
+
35
+ # The loggly http input key to send to.
36
+ # This is usually visible in the Loggly 'Inputs' page as something like this
37
+ # https://logs.hoover.loggly.net/inputs/abcdef12-3456-7890-abcd-ef0123456789
38
+ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
39
+ # \----------> key <-------------/
40
+ #
41
+ # You can use %{foo} field lookups here if you need to pull the api key from
42
+ # the event. This is mainly aimed at multitenant hosting providers who want
43
+ # to offer shipping a customer's logs to that customer's loggly account.
44
+ config :key, :validate => :string, :required => true
45
+
46
+ # Should the log action be sent over https instead of plain http
47
+ config :proto, :validate => :string, :default => "http"
48
+
49
+ # Proxy Host
50
+ config :proxy_host, :validate => :string
51
+
52
+ # Proxy Port
53
+ config :proxy_port, :validate => :number
54
+
55
+ # Proxy Username
56
+ config :proxy_user, :validate => :string
57
+
58
+ # Proxy Password
59
+ config :proxy_password, :validate => :password, :default => ""
60
+
61
+
62
+ public
63
+ def register
64
+ # nothing to do
65
+ end
66
+
67
+ public
68
+ def receive(event)
69
+ return unless output?(event)
70
+
71
+ if event == LogStash::SHUTDOWN
72
+ finished
73
+ return
74
+ end
75
+
76
+ # Send the event over http.
77
+ url = URI.parse("#{@proto}://#{@host}/inputs/#{event.sprintf(@key)}")
78
+ @logger.info("Loggly URL", :url => url)
79
+ http = Net::HTTP::Proxy(@proxy_host, @proxy_port, @proxy_user, @proxy_password.value).new(url.host, url.port)
80
+ if url.scheme == 'https'
81
+ http.use_ssl = true
82
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
83
+ end
84
+ request = Net::HTTP::Post.new(url.path)
85
+ request.body = event.to_json
86
+ response = http.request(request)
87
+ if response.is_a?(Net::HTTPSuccess)
88
+ @logger.info("Event send to Loggly OK!")
89
+ else
90
+ @logger.warn("HTTP error", :error => response.error!)
91
+ end
92
+ end # def receive
93
+ end # class LogStash::Outputs::Loggly