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,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
+