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,84 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require 'pp'
5
+
6
+ class LogStash::Inputs::Stomp < LogStash::Inputs::Base
7
+ config_name "stomp"
8
+ milestone 2
9
+
10
+ default :codec, "plain"
11
+
12
+ # The address of the STOMP server.
13
+ config :host, :validate => :string, :default => "localhost", :required => true
14
+
15
+ # The port to connet to on your STOMP server.
16
+ config :port, :validate => :number, :default => 61613
17
+
18
+ # The username to authenticate with.
19
+ config :user, :validate => :string, :default => ""
20
+
21
+ # The password to authenticate with.
22
+ config :password, :validate => :password, :default => ""
23
+
24
+ # The destination to read events from.
25
+ #
26
+ # Example: "/topic/logstash"
27
+ config :destination, :validate => :string, :required => true
28
+
29
+ # The vhost to use
30
+ config :vhost, :validate => :string, :default => nil
31
+
32
+ # Enable debugging output?
33
+ config :debug, :validate => :boolean, :default => false
34
+
35
+ private
36
+ def connect
37
+ begin
38
+ @client.connect
39
+ @logger.debug("Connected to stomp server") if @client.connected?
40
+ rescue => e
41
+ @logger.debug("Failed to connect to stomp server, will retry", :exception => e, :backtrace => e.backtrace)
42
+ sleep 2
43
+ retry
44
+ end
45
+ end
46
+
47
+ public
48
+ def register
49
+ require "onstomp"
50
+ @client = OnStomp::Client.new("stomp://#{@host}:#{@port}", :login => @user, :passcode => @password.value)
51
+ @client.host = @vhost if @vhost
52
+ @stomp_url = "stomp://#{@user}:#{@password}@#{@host}:#{@port}/#{@destination}"
53
+
54
+ # Handle disconnects
55
+ @client.on_connection_closed {
56
+ connect
57
+ subscription_handler # is required for re-subscribing to the destination
58
+ }
59
+ connect
60
+ end # def register
61
+
62
+ private
63
+ def subscription_handler
64
+ @client.subscribe(@destination) do |msg|
65
+ @codec.decode(msg.body) do |event|
66
+ decorate(event)
67
+ @output_queue << event
68
+ end
69
+ end
70
+ #In the event that there is only Stomp input plugin instances
71
+ #the process ends prematurely. The above code runs, and return
72
+ #the flow control to the 'run' method below. After that, the
73
+ #method "run_input" from agent.rb marks 'done' as 'true' and calls
74
+ #'finish' over the Stomp plugin instance.
75
+ #'Sleeping' the plugin leves the instance alive.
76
+ sleep
77
+ end
78
+
79
+ public
80
+ def run(output_queue)
81
+ @output_queue = output_queue
82
+ subscription_handler
83
+ end # def run
84
+ end # class LogStash::Inputs::Stomp
@@ -0,0 +1,237 @@
1
+ # encoding: utf-8
2
+ require "date"
3
+ require "logstash/filters/grok"
4
+ require "logstash/filters/date"
5
+ require "logstash/inputs/base"
6
+ require "logstash/namespace"
7
+ require "socket"
8
+ require "thread_safe"
9
+
10
+ # Read syslog messages as events over the network.
11
+ #
12
+ # This input is a good choice if you already use syslog today.
13
+ # It is also a good choice if you want to receive logs from
14
+ # appliances and network devices where you cannot run your own
15
+ # log collector.
16
+ #
17
+ # Of course, 'syslog' is a very muddy term. This input only supports RFC3164
18
+ # syslog with some small modifications. The date format is allowed to be
19
+ # RFC3164 style or ISO8601. Otherwise the rest of the RFC3164 must be obeyed.
20
+ # If you do not use RFC3164, do not use this input.
21
+ #
22
+ # Note: this input will start listeners on both TCP and UDP
23
+ class LogStash::Inputs::Syslog < LogStash::Inputs::Base
24
+ config_name "syslog"
25
+ milestone 1
26
+
27
+ default :codec, "plain"
28
+
29
+ # The address to listen on
30
+ config :host, :validate => :string, :default => "0.0.0.0"
31
+
32
+ # The port to listen on. Remember that ports less than 1024 (privileged
33
+ # ports) may require root to use.
34
+ config :port, :validate => :number, :default => 514
35
+
36
+ # Use label parsing for severity and facility levels
37
+ config :use_labels, :validate => :boolean, :default => true
38
+
39
+ # Labels for facility levels
40
+ # This comes from RFC3164.
41
+ config :facility_labels, :validate => :array, :default => [ "kernel", "user-level", "mail", "system", "security/authorization", "syslogd", "line printer", "network news", "UUCP", "clock", "security/authorization", "FTP", "NTP", "log audit", "log alert", "clock", "local0", "local1", "local2", "local3", "local4", "local5", "local6", "local7" ]
42
+
43
+ # Labels for severity levels
44
+ # This comes from RFC3164.
45
+ config :severity_labels, :validate => :array, :default => [ "Emergency" , "Alert", "Critical", "Error", "Warning", "Notice", "Informational", "Debug" ]
46
+
47
+ public
48
+ def initialize(params)
49
+ super
50
+ @shutdown_requested = false
51
+ BasicSocket.do_not_reverse_lookup = true
52
+ end # def initialize
53
+
54
+ public
55
+ def register
56
+ @grok_filter = LogStash::Filters::Grok.new(
57
+ "overwrite" => "message",
58
+ "match" => { "message" => "<%{POSINT:priority}>%{SYSLOGLINE}" },
59
+ )
60
+
61
+ @date_filter = LogStash::Filters::Date.new(
62
+ "match" => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
63
+ )
64
+
65
+ @grok_filter.register
66
+ @date_filter.register
67
+
68
+ @tcp_clients = ThreadSafe::Array.new
69
+ end # def register
70
+
71
+ public
72
+ def run(output_queue)
73
+ # udp server
74
+ udp_thr = Thread.new do
75
+ begin
76
+ udp_listener(output_queue)
77
+ rescue => e
78
+ break if @shutdown_requested
79
+ @logger.warn("syslog udp listener died",
80
+ :address => "#{@host}:#{@port}", :exception => e,
81
+ :backtrace => e.backtrace)
82
+ sleep(5)
83
+ retry
84
+ end # begin
85
+ end # Thread.new
86
+
87
+ # tcp server
88
+ tcp_thr = Thread.new do
89
+ begin
90
+ tcp_listener(output_queue)
91
+ rescue => e
92
+ break if @shutdown_requested
93
+ @logger.warn("syslog tcp listener died",
94
+ :address => "#{@host}:#{@port}", :exception => e,
95
+ :backtrace => e.backtrace)
96
+ sleep(5)
97
+ retry
98
+ end # begin
99
+ end # Thread.new
100
+
101
+ # If we exit and we're the only input, the agent will think no inputs
102
+ # are running and initiate a shutdown.
103
+ udp_thr.join
104
+ tcp_thr.join
105
+ end # def run
106
+
107
+ private
108
+ def udp_listener(output_queue)
109
+ @logger.info("Starting syslog udp listener", :address => "#{@host}:#{@port}")
110
+
111
+ if @udp
112
+ @udp.close
113
+ end
114
+
115
+ @udp = UDPSocket.new(Socket::AF_INET)
116
+ @udp.bind(@host, @port)
117
+
118
+ loop do
119
+ payload, client = @udp.recvfrom(9000)
120
+ # Ruby uri sucks, so don't use it.
121
+ @codec.decode(payload) do |event|
122
+ decorate(event)
123
+ event["host"] = client[3]
124
+ syslog_relay(event)
125
+ output_queue << event
126
+ end
127
+ end
128
+ ensure
129
+ close_udp
130
+ end # def udp_listener
131
+
132
+ private
133
+ def tcp_listener(output_queue)
134
+ @logger.info("Starting syslog tcp listener", :address => "#{@host}:#{@port}")
135
+ @tcp = TCPServer.new(@host, @port)
136
+ @tcp_clients = []
137
+
138
+ loop do
139
+ client = @tcp.accept
140
+ @tcp_clients << client
141
+ Thread.new(client) do |client|
142
+ ip, port = client.peeraddr[3], client.peeraddr[1]
143
+ @logger.info("new connection", :client => "#{ip}:#{port}")
144
+ LogStash::Util::set_thread_name("input|syslog|tcp|#{ip}:#{port}}")
145
+ begin
146
+ client.each do |line|
147
+ @codec.decode(line) do |event|
148
+ decorate(event)
149
+ event["host"] = ip
150
+ syslog_relay(event)
151
+ output_queue << event
152
+ end
153
+ end
154
+ rescue Errno::ECONNRESET
155
+ ensure
156
+ @tcp_clients.delete(client)
157
+ end
158
+ end # Thread.new
159
+ end # loop do
160
+ ensure
161
+ close_tcp
162
+ end # def tcp_listener
163
+
164
+ public
165
+ def teardown
166
+ @shutdown_requested = true
167
+ close_udp
168
+ close_tcp
169
+ finished
170
+ end
171
+
172
+ private
173
+ def close_udp
174
+ if @udp
175
+ @udp.close_read rescue nil
176
+ @udp.close_write rescue nil
177
+ end
178
+ @udp = nil
179
+ end
180
+
181
+ private
182
+ def close_tcp
183
+ # If we somehow have this left open, close it.
184
+ @tcp_clients.each do |client|
185
+ client.close rescue nil
186
+ end
187
+ @tcp.close if @tcp rescue nil
188
+ @tcp = nil
189
+ end
190
+
191
+ # Following RFC3164 where sane, we'll try to parse a received message
192
+ # as if you were relaying a syslog message to it.
193
+ # If the message cannot be recognized (see @grok_filter), we'll
194
+ # treat it like the whole event["message"] is correct and try to fill
195
+ # the missing pieces (host, priority, etc)
196
+ public
197
+ def syslog_relay(event)
198
+ @grok_filter.filter(event)
199
+
200
+ if event["tags"].nil? || !event["tags"].include?("_grokparsefailure")
201
+ # Per RFC3164, priority = (facility * 8) + severity
202
+ # = (facility << 3) & (severity)
203
+ priority = event["priority"].first.to_i rescue 13
204
+ severity = priority & 7 # 7 is 111 (3 bits)
205
+ facility = priority >> 3
206
+ event["priority"] = priority
207
+ event["severity"] = severity
208
+ event["facility"] = facility
209
+
210
+ event["timestamp"] = event["timestamp8601"] if event.include?("timestamp8601")
211
+ @date_filter.filter(event)
212
+ else
213
+ @logger.info? && @logger.info("NOT SYSLOG", :message => event["message"])
214
+
215
+ # RFC3164 says unknown messages get pri=13
216
+ priority = 13
217
+ event["priority"] = 13
218
+ event["severity"] = 5 # 13 & 7 == 5
219
+ event["facility"] = 1 # 13 >> 3 == 1
220
+ end
221
+
222
+ # Apply severity and facility metadata if
223
+ # use_labels => true
224
+ if @use_labels
225
+ facility_number = event["facility"]
226
+ severity_number = event["severity"]
227
+
228
+ if @facility_labels[facility_number]
229
+ event["facility_label"] = @facility_labels[facility_number]
230
+ end
231
+
232
+ if @severity_labels[severity_number]
233
+ event["severity_label"] = @severity_labels[severity_number]
234
+ end
235
+ end
236
+ end # def syslog_relay
237
+ end # class LogStash::Inputs::Syslog
@@ -0,0 +1,231 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/util/socket_peer"
5
+
6
+ # Read events over a TCP socket.
7
+ #
8
+ # Like stdin and file inputs, each event is assumed to be one line of text.
9
+ #
10
+ # Can either accept connections from clients or connect to a server,
11
+ # depending on `mode`.
12
+ class LogStash::Inputs::Tcp < LogStash::Inputs::Base
13
+ class Interrupted < StandardError; end
14
+ config_name "tcp"
15
+ milestone 2
16
+
17
+ default :codec, "line"
18
+
19
+ # When mode is `server`, the address to listen on.
20
+ # When mode is `client`, the address to connect to.
21
+ config :host, :validate => :string, :default => "0.0.0.0"
22
+
23
+ # When mode is `server`, the port to listen on.
24
+ # When mode is `client`, the port to connect to.
25
+ config :port, :validate => :number, :required => true
26
+
27
+ # The 'read' timeout in seconds. If a particular tcp connection is idle for
28
+ # more than this timeout period, we will assume it is dead and close it.
29
+ #
30
+ # If you never want to timeout, use -1.
31
+ config :data_timeout, :validate => :number, :default => -1
32
+
33
+ # Mode to operate in. `server` listens for client connections,
34
+ # `client` connects to a server.
35
+ config :mode, :validate => ["server", "client"], :default => "server"
36
+
37
+ # Enable ssl (must be set for other `ssl_` options to take effect)
38
+ config :ssl_enable, :validate => :boolean, :default => false
39
+
40
+ # Verify the identity of the other end of the ssl connection against the CA
41
+ # For input, sets the `@field.sslsubject` to that of the client certificate
42
+ config :ssl_verify, :validate => :boolean, :default => false
43
+
44
+ # ssl CA certificate, chainfile or CA path
45
+ # The system CA path is automatically included
46
+ config :ssl_cacert, :validate => :path
47
+
48
+ # ssl certificate
49
+ config :ssl_cert, :validate => :path
50
+
51
+ # ssl key
52
+ config :ssl_key, :validate => :path
53
+
54
+ # ssl key passphrase
55
+ config :ssl_key_passphrase, :validate => :password, :default => nil
56
+
57
+ def initialize(*args)
58
+ super(*args)
59
+ end # def initialize
60
+
61
+ public
62
+ def register
63
+ require "socket"
64
+ require "timeout"
65
+ require "openssl"
66
+ if @ssl_enable
67
+ @ssl_context = OpenSSL::SSL::SSLContext.new
68
+ @ssl_context.cert = OpenSSL::X509::Certificate.new(File.read(@ssl_cert))
69
+ @ssl_context.key = OpenSSL::PKey::RSA.new(File.read(@ssl_key),@ssl_key_passphrase)
70
+ if @ssl_verify
71
+ @cert_store = OpenSSL::X509::Store.new
72
+ # Load the system default certificate path to the store
73
+ @cert_store.set_default_paths
74
+ if File.directory?(@ssl_cacert)
75
+ @cert_store.add_path(@ssl_cacert)
76
+ else
77
+ @cert_store.add_file(@ssl_cacert)
78
+ end
79
+ @ssl_context.cert_store = @cert_store
80
+ @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
81
+ end
82
+ end # @ssl_enable
83
+
84
+ if server?
85
+ @logger.info("Starting tcp input listener", :address => "#{@host}:#{@port}")
86
+ begin
87
+ @server_socket = TCPServer.new(@host, @port)
88
+ rescue Errno::EADDRINUSE
89
+ @logger.error("Could not start TCP server: Address in use",
90
+ :host => @host, :port => @port)
91
+ raise
92
+ end
93
+ if @ssl_enable
94
+ @server_socket = OpenSSL::SSL::SSLServer.new(@server_socket, @ssl_context)
95
+ end # @ssl_enable
96
+ end
97
+ end # def register
98
+
99
+ private
100
+ def handle_socket(socket, client_address, output_queue, codec)
101
+ while true
102
+ buf = nil
103
+ # NOTE(petef): the timeout only hits after the line is read
104
+ # or socket dies
105
+ # TODO(sissel): Why do we have a timeout here? What's the point?
106
+ if @data_timeout == -1
107
+ buf = read(socket)
108
+ else
109
+ Timeout::timeout(@data_timeout) do
110
+ buf = read(socket)
111
+ end
112
+ end
113
+ codec.decode(buf) do |event|
114
+ decorate(event)
115
+ event["host"] = client_address
116
+ event["sslsubject"] = socket.peer_cert.subject if @ssl_enable && @ssl_verify
117
+ output_queue << event
118
+ end
119
+ end # loop do
120
+ rescue => e
121
+ codec.respond_to?(:flush) && codec.flush do |event|
122
+ decorate(event)
123
+ event["host"] = client_address
124
+ event["sslsubject"] = socket.peer_cert.subject if @ssl_enable && @ssl_verify
125
+ output_queue << event
126
+ end
127
+
128
+ @logger.debug("An error occurred. Closing connection",
129
+ :client => socket.peer, :exception => e)
130
+ ensure
131
+ begin
132
+ socket.close
133
+ rescue IOError
134
+ #pass
135
+ end # begin
136
+ end
137
+
138
+ private
139
+ def server?
140
+ @mode == "server"
141
+ end # def server?
142
+
143
+ private
144
+ def read(socket)
145
+ return socket.sysread(16384)
146
+ end # def readline
147
+
148
+ public
149
+ def run(output_queue)
150
+ if server?
151
+ run_server(output_queue)
152
+ else
153
+ run_client(output_queue)
154
+ end
155
+ end # def run
156
+
157
+ def run_server(output_queue)
158
+ @thread = Thread.current
159
+ @client_threads = []
160
+ loop do
161
+ # Start a new thread for each connection.
162
+ begin
163
+ @client_threads << Thread.start(@server_socket.accept) do |s|
164
+ # TODO(sissel): put this block in its own method.
165
+
166
+ # monkeypatch a 'peer' method onto the socket.
167
+ s.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
168
+ @logger.debug("Accepted connection", :client => s.peer,
169
+ :server => "#{@host}:#{@port}")
170
+ begin
171
+ handle_socket(s, s.peer, output_queue, @codec.clone)
172
+ rescue Interrupted
173
+ s.close rescue nil
174
+ end
175
+ end # Thread.start
176
+ rescue OpenSSL::SSL::SSLError => ssle
177
+ # NOTE(mrichar1): This doesn't return a useful error message for some reason
178
+ @logger.error("SSL Error", :exception => ssle,
179
+ :backtrace => ssle.backtrace)
180
+ rescue IOError, LogStash::ShutdownSignal
181
+ if @interrupted
182
+ # Intended shutdown, get out of the loop
183
+ @server_socket.close
184
+ @client_threads.each do |thread|
185
+ thread.raise(LogStash::ShutdownSignal)
186
+ end
187
+ break
188
+ else
189
+ # Else it was a genuine IOError caused by something else, so propagate it up..
190
+ raise
191
+ end
192
+ end
193
+ end # loop
194
+ rescue LogStash::ShutdownSignal
195
+ # nothing to do
196
+ ensure
197
+ @server_socket.close
198
+ end # def run_server
199
+
200
+ def run_client(output_queue)
201
+ @thread = Thread.current
202
+ while true
203
+ client_socket = TCPSocket.new(@host, @port)
204
+ if @ssl_enable
205
+ client_socket = OpenSSL::SSL::SSLSocket.new(client_socket, @ssl_context)
206
+ begin
207
+ client_socket.connect
208
+ rescue OpenSSL::SSL::SSLError => ssle
209
+ @logger.error("SSL Error", :exception => ssle,
210
+ :backtrace => ssle.backtrace)
211
+ # NOTE(mrichar1): Hack to prevent hammering peer
212
+ sleep(5)
213
+ next
214
+ end
215
+ end
216
+ client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
217
+ @logger.debug("Opened connection", :client => "#{client_socket.peer}")
218
+ handle_socket(client_socket, client_socket.peer, output_queue, @codec.clone)
219
+ end # loop
220
+ ensure
221
+ client_socket.close
222
+ end # def run
223
+
224
+ public
225
+ def teardown
226
+ if server?
227
+ @interrupted = true
228
+ @thread.raise(LogStash::ShutdownSignal)
229
+ end
230
+ end # def teardown
231
+ end # class LogStash::Inputs::Tcp