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,41 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/tcp"
3
+ require "logstash/namespace"
4
+
5
+ # Receive graphite metrics. This plugin understands the text-based graphite
6
+ # carbon protocol. Both 'N' and specific-timestamp forms are supported, example:
7
+ #
8
+ # mysql.slow_query.count 204 N
9
+ # haproxy.live_backends 7 1364608909
10
+ #
11
+ # 'N' means 'now' for a timestamp. This plugin also supports having the time
12
+ # specified in the metric payload:
13
+ #
14
+ # For every metric received from a client, a single event will be emitted with
15
+ # the metric name as the field (like 'mysql.slow_query.count') and the metric
16
+ # value as the field's value.
17
+ class LogStash::Inputs::Graphite < LogStash::Inputs::Tcp
18
+ config_name "graphite"
19
+ milestone 1
20
+
21
+ ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
22
+
23
+ public
24
+ def run(output_queue)
25
+ @queue = output_queue
26
+ super(self)
27
+ end
28
+
29
+ # This is a silly hack to make the superclass (Tcp) give us a finished event
30
+ # so that we can parse it accordingly.
31
+ def <<(event)
32
+ name, value, time = event["message"].split(" ")
33
+ event[name] = value.to_f
34
+
35
+ if time != "N"
36
+ event["@timestamp"] = Time.at(time.to_i).gmtime
37
+ end
38
+
39
+ @queue << event
40
+ end
41
+ end # class LogStash::Inputs::Graphite
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # Stream events from a heroku app's logs.
6
+ #
7
+ # This will read events in a manner similar to how the `heroku logs -t` command
8
+ # fetches logs.
9
+ #
10
+ # Recommended filters:
11
+ #
12
+ # filter {
13
+ # grok {
14
+ # pattern => "^%{TIMESTAMP_ISO8601:timestamp} %{WORD:component}\[%{WORD:process}(?:\.%{INT:instance:int})?\]: %{DATA:message}$"
15
+ # }
16
+ # date { timestamp => ISO8601 }
17
+ # }
18
+ class LogStash::Inputs::Heroku < LogStash::Inputs::Base
19
+ config_name "heroku"
20
+ milestone 1
21
+
22
+ default :codec, "plain"
23
+
24
+ # The name of your heroku application. This is usually the first part of the
25
+ # the domain name 'my-app-name.herokuapp.com'
26
+ config :app, :validate => :string, :required => true
27
+
28
+ public
29
+ def register
30
+ require "heroku"
31
+ require "logstash/util/buftok"
32
+ end # def register
33
+
34
+ public
35
+ def run(queue)
36
+ client = Heroku::Client.new(Heroku::Auth.user, Heroku::Auth.password)
37
+
38
+ # The 'Herok::Client#read_logs' method emits chunks of text not bounded
39
+ # by event barriers like newlines.
40
+ # tail=1 means to follow logs
41
+ # I *think* setting num=1 means we only get 1 historical event. Setting
42
+ # this to 0 makes it fetch *all* events, not what I want.
43
+ client.read_logs(@app, ["tail=1", "num=1"]) do |chunk|
44
+ @codec.decode(chunk) do |event|
45
+ decorate(event)
46
+ event["app"] = @app
47
+ queue << event
48
+ end
49
+ end
50
+ end # def run
51
+ end # class LogStash::Inputs::Heroku
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "stud/interval"
5
+ require "socket" # for Socket.gethostname
6
+
7
+ # Read mail from IMAP servers
8
+ #
9
+ # Periodically scans INBOX and moves any read messages
10
+ # to the trash.
11
+ class LogStash::Inputs::IMAP < LogStash::Inputs::Base
12
+ config_name "imap"
13
+ milestone 1
14
+ ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
15
+
16
+ config :host, :validate => :string, :required => true
17
+ config :port, :validate => :number
18
+
19
+ config :user, :validate => :string, :required => true
20
+ config :password, :validate => :password, :required => true
21
+ config :secure, :validate => :boolean, :default => true
22
+
23
+ config :fetch_count, :validate => :number, :default => 50
24
+ config :lowercase_headers, :validate => :boolean, :default => true
25
+ config :check_interval, :validate => :number, :default => 300
26
+ config :delete, :validate => :boolean, :default => false
27
+
28
+ # For multipart messages, use the first part that has this
29
+ # content-type as the event message.
30
+ config :content_type, :validate => :string, :default => "text/plain"
31
+
32
+ public
33
+ def register
34
+ require "net/imap" # in stdlib
35
+ require "mail" # gem 'mail'
36
+
37
+ if @port.nil?
38
+ if @secure
39
+ @port = 993
40
+ else
41
+ @port = 143
42
+ end
43
+ end
44
+
45
+ @content_type_re = Regexp.new("^" + @content_type)
46
+ end # def register
47
+
48
+ def connect
49
+ imap = Net::IMAP.new(@host, :port => @port, :ssl => @secure)
50
+ imap.login(@user, @password.value)
51
+ return imap
52
+ end
53
+
54
+ def run(queue)
55
+ Stud.interval(@check_interval) do
56
+ check_mail(queue)
57
+ end
58
+ end
59
+
60
+ def check_mail(queue)
61
+ # TODO(sissel): handle exceptions happening during runtime:
62
+ # EOFError, OpenSSL::SSL::SSLError
63
+ imap = connect
64
+ imap.select("INBOX")
65
+ ids = imap.search("NOT SEEN")
66
+
67
+ ids.each_slice(@fetch_count) do |id_set|
68
+ items = imap.fetch(id_set, "RFC822")
69
+ items.each do |item|
70
+ next unless item.attr.has_key?("RFC822")
71
+ mail = Mail.read_from_string(item.attr["RFC822"])
72
+ queue << parse_mail(mail)
73
+ end
74
+
75
+ imap.store(id_set, '+FLAGS', @delete ? :Deleted : :Seen)
76
+ end
77
+
78
+ imap.close
79
+ imap.disconnect
80
+ end # def run
81
+
82
+ def parse_mail(mail)
83
+ # TODO(sissel): What should a multipart message look like as an event?
84
+ # For now, just take the plain-text part and set it as the message.
85
+ if mail.parts.count == 0
86
+ # No multipart message, just use the body as the event text
87
+ message = mail.body.decoded
88
+ else
89
+ # Multipart message; use the first text/plain part we find
90
+ part = mail.parts.find { |p| p.content_type.match @content_type_re } || mail.parts.first
91
+ message = part.decoded
92
+ end
93
+
94
+ event = LogStash::Event.new("message" => message)
95
+
96
+ # Use the 'Date' field as the timestamp
97
+ event["@timestamp"] = mail.date.to_time.gmtime
98
+
99
+ # Add fields: Add message.header_fields { |h| h.name=> h.value }
100
+ mail.header_fields.each do |header|
101
+ if @lowercase_headers
102
+ # 'header.name' can sometimes be a Mail::Multibyte::Chars, get it in
103
+ # String form
104
+ name = header.name.to_s.downcase
105
+ else
106
+ name = header.name.to_s
107
+ end
108
+ # Call .decoded on the header in case it's in encoded-word form.
109
+ # Details at:
110
+ # https://github.com/mikel/mail/blob/master/README.md#encodings
111
+ # http://tools.ietf.org/html/rfc2047#section-2
112
+ value = header.decoded
113
+
114
+ # Assume we already processed the 'date' above.
115
+ next if name == "Date"
116
+
117
+ case event[name]
118
+ # promote string to array if a header appears multiple times
119
+ # (like 'received')
120
+ when String; event[name] = [event[name], value]
121
+ when Array; event[name].is_a?(Array)
122
+ when nil; event[name] = value
123
+ end
124
+ end # mail.header_fields.each
125
+
126
+ decorate(event)
127
+
128
+ return event
129
+ end # def handle
130
+
131
+ public
132
+ def teardown
133
+ $stdin.close
134
+ finished
135
+ end # def teardown
136
+ end # class LogStash::Inputs::IMAP
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "thread"
5
+
6
+ # Read events from an IRC Server.
7
+ #
8
+ class LogStash::Inputs::Irc < LogStash::Inputs::Base
9
+
10
+ config_name "irc"
11
+ milestone 1
12
+
13
+ default :codec, "plain"
14
+
15
+ # Host of the IRC Server to connect to.
16
+ config :host, :validate => :string, :required => true
17
+
18
+ # Port for the IRC Server
19
+ config :port, :validate => :number, :default => 6667
20
+
21
+ # Set this to true to enable SSL.
22
+ config :secure, :validate => :boolean, :default => false
23
+
24
+ # IRC Nickname
25
+ config :nick, :validate => :string, :default => "logstash"
26
+
27
+ # IRC Username
28
+ config :user, :validate => :string, :default => "logstash"
29
+
30
+ # IRC Real name
31
+ config :real, :validate => :string, :default => "logstash"
32
+
33
+ # IRC Server password
34
+ config :password, :validate => :password
35
+
36
+ # Channels to join and read messages from.
37
+ #
38
+ # These should be full channel names including the '#' symbol, such as
39
+ # "#logstash".
40
+ config :channels, :validate => :array, :required => true
41
+
42
+ public
43
+ def register
44
+ require "cinch"
45
+ @irc_queue = Queue.new
46
+ @logger.info("Connecting to irc server", :host => @host, :port => @port, :nick => @nick, :channels => @channels)
47
+
48
+ @bot = Cinch::Bot.new
49
+ @bot.loggers.clear
50
+ @bot.configure do |c|
51
+ c.server = @host
52
+ c.port = @port
53
+ c.nick = @nick
54
+ c.user = @user
55
+ c.realname = @real
56
+ c.channels = @channels
57
+ c.password = @password.value rescue nil
58
+ c.ssl.use = @secure
59
+ end
60
+ queue = @irc_queue
61
+ @bot.on :channel do |m|
62
+ queue << m
63
+ end
64
+ end # def register
65
+
66
+ public
67
+ def run(output_queue)
68
+ Thread.new(@bot) do |bot|
69
+ bot.start
70
+ end
71
+ loop do
72
+ msg = @irc_queue.pop
73
+ if msg.user
74
+ @codec.decode(msg.message) do |event|
75
+ decorate(event)
76
+ event["channel"] = msg.channel.to_s
77
+ event["nick"] = msg.user.nick
78
+ event["server"] = "#{@host}:#{@port}"
79
+ output_queue << event
80
+ end
81
+ end
82
+ end
83
+ end # def run
84
+ end # class LogStash::Inputs::Irc
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+ require "logstash/util/socket_peer"
5
+ require "socket"
6
+ require "timeout"
7
+
8
+ # Read events over a TCP socket from Log4j SocketAppender.
9
+ #
10
+ # Can either accept connections from clients or connect to a server,
11
+ # depending on `mode`. Depending on mode, you need a matching SocketAppender or SocketHubAppender on the remote side
12
+ class LogStash::Inputs::Log4j < LogStash::Inputs::Base
13
+
14
+ config_name "log4j"
15
+ milestone 1
16
+
17
+ # When mode is `server`, the address to listen on.
18
+ # When mode is `client`, the address to connect to.
19
+ config :host, :validate => :string, :default => "0.0.0.0"
20
+
21
+ # When mode is `server`, the port to listen on.
22
+ # When mode is `client`, the port to connect to.
23
+ config :port, :validate => :number, :required => true
24
+
25
+ # Read timeout in seconds. If a particular tcp connection is
26
+ # idle for more than this timeout period, we will assume
27
+ # it is dead and close it.
28
+ # If you never want to timeout, use -1.
29
+ config :data_timeout, :validate => :number, :default => 5
30
+
31
+ # Mode to operate in. `server` listens for client connections,
32
+ # `client` connects to a server.
33
+ config :mode, :validate => ["server", "client"], :default => "server"
34
+
35
+ def initialize(*args)
36
+ super(*args)
37
+ end # def initialize
38
+
39
+ public
40
+ def register
41
+ require "java"
42
+ require "jruby/serialization"
43
+
44
+ if __FILE__ !~ /^(jar:)?file:\/\//
45
+ if File.exists?("vendor/jar/elasticsearch-0.90.3/lib/log4j-1.2.17.jar")
46
+ require "vendor/jar/elasticsearch-0.90.3/lib/log4j-1.2.17.jar"
47
+ end
48
+ end
49
+
50
+ if server?
51
+ @logger.info("Starting Log4j input listener", :address => "#{@host}:#{@port}")
52
+ @server_socket = TCPServer.new(@host, @port)
53
+ end
54
+ @logger.info("Log4j input")
55
+ end # def register
56
+
57
+ private
58
+ def handle_socket(socket, output_queue)
59
+ begin
60
+ # JRubyObjectInputStream uses JRuby class path to find the class to de-serialize to
61
+ ois = JRubyObjectInputStream.new(java.io.BufferedInputStream.new(socket.to_inputstream))
62
+ loop do
63
+ # NOTE: event_raw is org.apache.log4j.spi.LoggingEvent
64
+ log4j_obj = ois.readObject
65
+ event = LogStash::Event.new("message" => log4j_obj.getRenderedMessage)
66
+ decorate(event)
67
+ event["host"] = socket.peer
68
+ event["path"] = log4j_obj.getLoggerName
69
+ event["priority"] = log4j_obj.getLevel.toString
70
+ event["logger_name"] = log4j_obj.getLoggerName
71
+ event["thread"] = log4j_obj.getThreadName
72
+ event["class"] = log4j_obj.getLocationInformation.getClassName
73
+ event["file"] = log4j_obj.getLocationInformation.getFileName + ":" + log4j_obj.getLocationInformation.getLineNumber
74
+ event["method"] = log4j_obj.getLocationInformation.getMethodName
75
+ event["NDC"] = log4j_obj.getNDC if log4j_obj.getNDC
76
+ event["stack_trace"] = log4j_obj.getThrowableStrRep.to_a.join("\n") if log4j_obj.getThrowableInformation
77
+
78
+ # Add the MDC context properties to '@fields'
79
+ if log4j_obj.getProperties
80
+ log4j_obj.getPropertyKeySet.each do |key|
81
+ event[key] = log4j_obj.getProperty(key)
82
+ end
83
+ end
84
+
85
+ output_queue << event
86
+ end # loop do
87
+ rescue => e
88
+ @logger.debug("Closing connection", :client => socket.peer,
89
+ :exception => e)
90
+ rescue Timeout::Error
91
+ @logger.debug("Closing connection after read timeout",
92
+ :client => socket.peer)
93
+ end # begin
94
+ ensure
95
+ begin
96
+ socket.close
97
+ rescue IOError
98
+ pass
99
+ end # begin
100
+ end
101
+
102
+ private
103
+ def server?
104
+ @mode == "server"
105
+ end # def server?
106
+
107
+ private
108
+ def readline(socket)
109
+ line = socket.readline
110
+ end # def readline
111
+
112
+ public
113
+ def run(output_queue)
114
+ if server?
115
+ loop do
116
+ # Start a new thread for each connection.
117
+ Thread.start(@server_socket.accept) do |s|
118
+ # TODO(sissel): put this block in its own method.
119
+
120
+ # monkeypatch a 'peer' method onto the socket.
121
+ s.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
122
+ @logger.debug("Accepted connection", :client => s.peer,
123
+ :server => "#{@host}:#{@port}")
124
+ handle_socket(s, output_queue)
125
+ end # Thread.start
126
+ end # loop
127
+ else
128
+ loop do
129
+ client_socket = TCPSocket.new(@host, @port)
130
+ client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
131
+ @logger.debug("Opened connection", :client => "#{client_socket.peer}")
132
+ handle_socket(client_socket, output_queue)
133
+ end # loop
134
+ end
135
+ end # def run
136
+ end # class LogStash::Inputs::Log4j