logstash-lib 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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,73 @@
1
+ require 'logstash/namespace'
2
+ require 'logstash/filters/base'
3
+
4
+
5
+ # This filter automatically sum all numbers found inside a string
6
+ #
7
+ # The sum is returned in a new field, "sumTotal".
8
+ # The total numbers summed will be in a new field, "sumNums"
9
+ #
10
+ # The fields produced by this filter are extra useful used in combination
11
+ # with kibana number plotting features.
12
+ #
13
+ # If the field is an array, all of the numbers in it will be summed.
14
+ # If the field is a hash, all of the values of the top-level keys will be summed.
15
+ # If the field is a string, it will be split, numbers extracted, and summed.
16
+ class LogStash::Filters::SumNumbers < LogStash::Filters::Base
17
+ config_name 'sumnumbers'
18
+ milestone 1
19
+
20
+ # The source field for the data. By default is message.
21
+ config :source, :validate => :string, :default => 'message'
22
+
23
+ public
24
+ def register
25
+ end
26
+
27
+ public
28
+ def filter(event)
29
+ msg = event[@source]
30
+ sumnums = 0
31
+ sumtotal = 0
32
+
33
+ if not msg
34
+ return
35
+ end
36
+
37
+ # If for some reason the field is an array of values, take the first only.
38
+ if msg.is_a?(Array)
39
+ fields = msg.first.split
40
+ # If msg is json, get an array from the values
41
+ elsif msg.is_a?(Hash)
42
+ fields = msg.values
43
+ # Else, we have a string. Split it.
44
+ else
45
+ fields = msg.split
46
+ end
47
+
48
+ for elem in fields
49
+ int = str_as_integer(elem)
50
+ if int != nil
51
+ sumtotal += int
52
+ sumnums += 1
53
+ next
54
+ end
55
+ f = str_as_float(elem)
56
+ if f != nil
57
+ sumtotal += f
58
+ sumnums += 1
59
+ end
60
+ end
61
+
62
+ event["sumNums"] = sumnums
63
+ event["sumTotal"] = sumtotal
64
+ end
65
+
66
+ def str_as_integer(str)
67
+ Integer(str) rescue nil
68
+ end
69
+
70
+ def str_as_float(str)
71
+ Float(str) rescue nil
72
+ end
73
+ end # class LogStash::Filters::SumNumbers
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Filter plugin for logstash to parse the PRI field from the front
6
+ # of a Syslog (RFC3164) message. If no priority is set, it will
7
+ # default to 13 (per RFC).
8
+ #
9
+ # This filter is based on the original syslog.rb code shipped
10
+ # with logstash.
11
+ class LogStash::Filters::Syslog_pri < LogStash::Filters::Base
12
+ config_name "syslog_pri"
13
+
14
+ # set the status to experimental/beta/stable
15
+ milestone 1
16
+
17
+ # Add human-readable names after parsing severity and facility from PRI
18
+ config :use_labels, :validate => :boolean, :default => true
19
+
20
+ # Name of field which passes in the extracted PRI part of the syslog message
21
+ config :syslog_pri_field_name, :validate => :string, :default => "syslog_pri"
22
+
23
+ # Labels for facility levels. This comes from RFC3164.
24
+ config :facility_labels, :validate => :array, :default => [
25
+ "kernel",
26
+ "user-level",
27
+ "mail",
28
+ "daemon",
29
+ "security/authorization",
30
+ "syslogd",
31
+ "line printer",
32
+ "network news",
33
+ "uucp",
34
+ "clock",
35
+ "security/authorization",
36
+ "ftp",
37
+ "ntp",
38
+ "log audit",
39
+ "log alert",
40
+ "clock",
41
+ "local0",
42
+ "local1",
43
+ "local2",
44
+ "local3",
45
+ "local4",
46
+ "local5",
47
+ "local6",
48
+ "local7",
49
+ ]
50
+
51
+ # Labels for severity levels. This comes from RFC3164.
52
+ config :severity_labels, :validate => :array, :default => [
53
+ "emergency",
54
+ "alert",
55
+ "critical",
56
+ "error",
57
+ "warning",
58
+ "notice",
59
+ "informational",
60
+ "debug",
61
+ ]
62
+
63
+ public
64
+ def register
65
+ # Nothing
66
+ end # def register
67
+
68
+ public
69
+ def filter(event)
70
+ return unless filter?(event)
71
+ parse_pri(event)
72
+ filter_matched(event)
73
+ end # def filter
74
+
75
+ private
76
+ def parse_pri(event)
77
+ # Per RFC3164, priority = (facility * 8) + severity
78
+ # = (facility << 3) & (severity)
79
+ if event[@syslog_pri_field_name]
80
+ if event[@syslog_pri_field_name].is_a?(Array)
81
+ priority = event[@syslog_pri_field_name].first.to_i
82
+ else
83
+ priority = event[@syslog_pri_field_name].to_i
84
+ end
85
+ else
86
+ priority = 13 # default
87
+ end
88
+ severity = priority & 7 # 7 is 111 (3 bits)
89
+ facility = priority >> 3
90
+ event["syslog_severity_code"] = severity
91
+ event["syslog_facility_code"] = facility
92
+
93
+ # Add human-readable names after parsing severity and facility from PRI
94
+ if @use_labels
95
+ facility_number = event["syslog_facility_code"]
96
+ severity_number = event["syslog_severity_code"]
97
+
98
+ if @facility_labels[facility_number]
99
+ event["syslog_facility"] = @facility_labels[facility_number]
100
+ end
101
+
102
+ if @severity_labels[severity_number]
103
+ event["syslog_severity"] = @severity_labels[severity_number]
104
+ end
105
+ end
106
+ end # def parse_pri
107
+ end # class LogStash::Filters::SyslogPRI
@@ -0,0 +1,121 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # Originally written to translate HTTP response codes
6
+ # but turned into a general translation tool which uses
7
+ # configured has or/and .yaml files as a dictionary.
8
+ # response codes in default dictionary were scraped from
9
+ # 'gem install cheat; cheat status_codes'
10
+ #
11
+ # Alternatively for simple string search and replacements for just a few values
12
+ # use the gsub function of the mutate filter.
13
+
14
+ class LogStash::Filters::Translate < LogStash::Filters::Base
15
+ config_name "translate"
16
+ milestone 1
17
+
18
+ # The field containing a response code If this field is an
19
+ # array, only the first value will be used.
20
+ config :field, :validate => :string, :required => true
21
+
22
+ # In case dstination field already exists should we skip translation(default) or override it with new translation
23
+ config :override, :validate => :boolean, :default => false
24
+
25
+ # Dictionary to use for translation.
26
+ # Example:
27
+ #
28
+ # filter {
29
+ # %PLUGIN% {
30
+ # dictionary => [ "100", "Continue",
31
+ # "101", "Switching Protocols",
32
+ # "200", "OK",
33
+ # "201", "Created",
34
+ # "202", "Accepted" ]
35
+ # }
36
+ # }
37
+ config :dictionary, :validate => :hash, :default => {}
38
+
39
+ # name with full path of external dictionary file.
40
+ # format of the table should be a YAML file which will be merged with the @dictionary.
41
+ # make sure you encase any integer based keys in quotes.
42
+ # The YAML file should look something like this:
43
+ #
44
+ # 100: Continue
45
+ # 101: Switching Protocols
46
+ config :dictionary_path, :validate => :path
47
+
48
+ # The destination field you wish to populate with the translation code.
49
+ # default is "translation".
50
+ # Set to the same value as source if you want to do a substitution, in this case filter will allways succeed.
51
+ config :destination, :validate => :string, :default => "translation"
52
+
53
+ # set to false if you want to match multiple terms
54
+ # a large dictionary could get expensive if set to false.
55
+ config :exact, :validate => :boolean, :default => true
56
+
57
+ # treat dictionary keys as regular expressions to match against, used only then @exact enabled.
58
+ config :regex, :validate => :boolean, :default => false
59
+
60
+ # Incase no translation was made add default translation string
61
+ config :fallback, :validate => :string
62
+
63
+ public
64
+ def register
65
+ if @dictionary_path
66
+ raise "#{self.class.name}: dictionary file #{@dictionary_path} does not exists" unless File.exists?(@dictionary_path)
67
+ begin
68
+ @dictionary.merge!(YAML.load_file(@dictionary_path))
69
+ rescue Exception => e
70
+ raise "#{self.class.name}: Bad Syntax in dictionary file #{@dictionary_path}"
71
+ end
72
+ end
73
+
74
+ @logger.debug? and @logger.debug("#{self.class.name}: Dictionary - ", :dictionary => @dictionary)
75
+ if @exact
76
+ @logger.debug? and @logger.debug("#{self.class.name}: Dictionary translation method - Exact")
77
+ else
78
+ @logger.debug? and @logger.debug("#{self.class.name}: Dictionary translation method - Fuzzy")
79
+ end
80
+ end # def register
81
+
82
+ public
83
+ def filter(event)
84
+ return unless filter?(event)
85
+
86
+ return unless event.include?(@field) # Skip translation in case event does not have @event field.
87
+ return if event.include?(@destination) and not @override # Skip translation in case @destination field already exists and @override is disabled.
88
+
89
+ begin
90
+ #If source field is array use first value and make sure source value is string
91
+ source = event[@field].is_a?(Array) ? event[@field].first.to_s : event[@field].to_s
92
+ matched = false
93
+ if @exact
94
+ if @regex
95
+ key = @dictionary.keys.detect{|k| source.match(Regexp.new(k))}
96
+ if key
97
+ event[@destination] = @dictionary[key]
98
+ matched = true
99
+ end
100
+ elsif @dictionary.include?(source)
101
+ event[@destination] = @dictionary[source]
102
+ matched = true
103
+ end
104
+ else
105
+ translation = source.gsub(Regexp.union(@dictionary.keys), @dictionary)
106
+ if source != translation
107
+ event[@destination] = translation
108
+ matched = true
109
+ end
110
+ end
111
+
112
+ if not matched and @fallback
113
+ event[@destination] = @fallback
114
+ matched = true
115
+ end
116
+ filter_matched(event) if matched or @field == @destination
117
+ rescue Exception => e
118
+ @logger.error("Something went wrong when attempting to translate from dictionary", :exception => e, :field => @field, :event => event)
119
+ end
120
+ end # def filter
121
+ end # class LogStash::Filters::Translate
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ class LogStash::Filters::Unique < LogStash::Filters::Base
6
+
7
+ config_name "unique"
8
+ milestone 1
9
+
10
+ # The fields on which to run the unique filter.
11
+ config :fields, :validate => :array, :required => true
12
+
13
+ public
14
+ def register
15
+ # Nothing to do
16
+ end # def register
17
+
18
+ public
19
+ def filter(event)
20
+ return unless filter?(event)
21
+
22
+ @fields.each do |field|
23
+ next unless event[field].class == Array
24
+
25
+ event[field] = event[field].uniq
26
+ end
27
+ end # def filter
28
+
29
+ end # class Logstash::Filters::Unique
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+ require "uri"
5
+
6
+ # The urldecode filter is for decoding fields that are urlencoded.
7
+ class LogStash::Filters::Urldecode < LogStash::Filters::Base
8
+ config_name "urldecode"
9
+ milestone 2
10
+
11
+ # The field which value is urldecoded
12
+ config :field, :validate => :string, :default => "message"
13
+
14
+ # Urldecode all fields
15
+ config :all_fields, :validate => :boolean, :default => false
16
+
17
+ public
18
+ def register
19
+ # Nothing to do
20
+ end #def register
21
+
22
+ public
23
+ def filter(event)
24
+ return unless filter?(event)
25
+
26
+ # If all_fields is true then try to decode them all
27
+ if @all_fields
28
+ event.to_hash.each do |name, value|
29
+ event[name] = urldecode(value)
30
+ end
31
+ # Else decode the specified field
32
+ else
33
+ event[@field] = urldecode(event[@field])
34
+ end
35
+ filter_matched(event)
36
+ end # def filter
37
+
38
+ # Attempt to handle string, array, and hash values for fields.
39
+ # For all other datatypes, just return, URI.unescape doesn't support them.
40
+ private
41
+ def urldecode(value)
42
+ case value
43
+ when String
44
+ return URI.unescape(value)
45
+ when Array
46
+ ret_values = []
47
+ value.each { |v| ret_values << urldecode(v) }
48
+ return ret_values
49
+ when Hash
50
+ ret_values = {}
51
+ value.each { |k,v| ret_values[k] = urldecode(v) }
52
+ return ret_values
53
+ else
54
+ return value
55
+ end
56
+ end
57
+ end # class LogStash::Filters::Urldecode
@@ -0,0 +1,112 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+ require "tempfile"
5
+
6
+ # Parse user agent strings into structured data based on BrowserScope data
7
+ #
8
+ # UserAgent filter, adds information about user agent like family, operating
9
+ # system, version, and device
10
+ #
11
+ # Logstash releases ship with the regexes.yaml database made available from
12
+ # ua-parser with an Apache 2.0 license. For more details on ua-parser, see
13
+ # <https://github.com/tobie/ua-parser/>.
14
+ class LogStash::Filters::UserAgent < LogStash::Filters::Base
15
+ config_name "useragent"
16
+ milestone 1
17
+
18
+ # The field containing the user agent string. If this field is an
19
+ # array, only the first value will be used.
20
+ config :source, :validate => :string, :required => true
21
+
22
+ # The name of the field to assign user agent data into.
23
+ #
24
+ # If not specified user agent data will be stored in the root of the event.
25
+ config :target, :validate => :string
26
+
27
+ # regexes.yaml file to use
28
+ #
29
+ # If not specified, this will default to the regexes.yaml that ships
30
+ # with logstash.
31
+ #
32
+ # You can find the latest version of this here:
33
+ # <https://github.com/tobie/ua-parser/blob/master/regexes.yaml>
34
+ config :regexes, :validate => :string
35
+
36
+ # A string to prepend to all of the extracted keys
37
+ config :prefix, :validate => :string, :default => ''
38
+
39
+ public
40
+ def register
41
+ require 'user_agent_parser'
42
+ if @regexes.nil?
43
+ begin
44
+ @parser = UserAgentParser::Parser.new()
45
+ rescue Exception => e
46
+ begin
47
+ if __FILE__ =~ /file:\/.*\.jar!/
48
+ # Running from a flatjar which has a different layout
49
+ regexes_file = [__FILE__.split("!").first, "/vendor/ua-parser/regexes.yaml"].join("!")
50
+ @parser = UserAgentParser::Parser.new(:patterns_path => regexes_file)
51
+ else
52
+ # assume operating from the git checkout
53
+ @parser = UserAgentParser::Parser.new(:patterns_path => "vendor/ua-parser/regexes.yaml")
54
+ end
55
+ rescue => ex
56
+ raise "Failed to cache, due to: #{ex}\n"
57
+ end
58
+ end
59
+ else
60
+ @logger.info("Using user agent regexes", :regexes => @regexes)
61
+ @parser = UserAgentParser::Parser.new(:patterns_path => @regexes)
62
+ end
63
+ end #def register
64
+
65
+ public
66
+ def filter(event)
67
+ return unless filter?(event)
68
+ ua_data = nil
69
+
70
+ useragent = event[@source]
71
+ useragent = useragent.first if useragent.is_a? Array
72
+
73
+ begin
74
+ ua_data = @parser.parse(useragent)
75
+ rescue Exception => e
76
+ @logger.error("Uknown error while parsing user agent data", :exception => e, :field => @source, :event => event)
77
+ end
78
+
79
+ if !ua_data.nil?
80
+ if @target.nil?
81
+ # default write to the root of the event
82
+ target = event
83
+ else
84
+ target = event[@target] ||= {}
85
+ end
86
+
87
+ target[@prefix + "name"] = ua_data.name
88
+
89
+ #OSX, Andriod and maybe iOS parse correctly, ua-agent parsing for Windows does not provide this level of detail
90
+ unless ua_data.os.nil?
91
+ target[@prefix + "os"] = ua_data.os.to_s
92
+ target[@prefix + "os_name"] = ua_data.os.name.to_s
93
+ target[@prefix + "os_major"] = ua_data.os.version.major.to_s unless ua_data.os.version.nil?
94
+ target[@prefix + "os_minor"] = ua_data.os.version.minor.to_s unless ua_data.os.version.nil?
95
+ end
96
+
97
+ target[@prefix + "device"] = ua_data.device.to_s if not ua_data.device.nil?
98
+
99
+ if not ua_data.version.nil?
100
+ ua_version = ua_data.version
101
+ target[@prefix + "major"] = ua_version.major
102
+ target[@prefix + "minor"] = ua_version.minor
103
+ target[@prefix + "patch"] = ua_version.patch if ua_version.patch
104
+ target[@prefix + "build"] = ua_version.patch_minor if ua_version.patch_minor
105
+ end
106
+
107
+ filter_matched(event)
108
+ end
109
+
110
+ end # def filter
111
+ end # class LogStash::Filters::UserAgent
112
+