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,13 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+
4
+ # Global config registry.
5
+ module LogStash::Config::Registry
6
+ @registry = Hash.new
7
+ class << self
8
+ attr_accessor :registry
9
+
10
+ # TODO(sissel): Add some helper methods here.
11
+ end
12
+ end # module LogStash::Config::Registry
13
+
@@ -0,0 +1,18 @@
1
+ input {
2
+ rabbitmq {
3
+ port => 12345
4
+ tag => [ a, b, c ]
5
+ }
6
+
7
+ stomp {
8
+ port => 12345
9
+ tag => [ stomp ]
10
+ }
11
+ }
12
+
13
+ filter {
14
+ date {
15
+ hello => world
16
+ hello => "Hello"
17
+ }
18
+ }
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ module LogStash
3
+ class Error < ::StandardError; end
4
+ class ConfigurationError < Error; end
5
+ class PluginLoadingError < Error; end
6
+ class ShutdownSignal < StandardError; end
7
+
8
+ class Bug < Error; end
9
+ class ThisMethodWasRemoved < Bug; end
10
+ end
@@ -0,0 +1,262 @@
1
+ # encoding: utf-8
2
+ require "json"
3
+ require "time"
4
+ require "date"
5
+ require "logstash/namespace"
6
+ require "logstash/util/fieldreference"
7
+ require "logstash/time_addon"
8
+
9
+ # Use a custom serialization for jsonifying Time objects.
10
+ # TODO(sissel): Put this in a separate file.
11
+ class Time
12
+ def to_json(*args)
13
+ return iso8601(3).to_json(*args)
14
+ end
15
+
16
+ def inspect
17
+ return to_json
18
+ end
19
+ end
20
+
21
+ # the logstash event object.
22
+ #
23
+ # An event is simply a tuple of (timestamp, data).
24
+ # The 'timestamp' is an ISO8601 timestamp. Data is anything - any message,
25
+ # context, references, etc that are relevant to this event.
26
+ #
27
+ # Internally, this is represented as a hash with only two guaranteed fields.
28
+ #
29
+ # * "@timestamp" - an ISO8601 timestamp representing the time the event
30
+ # occurred at.
31
+ # * "@version" - the version of the schema. Currently "1"
32
+ #
33
+ # They are prefixed with an "@" symbol to avoid clashing with your
34
+ # own custom fields.
35
+ #
36
+ # When serialized, this is represented in JSON. For example:
37
+ #
38
+ # {
39
+ # "@timestamp": "2013-02-09T20:39:26.234Z",
40
+ # "@version": "1",
41
+ # message: "hello world"
42
+ # }
43
+ class LogStash::Event
44
+ class DeprecatedMethod < StandardError; end
45
+
46
+ CHAR_PLUS = "+"
47
+ TIMESTAMP = "@timestamp"
48
+ VERSION = "@version"
49
+ VERSION_ONE = "1"
50
+
51
+ public
52
+ def initialize(data={})
53
+ @cancelled = false
54
+
55
+ @data = data
56
+ data[VERSION] = VERSION_ONE if !@data.include?(VERSION)
57
+ if data.include?(TIMESTAMP)
58
+ t = data[TIMESTAMP]
59
+ if t.is_a?(String)
60
+ data[TIMESTAMP] = LogStash::Time.parse_iso8601(t)
61
+ end
62
+ else
63
+ data[TIMESTAMP] = ::Time.now.utc
64
+ end
65
+ end # def initialize
66
+
67
+ public
68
+ def cancel
69
+ @cancelled = true
70
+ end # def cancel
71
+
72
+ public
73
+ def uncancel
74
+ @cancelled = false
75
+ end # def uncancel
76
+
77
+ public
78
+ def cancelled?
79
+ return @cancelled
80
+ end # def cancelled?
81
+
82
+ # Create a deep-ish copy of this event.
83
+ public
84
+ def clone
85
+ copy = {}
86
+ @data.each do |k,v|
87
+ # TODO(sissel): Recurse if this is a hash/array?
88
+ copy[k] = v.clone
89
+ end
90
+ return self.class.new(copy)
91
+ end # def clone
92
+
93
+ if RUBY_ENGINE == "jruby"
94
+ public
95
+ def to_s
96
+ return self.sprintf("%{+yyyy-MM-dd'T'HH:mm:ss.SSSZ} %{host} %{message}")
97
+ end # def to_s
98
+ else
99
+ public
100
+ def to_s
101
+ return self.sprintf("#{self["@timestamp"].iso8601} %{host} %{message}")
102
+ end # def to_s
103
+ end
104
+
105
+ public
106
+ def timestamp; return @data[TIMESTAMP]; end # def timestamp
107
+ def timestamp=(val); return @data[TIMESTAMP] = val; end # def timestamp=
108
+
109
+ def unix_timestamp
110
+ raise DeprecatedMethod
111
+ end # def unix_timestamp
112
+
113
+ def ruby_timestamp
114
+ raise DeprecatedMethod
115
+ end # def unix_timestamp
116
+
117
+ # field-related access
118
+ public
119
+ def [](str)
120
+ if str[0,1] == CHAR_PLUS
121
+ # nothing?
122
+ else
123
+ return LogStash::Util::FieldReference.exec(str, @data)
124
+ end
125
+ end # def []
126
+
127
+ public
128
+ def []=(str, value)
129
+ if str == TIMESTAMP && !value.is_a?(Time)
130
+ raise TypeError, "The field '@timestamp' must be a Time, not a #{value.class} (#{value})"
131
+ end
132
+
133
+ r = LogStash::Util::FieldReference.exec(str, @data) do |obj, key|
134
+ obj[key] = value
135
+ end
136
+
137
+ # The assignment can fail if the given field reference (str) does not exist
138
+ # In this case, we'll want to set the value manually.
139
+ if r.nil?
140
+ # TODO(sissel): Implement this in LogStash::Util::FieldReference
141
+ if str[0,1] != "["
142
+ return @data[str] = value
143
+ end
144
+
145
+ # No existing element was found, so let's set one.
146
+ *parents, key = str.scan(/(?<=\[)[^\]]+(?=\])/)
147
+ obj = @data
148
+ parents.each do |p|
149
+ if obj.include?(p)
150
+ obj = obj[p]
151
+ else
152
+ obj[p] = {}
153
+ obj = obj[p]
154
+ end
155
+ end
156
+ obj[key] = value
157
+ end
158
+ return value
159
+ end # def []=
160
+
161
+ public
162
+ def fields
163
+ raise DeprecatedMethod
164
+ end
165
+
166
+ public
167
+ def to_json(*args)
168
+ return @data.to_json(*args)
169
+ end # def to_json
170
+
171
+ def to_hash
172
+ return @data
173
+ end # def to_hash
174
+
175
+ public
176
+ def overwrite(event)
177
+ @data = event.to_hash
178
+ end
179
+
180
+ public
181
+ def include?(key)
182
+ return !self[key].nil?
183
+ end # def include?
184
+
185
+ # Append an event to this one.
186
+ public
187
+ def append(event)
188
+ # non-destructively merge that event with ourselves.
189
+ LogStash::Util.hash_merge(@data, event.to_hash)
190
+ end # append
191
+
192
+ # Remove a field or field reference. Returns the value of that field when
193
+ # deleted
194
+ public
195
+ def remove(str)
196
+ return LogStash::Util::FieldReference.exec(str, @data) do |obj, key|
197
+ next obj.delete(key)
198
+ end
199
+ end # def remove
200
+
201
+ # sprintf. This could use a better method name.
202
+ # The idea is to take an event and convert it to a string based on
203
+ # any format values, delimited by %{foo} where 'foo' is a field or
204
+ # metadata member.
205
+ #
206
+ # For example, if the event has type == "foo" and source == "bar"
207
+ # then this string:
208
+ # "type is %{type} and source is %{host}"
209
+ # will return
210
+ # "type is foo and source is bar"
211
+ #
212
+ # If a %{name} value is an array, then we will join by ','
213
+ # If a %{name} value does not exist, then no substitution occurs.
214
+ #
215
+ # TODO(sissel): It is not clear what the value of a field that
216
+ # is an array (or hash?) should be. Join by comma? Something else?
217
+ public
218
+ def sprintf(format)
219
+ format = format.to_s
220
+ if format.index("%").nil?
221
+ return format
222
+ end
223
+
224
+ return format.gsub(/%\{[^}]+\}/) do |tok|
225
+ # Take the inside of the %{ ... }
226
+ key = tok[2 ... -1]
227
+
228
+ if key == "+%s"
229
+ # Got %{+%s}, support for unix epoch time
230
+ next @data["@timestamp"].to_i
231
+ elsif key[0,1] == "+"
232
+ t = @data["@timestamp"]
233
+ formatter = org.joda.time.format.DateTimeFormat.forPattern(key[1 .. -1])\
234
+ .withZone(org.joda.time.DateTimeZone::UTC)
235
+ #next org.joda.time.Instant.new(t.tv_sec * 1000 + t.tv_usec / 1000).toDateTime.toString(formatter)
236
+ # Invoke a specific Instant constructor to avoid this warning in JRuby
237
+ # > ambiguous Java methods found, using org.joda.time.Instant(long)
238
+ org.joda.time.Instant.java_class.constructor(Java::long).new_instance(
239
+ t.tv_sec * 1000 + t.tv_usec / 1000
240
+ ).to_java.toDateTime.toString(formatter)
241
+ else
242
+ value = self[key]
243
+ case value
244
+ when nil
245
+ tok # leave the %{foo} if this field does not exist in this event.
246
+ when Array
247
+ value.join(",") # Join by ',' if value is an array
248
+ when Hash
249
+ value.to_json # Convert hashes to json
250
+ else
251
+ value # otherwise return the value
252
+ end # case value
253
+ end # 'key' checking
254
+ end # format.gsub...
255
+ end # def sprintf
256
+
257
+ def tag(value)
258
+ # Generalize this method for more usability
259
+ self["tags"] ||= []
260
+ self["tags"] << value unless self["tags"].include?(value)
261
+ end
262
+ end # class LogStash::Event
@@ -0,0 +1,178 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # INFORMATION:
6
+ # The filter Advisor is designed for capture and confrontation the events.
7
+ # The events must be grep by a filter first, then it can pull out a copy of it, like clone, whit tags "advisor_first",
8
+ # this copy is the first occurrence of this event verified in time_adv.
9
+ # After time_adv Advisor will pull out an event tagged "advisor_info" who will tell you the number of same events verified in time_adv.
10
+
11
+ # INFORMATION ABOUT CLASS:
12
+
13
+ # For do this job, i used a thread that will sleep time adv. I assume that events coming on advisor are tagged, then i use an array for storing different events.
14
+ # If an events is not present on array, then is the first and if the option is activate then advisor push out a copy of event.
15
+ # Else if the event is present on array, then is another same event and not the first, let's count it.
16
+
17
+ # USAGE:
18
+
19
+ # This is an example of logstash config:
20
+
21
+ # filter{
22
+ # advisor {
23
+ # time_adv => 1 #(optional)
24
+ # send_first => true #(optional)
25
+ # }
26
+ # }
27
+
28
+ # We analize this:
29
+
30
+ # time_adv => 1
31
+ # Means the time when the events matched and collected are pushed on outputs with tag "advisor_info".
32
+
33
+ # send_first => true
34
+ # Means you can push out the first events different who came in advisor like clone copy and tagged with "advisor_first"
35
+
36
+ class LogStash::Filters::Advisor < LogStash::Filters::Base
37
+
38
+ config_name "advisor"
39
+ milestone 1
40
+
41
+ # If you do not set time_adv the plugin does nothing.
42
+ config :time_adv, :validate => :number, :default => 0
43
+
44
+ # If you want the first different event will be pushed out like a copy
45
+ config :send_first, :validate => :boolean, :default => true
46
+
47
+ public
48
+ def register
49
+
50
+ # Control the correct config
51
+ if (!(@time_adv == 0))
52
+
53
+ @flag = false
54
+ @first = false
55
+ # Is used for store the different events.
56
+ @sarray = Array.new
57
+ # Is used for count the number of equals events.
58
+ @carray = Array.new
59
+
60
+ @thread = time_alert(@time_adv.to_i*60) do
61
+ # if collected any events then pushed out a new event after time_adv
62
+ if (@sarray.size !=0)
63
+ @flag = true
64
+ end
65
+ end
66
+
67
+ else
68
+ @logger.warn("Advisor: you have not specified Time_adv. This filter will do nothing!")
69
+ end
70
+
71
+ end
72
+
73
+ # This method is used to manage sleep and awaken threads (thanks StackOverflow for the support)
74
+ def time_alert(interval)
75
+ Thread.new do
76
+ loop do
77
+ start_time = Time.now
78
+ yield
79
+ elapsed = Time.now - start_time
80
+ sleep([interval - elapsed, 0].max)
81
+ end
82
+ end
83
+ end
84
+
85
+ public
86
+ def filter(event)
87
+ return unless filter?(event)
88
+
89
+ # Control the correct config
90
+ if(!(@time_adv == 0))
91
+
92
+ new_event = true
93
+ @message = event["message"]
94
+
95
+ # control if the events are new or they are came before
96
+ for i in (0..@sarray.size-1)
97
+ if (@message == @sarray[i].to_s)
98
+ @logger.debug("Avisor: Event match")
99
+ # if came before then count it
100
+ new_event = false
101
+ @carray[i] = @carray[i].to_i+1
102
+ @logger.debug("Advisor: "+@carray[i].to_s+" Events matched")
103
+ break
104
+ end
105
+ end
106
+
107
+ if (new_event == true)
108
+ # else is a new event
109
+
110
+ @sarray << @message
111
+ @carray << 1
112
+ if (send_first == true)
113
+ @logger.debug("Advisor: is the first to send out")
114
+ @first = true
115
+ end
116
+ end
117
+
118
+ else
119
+ @logger.warn("Advisor: you have not specified Time_adv. This filter will do nothing!")
120
+ end
121
+ end
122
+
123
+
124
+ # This method is used for generate events every 5 seconds (Thanks Jordan Sissel for explanation).
125
+ # In this case we generate an event when advisor thread trigger the flag or is the first different event.
126
+
127
+ def flush
128
+
129
+ if (@first == true)
130
+ event = LogStash::Event.new
131
+ event["host"] = Socket.gethostname
132
+ event["message"] = @message
133
+ event.tag "advisor_first"
134
+ filter_matched(event)
135
+
136
+ @first = false
137
+ return [event]
138
+ end
139
+
140
+ if (@flag == true)
141
+
142
+ if (@tags.size != 0)
143
+ @tag_path = ""
144
+ for i in (0..@tags.size-1)
145
+ @tag_path += @tags[i].to_s+"."
146
+ end
147
+ end
148
+
149
+ # Prepare message
150
+ message = "Advisor: Found events who match: "+@tag_path.to_s+"\n\n"
151
+
152
+ # See on messagge partial part of different events
153
+ for i in (0..@sarray.size-1)
154
+ message = message+@carray[i].to_s+" events like: "+(@sarray[i].to_s).slice(0, 300)+"\n\n"
155
+ end
156
+
157
+ event = LogStash::Event.new
158
+ event["host"] = Socket.gethostname
159
+ event["message"] = message
160
+ event.tag << "advisor_info"
161
+ filter_matched(event)
162
+
163
+ # reset flag and counter
164
+ @flag = false
165
+ @carray = nil
166
+ @sarray = nil
167
+ @carray = Array.new
168
+ @sarray = Array.new
169
+
170
+ # push the event
171
+ return [event]
172
+ end
173
+ return
174
+
175
+ end
176
+
177
+ end
178
+ # By Bistic:)