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,72 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Collect data from WMI query
7
+ #
8
+ # This is useful for collecting performance metrics and other data
9
+ # which is accessible via WMI on a Windows host
10
+ #
11
+ # Example:
12
+ #
13
+ # input {
14
+ # wmi {
15
+ # query => "select * from Win32_Process"
16
+ # interval => 10
17
+ # }
18
+ # wmi {
19
+ # query => "select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor where name = '_Total'"
20
+ # }
21
+ # }
22
+ class LogStash::Inputs::WMI < LogStash::Inputs::Base
23
+
24
+ config_name "wmi"
25
+ milestone 1
26
+
27
+ # WMI query
28
+ config :query, :validate => :string, :required => true
29
+ # Polling interval
30
+ config :interval, :validate => :number, :default => 10
31
+
32
+ public
33
+ def register
34
+
35
+ @host = Socket.gethostname
36
+ @logger.info("Registering wmi input", :query => @query)
37
+
38
+ if RUBY_PLATFORM == "java"
39
+ # make use of the same fix used for the eventlog input
40
+ require "logstash/inputs/eventlog/racob_fix"
41
+ require "jruby-win32ole"
42
+ else
43
+ require "win32ole"
44
+ end
45
+ end # def register
46
+
47
+ public
48
+ def run(queue)
49
+ @wmi = WIN32OLE.connect("winmgmts://")
50
+
51
+ begin
52
+ @logger.debug("Executing WMI query '#{@query}'")
53
+ loop do
54
+ @wmi.ExecQuery(@query).each do |wmiobj|
55
+ # create a single event for all properties in the collection
56
+ event = LogStash::Event.new
57
+ event["host"] = @host
58
+ decorate(event)
59
+ wmiobj.Properties_.each do |prop|
60
+ event[prop.name] = prop.value
61
+ end
62
+ queue << event
63
+ end
64
+ sleep @interval
65
+ end # loop
66
+ rescue Exception => ex
67
+ @logger.error("WMI query error: #{ex}\n#{ex.backtrace}")
68
+ sleep @interval
69
+ retry
70
+ end # begin/rescue
71
+ end # def run
72
+ end # class LogStash::Inputs::WMI
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # This input allows you to receive events over XMPP/Jabber.
6
+ #
7
+ # This plugin can be used for accepting events from humans or applications
8
+ # XMPP, or you can use it for PubSub or general message passing for logstash to
9
+ # logstash.
10
+ class LogStash::Inputs::Xmpp < LogStash::Inputs::Base
11
+
12
+ config_name "xmpp"
13
+ milestone 2
14
+
15
+ default :codec, "plain"
16
+
17
+ # The user or resource ID, like foo@example.com.
18
+ config :user, :validate => :string, :required => :true
19
+
20
+ # The xmpp password for the user/identity.
21
+ config :password, :validate => :password, :required => :true
22
+
23
+ # if muc/multi-user-chat required, give the name of the room that
24
+ # you want to join: room@conference.domain/nick
25
+ config :rooms, :validate => :array
26
+
27
+ # The xmpp server to connect to. This is optional. If you omit this setting,
28
+ # the host on the user/identity is used. (foo.com for user@foo.com)
29
+ config :host, :validate => :string
30
+
31
+ # Set to true to enable greater debugging in XMPP. Useful for debugging
32
+ # network/authentication erros.
33
+ config :debug, :validate => :boolean, :default => false
34
+
35
+ public
36
+ def register
37
+ require 'xmpp4r' # xmpp4r gem
38
+ Jabber::debug = true if @debug
39
+
40
+ @client = Jabber::Client.new(Jabber::JID.new(@user))
41
+ @client.connect(@host) # it is ok if host is nil
42
+ @client.auth(@password.value)
43
+ @client.send(Jabber::Presence.new.set_type(:available))
44
+
45
+ # load the MUC Client if we are joining rooms.
46
+ require 'xmpp4r/muc/helper/simplemucclient' if @rooms && !@rooms.empty?
47
+ end # def register
48
+
49
+ public
50
+ def run(queue)
51
+ if @rooms
52
+ @rooms.each do |room| # handle muc messages in different rooms
53
+ @muc = Jabber::MUC::SimpleMUCClient.new(@client)
54
+ @muc.join(room)
55
+ @muc.on_message do |time,from,body|
56
+ @codec.decode(body) do |event|
57
+ decorate(event)
58
+ event["room"] = room
59
+ event["from"] = from
60
+ queue << event
61
+ end
62
+ end # @muc.on_message
63
+ end # @rooms.each
64
+ end # if @rooms
65
+
66
+ @client.add_message_callback do |msg| # handle direct/private messages
67
+ # accept normal msgs (skip presence updates, etc)
68
+ if msg.body != nil
69
+ @codec.decode(msg.body) do |event|
70
+ decorate(event)
71
+ # Maybe "from" should just be a hash:
72
+ # { "node" => ..., "domain" => ..., "resource" => ... }
73
+ event["from"] = "#{msg.from.node}@#{msg.from.domain}/#{msg.from.resource}"
74
+ queue << event
75
+ end
76
+ end
77
+ end # @client.add_message_callback
78
+ sleep
79
+ end # def run
80
+
81
+ end # class LogStash::Inputs::Xmpp
@@ -0,0 +1,143 @@
1
+ # encoding: utf-8
2
+ require "date"
3
+ require "logstash/inputs/rabbitmq"
4
+ require "zlib"
5
+
6
+ # Read Zenoss events from the zenoss.zenevents fanout exchange.
7
+ #
8
+ class LogStash::Inputs::Zenoss < LogStash::Inputs::RabbitMQ
9
+
10
+ config_name "zenoss"
11
+ milestone 1
12
+
13
+ # Your rabbitmq server address
14
+ config :host, :validate => :string, :default => "localhost"
15
+
16
+ # Your rabbitmq username
17
+ config :user, :validate => :string, :default => "zenoss"
18
+
19
+ # Your rabbitmq password
20
+ config :password, :validate => :password, :default => "zenoss"
21
+
22
+ # The name of the exchange to bind the queue. This is analogous to the 'rabbitmq
23
+ # output' [config 'name'](../outputs/rabbitmq)
24
+ config :exchange, :validate => :string, :default => "zenoss.zenevents"
25
+
26
+ # The routing key to use. This is only valid for direct or fanout exchanges
27
+ #
28
+ # * Routing keys are ignored on topic exchanges.
29
+ # * Wildcards are not valid on direct exchanges.
30
+ config :key, :validate => :string, :default => "zenoss.zenevent.#"
31
+
32
+ # The vhost to use. If you don't know what this is, leave the default.
33
+ config :vhost, :validate => :string, :default => "/zenoss"
34
+
35
+ def register
36
+ super
37
+ require "logstash/util/zenoss"
38
+ require "bunny"
39
+ end # def register
40
+
41
+ def run(queue)
42
+ begin
43
+ zep = Org::Zenoss::Protobufs::Zep
44
+
45
+ @logger.debug("Connecting with RabbitMQ settings #{@rabbitmq_settings.inspect}")
46
+ @bunny = Bunny.new(@rabbitmq_settings)
47
+ return if terminating?
48
+ @bunny.start
49
+ @bunny.qos({:prefetch_count => @prefetch_count})
50
+
51
+ @arguments_hash = Hash[*@arguments]
52
+
53
+ @logger.debug("Setting up queue #{@name.inspect}")
54
+ @queue = @bunny.queue(@name, {
55
+ :durable => @durable,
56
+ :auto_delete => @auto_delete,
57
+ :exclusive => @exclusive,
58
+ :arguments => @arguments_hash
59
+ })
60
+
61
+ @queue.bind(@exchange, :key => @key)
62
+
63
+ @queue.subscribe({:ack => @ack}) do |data|
64
+
65
+ # Zenoss can optionally compress message payloads.
66
+ if data[:header].content_encoding == "deflate"
67
+ data[:payload] = Zlib::Inflate.inflate(data[:payload])
68
+ end
69
+
70
+ # Decode the payload into an EventSummary.
71
+ summary = zep::EventSummary.decode(data[:payload])
72
+
73
+ # This should never happen, but skip it if it does.
74
+ next unless summary.occurrence.length > 0
75
+
76
+ occurrence = summary.occurrence[0]
77
+ #timestamp = DateTime.strptime(occurrence.created_time.to_s, "%Q").to_s
78
+ timestamp = Time.at(occurrence.created_time / 1000.0)
79
+
80
+ # LogStash event properties.
81
+ event = LogStash::Event.new(
82
+ "@timestamp" => timestamp,
83
+ "type" => @type,
84
+ "host" => occurrence.actor.element_title,
85
+ "message" => occurrence.message,
86
+ )
87
+ decorate(event)
88
+
89
+ # Direct mappings from summary.
90
+ %w{uuid}.each do |property|
91
+ property_value = occurrence.send property
92
+ if !property_value.nil?
93
+ event[property] = property_value
94
+ end
95
+ end
96
+
97
+ # Direct mappings from occurrence.
98
+ %w{
99
+ fingerprint event_class event_class_key event_key event_group agent
100
+ syslog_facility nt_event_code monitor
101
+ }.each do |property|
102
+ property_value = occurrence.send property
103
+ if !property_value.nil?
104
+ event[property] = property_value
105
+ end
106
+ end
107
+
108
+ # Enum Mappings.
109
+ event["severity"] = zep::EventSeverity.constants[occurrence.severity]
110
+
111
+ if !occurrence.status.nil?
112
+ event["status"] = zep::EventStatus.constants[occurrence.status]
113
+ end
114
+
115
+ if !occurrence.syslog_priority.nil?
116
+ event["syslog_priority"] = zep::SyslogPriority.constants[
117
+ occurrence.syslog_priority]
118
+ end
119
+
120
+ # Extra Details.
121
+ if !occurrence.details.nil?
122
+ occurrence.details.each do |detail|
123
+ if detail.value.length == 1
124
+ event[detail.name] = detail.value[0]
125
+ else
126
+ event[detail.name] = detail.value
127
+ end
128
+ end
129
+ end
130
+
131
+ queue << event
132
+ end # @queue.subscribe
133
+
134
+ rescue *[Bunny::ConnectionError, Bunny::ServerDownError] => e
135
+ @logger.error("RabbitMQ connection error, will reconnect: #{e}")
136
+ # Sleep for a bit before retrying.
137
+ # TODO(sissel): Write 'backoff' method?
138
+ sleep(1)
139
+ retry
140
+ end # begin/rescue
141
+ end # def run
142
+
143
+ end # class LogStash::Inputs::Zenoss
@@ -0,0 +1,165 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "socket"
5
+
6
+ # Read events over a 0MQ SUB socket.
7
+ #
8
+ # You need to have the 0mq 2.1.x library installed to be able to use
9
+ # this input plugin.
10
+ #
11
+ # The default settings will create a subscriber binding to tcp://127.0.0.1:2120
12
+ # waiting for connecting publishers.
13
+ #
14
+ class LogStash::Inputs::ZeroMQ < LogStash::Inputs::Base
15
+
16
+ config_name "zeromq"
17
+ milestone 2
18
+
19
+ default :codec, "json"
20
+
21
+ # 0mq socket address to connect or bind
22
+ # Please note that `inproc://` will not work with logstash
23
+ # as each we use a context per thread.
24
+ # By default, inputs bind/listen
25
+ # and outputs connect
26
+ config :address, :validate => :array, :default => ["tcp://*:2120"]
27
+
28
+ # 0mq topology
29
+ # The default logstash topologies work as follows:
30
+ # * pushpull - inputs are pull, outputs are push
31
+ # * pubsub - inputs are subscribers, outputs are publishers
32
+ # * pair - inputs are clients, inputs are servers
33
+ #
34
+ # If the predefined topology flows don't work for you,
35
+ # you can change the 'mode' setting
36
+ # TODO (lusis) add req/rep MAYBE
37
+ # TODO (lusis) add router/dealer
38
+ config :topology, :validate => ["pushpull", "pubsub", "pair"], :required => true
39
+
40
+ # 0mq topic
41
+ # This is used for the 'pubsub' topology only
42
+ # On inputs, this allows you to filter messages by topic
43
+ # On outputs, this allows you to tag a message for routing
44
+ # NOTE: ZeroMQ does subscriber side filtering.
45
+ # NOTE: All topics have an implicit wildcard at the end
46
+ # You can specify multiple topics here
47
+ config :topic, :validate => :array
48
+
49
+ # mode
50
+ # server mode binds/listens
51
+ # client mode connects
52
+ config :mode, :validate => ["server", "client"], :default => "server"
53
+
54
+ # sender
55
+ # overrides the sender to
56
+ # set the source of the event
57
+ # default is "zmq+topology://type/"
58
+ config :sender, :validate => :string
59
+
60
+ # 0mq socket options
61
+ # This exposes zmq_setsockopt
62
+ # for advanced tuning
63
+ # see http://api.zeromq.org/2-1:zmq-setsockopt for details
64
+ #
65
+ # This is where you would set values like:
66
+ # ZMQ::HWM - high water mark
67
+ # ZMQ::IDENTITY - named queues
68
+ # ZMQ::SWAP_SIZE - space for disk overflow
69
+ #
70
+ # example: sockopt => ["ZMQ::HWM", 50, "ZMQ::IDENTITY", "my_named_queue"]
71
+ config :sockopt, :validate => :hash
72
+
73
+ public
74
+ def register
75
+ require "ffi-rzmq"
76
+ require "logstash/util/zeromq"
77
+ self.class.send(:include, LogStash::Util::ZeroMQ)
78
+
79
+ case @topology
80
+ when "pair"
81
+ zmq_const = ZMQ::PAIR
82
+ when "pushpull"
83
+ zmq_const = ZMQ::PULL
84
+ when "pubsub"
85
+ zmq_const = ZMQ::SUB
86
+ end # case socket_type
87
+ @zsocket = context.socket(zmq_const)
88
+ error_check(@zsocket.setsockopt(ZMQ::LINGER, 1),
89
+ "while setting ZMQ::LINGER == 1)")
90
+
91
+ if @sockopt
92
+ setopts(@zsocket, @sockopt)
93
+ end
94
+
95
+ @address.each do |addr|
96
+ setup(@zsocket, addr)
97
+ end
98
+
99
+ if @topology == "pubsub"
100
+ if @topic.nil?
101
+ @logger.debug("ZMQ - No topic provided. Subscribing to all messages")
102
+ error_check(@zsocket.setsockopt(ZMQ::SUBSCRIBE, ""),
103
+ "while setting ZMQ::SUBSCRIBE")
104
+ else
105
+ @topic.each do |t|
106
+ @logger.debug("ZMQ subscribing to topic: #{t}")
107
+ error_check(@zsocket.setsockopt(ZMQ::SUBSCRIBE, t),
108
+ "while setting ZMQ::SUBSCRIBE == #{t}")
109
+ end
110
+ end
111
+ end
112
+
113
+ end # def register
114
+
115
+ def teardown
116
+ error_check(@zsocket.close, "while closing the zmq socket")
117
+ end # def teardown
118
+
119
+ def server?
120
+ @mode == "server"
121
+ end # def server?
122
+
123
+ def run(output_queue)
124
+ host = Socket.gethostname
125
+ begin
126
+ loop do
127
+ # Here's the unified receiver
128
+ # Get the first part as the msg
129
+ m1 = ""
130
+ rc = @zsocket.recv_string(m1)
131
+ error_check(rc, "in recv_string")
132
+ @logger.debug("ZMQ receiving", :event => m1)
133
+ msg = m1
134
+ # If we have more parts, we'll eat the first as the topic
135
+ # and set the message to the second part
136
+ if @zsocket.more_parts?
137
+ @logger.debug("Multipart message detected. Setting @message to second part. First part was: #{m1}")
138
+ m2 = ''
139
+ rc2 = @zsocket.recv_string(m2)
140
+ error_check(rc2, "in recv_string")
141
+ @logger.debug("ZMQ receiving", :event => m2)
142
+ msg = m2
143
+ end
144
+
145
+ @codec.decode(msg) do |event|
146
+ event["host"] ||= host
147
+ decorate(event)
148
+ output_queue << event
149
+ end
150
+ end
151
+ rescue LogStash::ShutdownSignal
152
+ # shutdown
153
+ return
154
+ rescue => e
155
+ @logger.debug("ZMQ Error", :subscriber => @zsocket,
156
+ :exception => e)
157
+ retry
158
+ end # begin
159
+ end # def run
160
+
161
+ private
162
+ def build_source_string
163
+ id = @address.first.clone
164
+ end
165
+ end # class LogStash::Inputs::ZeroMQ