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,66 @@
1
+ # encoding: utf-8
2
+ require "java"
3
+ require "rubygems"
4
+ require "jdbc/mysql"
5
+
6
+ java_import "com.mysql.jdbc.Driver"
7
+
8
+ # A JDBC mysql connection class.
9
+ # The interface is compatible with the mysql2 API.
10
+ class LogStash::DrupalDblogJavaMysqlConnection
11
+
12
+ def initialize(host, username, password, database, port = nil)
13
+ port ||= 3306
14
+
15
+ address = "jdbc:mysql://#{host}:#{port}/#{database}"
16
+ @connection = java.sql.DriverManager.getConnection(address, username, password)
17
+ end # def initialize
18
+
19
+ def query(sql)
20
+ if sql =~ /select/i
21
+ return select(sql)
22
+ else
23
+ return update(sql)
24
+ end
25
+ end # def query
26
+
27
+ def select(sql)
28
+ stmt = @connection.createStatement
29
+ resultSet = stmt.executeQuery(sql)
30
+
31
+ meta = resultSet.getMetaData
32
+ column_count = meta.getColumnCount
33
+
34
+ rows = []
35
+
36
+ while resultSet.next
37
+ res = {}
38
+
39
+ (1..column_count).each do |i|
40
+ name = meta.getColumnName(i)
41
+ case meta.getColumnType(i)
42
+ when java.sql.Types::INTEGER
43
+ res[name] = resultSet.getInt(name)
44
+ else
45
+ res[name] = resultSet.getString(name)
46
+ end
47
+ end
48
+
49
+ rows << res
50
+ end
51
+
52
+ stmt.close
53
+ return rows
54
+ end # def select
55
+
56
+ def update(sql)
57
+ stmt = @connection.createStatement
58
+ stmt.execute_update(sql)
59
+ stmt.close
60
+ end # def update
61
+
62
+ def close
63
+ @connection.close
64
+ end # def close
65
+
66
+ end # class LogStash::DrupalDblogJavaMysqlConnection
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/util/socket_peer"
5
+
6
+ # Read from elasticsearch.
7
+ #
8
+ # This is useful for replay testing logs, reindexing, etc.
9
+ #
10
+ # Example:
11
+ #
12
+ # input {
13
+ # # Read all documents from elasticsearch matching the given query
14
+ # elasticsearch {
15
+ # host => "localhost"
16
+ # query => "ERROR"
17
+ # }
18
+ # }
19
+ #
20
+ # * TODO(sissel): configurable scroll timeout
21
+ # * TODO(sissel): Option to keep the index, type, and doc id so we can do reindexing?
22
+ class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
23
+ config_name "elasticsearch"
24
+ milestone 1
25
+
26
+ default :codec, "json"
27
+
28
+ # The address of your elasticsearch server
29
+ config :host, :validate => :string, :required => true
30
+
31
+ # The http port of your elasticsearch server's REST interface
32
+ config :port, :validate => :number, :default => 9200
33
+
34
+ # The index to search
35
+ config :index, :validate => :string, :default => "logstash-*"
36
+
37
+ # The query to use
38
+ config :query, :validate => :string, :default => "*"
39
+
40
+ # Enable the scan search_type.
41
+ # This will disable sorting but increase speed and performance.
42
+ config :scan, :validate => :boolean, :default => true
43
+
44
+ # This allows you to set the number of items you get back per scroll
45
+ config :size, :validate => :number, :default => 1000
46
+
47
+ # this parameter controls the keep alive time of the scrolling request and initiates the scrolling process.
48
+ # The timeout applies per round trip (i.e. between the previous scan scroll request, to the next).
49
+ config :scroll, :validate => :string, :default => "1m"
50
+
51
+ public
52
+ def register
53
+ require "ftw"
54
+ @agent = FTW::Agent.new
55
+ params = {
56
+ "q" => @query,
57
+ "scroll" => @scroll,
58
+ "size" => "#{@size}",
59
+ }
60
+
61
+ params['search_type'] = "scan" if @scan
62
+
63
+ @url = "http://#{@host}:#{@port}/#{@index}/_search?#{encode(params)}"
64
+ end # def register
65
+
66
+ private
67
+ def encode(hash)
68
+ return hash.collect do |key, value|
69
+ CGI.escape(key) + "=" + CGI.escape(value)
70
+ end.join("&")
71
+ end # def encode
72
+
73
+ public
74
+ def run(output_queue)
75
+
76
+ # Execute the search request
77
+ response = @agent.get!(@url)
78
+ json = ""
79
+ response.read_body { |c| json << c }
80
+ result = JSON.parse(json)
81
+ scroll_id = result["_scroll_id"]
82
+
83
+ # When using the search_type=scan we don't get an initial result set.
84
+ # So we do it here.
85
+ if @scan
86
+
87
+ scroll_params = {
88
+ "scroll_id" => scroll_id,
89
+ "scroll" => @scroll
90
+ }
91
+
92
+ scroll_url = "http://#{@host}:#{@port}/_search/scroll?#{encode(scroll_params)}"
93
+ response = @agent.get!(scroll_url)
94
+ json = ""
95
+ response.read_body { |c| json << c }
96
+ result = JSON.parse(json)
97
+
98
+ end
99
+
100
+ while true
101
+ break if result.nil?
102
+ hits = result["hits"]["hits"]
103
+ break if hits.empty?
104
+
105
+ hits.each do |hit|
106
+ event = hit["_source"]
107
+
108
+ # Hack to make codecs work
109
+ @codec.decode(event.to_json) do |event|
110
+ decorate(event)
111
+ output_queue << event
112
+ end
113
+ end
114
+
115
+ # Get the scroll id from the previous result set and use it for getting the next data set
116
+ scroll_id = result["_scroll_id"]
117
+
118
+ # Fetch the next result set
119
+ scroll_params = {
120
+ "scroll_id" => scroll_id,
121
+ "scroll" => @scroll
122
+ }
123
+ scroll_url = "http://#{@host}:#{@port}/_search/scroll?#{encode(scroll_params)}"
124
+
125
+ response = @agent.get!(scroll_url)
126
+ json = ""
127
+ response.read_body { |c| json << c }
128
+ result = JSON.parse(json)
129
+
130
+ if result["error"]
131
+ @logger.warn(result["error"], :request => scroll_url)
132
+ # TODO(sissel): raise an error instead of breaking
133
+ break
134
+ end
135
+
136
+ end
137
+ rescue LogStash::ShutdownSignal
138
+ # Do nothing, let us quit.
139
+ end # def run
140
+ end # class LogStash::Inputs::Elasticsearch
@@ -0,0 +1,129 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Pull events from a Windows Event Log
7
+ #
8
+ # To collect Events from the System Event Log, use a config like:
9
+ #
10
+ # input {
11
+ # eventlog {
12
+ # type => 'Win32-EventLog'
13
+ # logfile => 'System'
14
+ # }
15
+ # }
16
+ class LogStash::Inputs::EventLog < LogStash::Inputs::Base
17
+
18
+ config_name "eventlog"
19
+ milestone 2
20
+
21
+ default :codec, "plain"
22
+
23
+ # Event Log Name
24
+ config :logfile, :validate => :array, :default => [ "Application", "Security", "System" ]
25
+
26
+ public
27
+ def register
28
+
29
+ # wrap specified logfiles in suitable OR statements
30
+ @logfiles = @logfile.join("' OR TargetInstance.LogFile = '")
31
+
32
+ @hostname = Socket.gethostname
33
+ @logger.info("Registering input eventlog://#{@hostname}/#{@logfile}")
34
+
35
+ if RUBY_PLATFORM == "java"
36
+ require "logstash/inputs/eventlog/racob_fix"
37
+ require "jruby-win32ole"
38
+ else
39
+ require "win32ole"
40
+ end
41
+ end # def register
42
+
43
+ public
44
+ def run(queue)
45
+ @wmi = WIN32OLE.connect("winmgmts://")
46
+
47
+ wmi_query = "Select * from __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent' And (TargetInstance.LogFile = '#{@logfiles}')"
48
+
49
+ begin
50
+ @logger.debug("Tailing Windows Event Log '#{@logfile}'")
51
+
52
+ events = @wmi.ExecNotificationQuery(wmi_query)
53
+
54
+ while
55
+ notification = events.NextEvent
56
+ event = notification.TargetInstance
57
+
58
+ timestamp = to_timestamp(event.TimeGenerated)
59
+
60
+ e = LogStash::Event.new(
61
+ "host" => @hostname,
62
+ "path" => @logfile,
63
+ "type" => @type,
64
+ "@timestamp" => timestamp
65
+ )
66
+
67
+ %w{Category CategoryString ComputerName EventCode EventIdentifier
68
+ EventType Logfile Message RecordNumber SourceName
69
+ TimeGenerated TimeWritten Type User
70
+ }.each{
71
+ |property| e[property] = event.send property
72
+ }
73
+
74
+ if RUBY_PLATFORM == "java"
75
+ # unwrap jruby-win32ole racob data
76
+ e["InsertionStrings"] = unwrap_racob_variant_array(event.InsertionStrings)
77
+ data = unwrap_racob_variant_array(event.Data)
78
+ # Data is an array of signed shorts, so convert to bytes and pack a string
79
+ e["Data"] = data.map{|byte| (byte > 0) ? byte : 256 + byte}.pack("c*")
80
+ else
81
+ # win32-ole data does not need to be unwrapped
82
+ e["InsertionStrings"] = event.InsertionStrings
83
+ e["Data"] = event.Data
84
+ end
85
+
86
+ e["message"] = event.Message
87
+
88
+ decorate(e)
89
+ queue << e
90
+
91
+ end # while
92
+
93
+ rescue Exception => ex
94
+ @logger.error("Windows Event Log error: #{ex}\n#{ex.backtrace}")
95
+ sleep 1
96
+ retry
97
+ end # rescue
98
+
99
+ end # def run
100
+
101
+ private
102
+ def unwrap_racob_variant_array(variants)
103
+ variants ||= []
104
+ variants.map {|v| (v.respond_to? :getValue) ? v.getValue : v}
105
+ end # def unwrap_racob_variant_array
106
+
107
+ # the event log timestamp is a utc string in the following format: yyyymmddHHMMSS.xxxxxx±UUU
108
+ # http://technet.microsoft.com/en-us/library/ee198928.aspx
109
+ private
110
+ def to_timestamp(wmi_time)
111
+ result = ""
112
+ # parse the utc date string
113
+ /(?<w_date>\d{8})(?<w_time>\d{6})\.\d{6}(?<w_sign>[\+-])(?<w_diff>\d{3})/ =~ wmi_time
114
+ result = "#{w_date}T#{w_time}#{w_sign}"
115
+ # the offset is represented by the difference, in minutes,
116
+ # between the local time zone and Greenwich Mean Time (GMT).
117
+ if w_diff.to_i > 0
118
+ # calculate the timezone offset in hours and minutes
119
+ h_offset = w_diff.to_i / 60
120
+ m_offset = w_diff.to_i - (h_offset * 60)
121
+ result.concat("%02d%02d" % [h_offset, m_offset])
122
+ else
123
+ result.concat("0000")
124
+ end
125
+
126
+ return DateTime.strptime(result, "%Y%m%dT%H%M%S%z").iso8601
127
+ end
128
+ end # class LogStash::Inputs::EventLog
129
+
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ # The jruby-win32ole gem uses 'java.lang.System.set_property' to
3
+ # tell java(?) where to find the racob dll.
4
+ #
5
+ # However, it fails when it tries to load the racob dll from the jar
6
+ # (UnsatisfiedLinkError).
7
+ #
8
+ # So easy fix, right? Monkeypatch the set_property to do two things:
9
+ # - extract the racob dll somewhere
10
+ # - set the property to the extracted path
11
+ #
12
+
13
+ require "fileutils"
14
+ require "tmpdir"
15
+
16
+ class << java.lang.System
17
+ alias_method :set_property_seriously, :set_property
18
+ def set_property(key, value)
19
+ if key == "racob.dll.path" && value =~ /file:.*\.jar!\//
20
+ # Path is set in a jar, we'll need to extract it to a
21
+ # temporary location, then load it.
22
+ filename = File.basename(value)
23
+ extracted_path = File.join(Dir.tmpdir, filename)
24
+ # FileUtils.cp (and copy, and copy_file) are broken
25
+ # when copying this file. I have not debugged it other
26
+ # than to see it doesn't work. racob_x86.dll is 105kb,
27
+ # but FileUtils.cp only copies 4kb of it.
28
+
29
+ # open both files in 'binary' mode (sets encoding to BINARY aka
30
+ # ASCII-8BIT).
31
+ input = File.new(value, "rb")
32
+ output = File.new(extracted_path, "wb")
33
+ while chunk = input.read(16384)
34
+ output.write(chunk)
35
+ end
36
+ input.close
37
+ output.close
38
+
39
+ return set_property_seriously(key, extracted_path)
40
+ else
41
+ return set_property_seriously(key, value)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket" # for Socket.gethostname
5
+
6
+ # Run command line tools and capture the whole output as an event.
7
+ #
8
+ # Notes:
9
+ #
10
+ # * The '@source' of this event will be the command run.
11
+ # * The '@message' of this event will be the entire stdout of the command
12
+ # as one event.
13
+ #
14
+ class LogStash::Inputs::Exec < LogStash::Inputs::Base
15
+
16
+ config_name "exec"
17
+ milestone 2
18
+
19
+ default :codec, "plain"
20
+
21
+ # Set this to true to enable debugging on an input.
22
+ config :debug, :validate => :boolean, :default => false
23
+
24
+ # Command to run. For example, "uptime"
25
+ config :command, :validate => :string, :required => true
26
+
27
+ # Interval to run the command. Value is in seconds.
28
+ config :interval, :validate => :number, :required => true
29
+
30
+ public
31
+ def register
32
+ @logger.info("Registering Exec Input", :type => @type,
33
+ :command => @command, :interval => @interval)
34
+ end # def register
35
+
36
+ public
37
+ def run(queue)
38
+ hostname = Socket.gethostname
39
+ loop do
40
+ start = Time.now
41
+ @logger.info("Running exec", :command => @command) if @debug
42
+ out = IO.popen(@command)
43
+ # out.read will block until the process finishes.
44
+ @codec.decode(out.read) do |event|
45
+ decorate(event)
46
+ event["host"] = hostname
47
+ event["command"] = @command
48
+ queue << event
49
+ end
50
+
51
+ duration = Time.now - start
52
+ if @debug
53
+ @logger.info("Command completed", :command => @command,
54
+ :duration => duration)
55
+ end
56
+
57
+ # Sleep for the remainder of the interval, or 0 if the duration ran
58
+ # longer than the interval.
59
+ sleeptime = [0, @interval - duration].max
60
+ if sleeptime == 0
61
+ @logger.warn("Execution ran longer than the interval. Skipping sleep.",
62
+ :command => @command, :duration => duration,
63
+ :interval => @interval)
64
+ else
65
+ sleep(sleeptime)
66
+ end
67
+ end # loop
68
+ end # def run
69
+ end # class LogStash::Inputs::Exec