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,75 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # TODO(sissel): This is not supported yet. There is a bug in grok discovery
6
+ # that causes segfaults in libgrok.
7
+ class LogStash::Filters::Grokdiscovery < LogStash::Filters::Base
8
+
9
+ config_name "grokdiscovery"
10
+ milestone 1
11
+
12
+ public
13
+ def initialize(config = {})
14
+ super
15
+
16
+ @discover_fields = {}
17
+ end # def initialize
18
+
19
+ public
20
+ def register
21
+ gem "jls-grok", ">=0.4.3"
22
+ require "grok" # rubygem 'jls-grok'
23
+
24
+ # TODO(sissel): Make patterns files come from the config
25
+ @config.each do |type, typeconfig|
26
+ @logger.debug("Registering type with grok: #{type}")
27
+ @grok = Grok.new
28
+ Dir.glob("patterns/*").each do |path|
29
+ @grok.add_patterns_from_file(path)
30
+ end
31
+ @discover_fields[type] = typeconfig
32
+ @logger.debug(["Enabling discovery", { :type => type, :fields => typeconfig }])
33
+ @logger.warn(@discover_fields)
34
+ end # @config.each
35
+ end # def register
36
+
37
+ public
38
+ def filter(event)
39
+ return unless filter?(event)
40
+
41
+ # parse it with grok
42
+ message = event["message"]
43
+ match = false
44
+
45
+ if event.type and @discover_fields.include?(event.type)
46
+ discover = @discover_fields[event.type] & event.to_hash.keys
47
+ discover.each do |field|
48
+ value = event[field]
49
+ value = [value] if value.is_a?(String)
50
+
51
+ value.each do |v|
52
+ pattern = @grok.discover(v)
53
+ @logger.warn("Trying #{v} => #{pattern}")
54
+ @grok.compile(pattern)
55
+ match = @grok.match(v)
56
+ if match
57
+ @logger.warn(["Match", match.captures])
58
+ event.to_hash.merge!(match.captures) do |key, oldval, newval|
59
+ @logger.warn(["Merging #{key}", oldval, newval])
60
+ oldval + newval # should both be arrays...
61
+ end
62
+ else
63
+ @logger.warn(["Discovery produced something not matchable?", { :input => v }])
64
+ end
65
+ end # value.each
66
+ end # discover.each
67
+ else
68
+ @logger.info("Unknown type for #{event.source} (type: #{event.type})")
69
+ @logger.debug(event.to_hash)
70
+ end
71
+ @logger.debug(["Event now: ", event.to_hash])
72
+
73
+ filter_matched(event) if !event.cancelled?
74
+ end # def filter
75
+ end # class LogStash::Filters::Grokdiscovery
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require "i18n"
3
+ require "logstash/filters/base"
4
+ require "logstash/namespace"
5
+
6
+ # The i18n filter allows you to remove special characters from
7
+ # from a field
8
+ class LogStash::Filters::I18n < LogStash::Filters::Base
9
+ config_name "i18n"
10
+ milestone 0
11
+
12
+ # Replaces non-ASCII characters with an ASCII approximation, or
13
+ # if none exists, a replacement character which defaults to “?”
14
+ #
15
+ # Example:
16
+ #
17
+ # filter {
18
+ # i18n {
19
+ # transliterate => ["field1", "field2"]
20
+ # }
21
+ # }
22
+ config :transliterate, :validate => :array
23
+
24
+ public
25
+ def register
26
+ end # def register
27
+
28
+ public
29
+ def filter(event)
30
+ return unless filter?(event)
31
+
32
+ transliterate(event) if @transliterate
33
+
34
+ filter_matched(event)
35
+ end # def filter
36
+
37
+ private
38
+ def transliterate(event)
39
+ @transliterate.each do |field|
40
+ if event[field].is_a?(Array)
41
+ event[field].map! { |v| I18n.transliterate(v).encode('UTF-8') }
42
+ elsif event[field].is_a?(String)
43
+ event[field] = I18n.transliterate(event[field].encode('UTF-8'))
44
+ else
45
+ @logger.debug("Can't transliterate something that isn't a string",
46
+ :field => field, :value => event[field])
47
+ end
48
+ end
49
+ end # def transliterate
50
+
51
+ end # class LogStash::Filters::I18n
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # JSON filter. Takes a field that contains JSON and expands it into
6
+ # an actual datastructure.
7
+ class LogStash::Filters::Json < LogStash::Filters::Base
8
+
9
+ config_name "json"
10
+ milestone 2
11
+
12
+ # Config for json is:
13
+ #
14
+ # source => source_field
15
+ #
16
+ # For example, if you have json data in the @message field:
17
+ #
18
+ # filter {
19
+ # json {
20
+ # source => "message"
21
+ # }
22
+ # }
23
+ #
24
+ # The above would parse the json from the @message field
25
+ config :source, :validate => :string, :required => true
26
+
27
+ # Define target for placing the data. If this setting is omitted,
28
+ # the json data will be stored at the root of the event.
29
+ #
30
+ # For example if you want the data to be put in the 'doc' field:
31
+ #
32
+ # filter {
33
+ # json {
34
+ # target => "doc"
35
+ # }
36
+ # }
37
+ #
38
+ # json in the value of the source field will be expanded into a
39
+ # datastructure in the "target" field.
40
+ #
41
+ # Note: if the "target" field already exists, it will be overwritten.
42
+ config :target, :validate => :string
43
+
44
+ public
45
+ def register
46
+ # Nothing to do here
47
+ end # def register
48
+
49
+ public
50
+ def filter(event)
51
+ return unless filter?(event)
52
+
53
+ @logger.debug("Running json filter", :event => event)
54
+
55
+ return unless event.include?(@source)
56
+
57
+ if @target.nil?
58
+ # Default is to write to the root of the event.
59
+ dest = event.to_hash
60
+ else
61
+ dest = event[@target] ||= {}
62
+ end
63
+
64
+ begin
65
+ # TODO(sissel): Note, this will not successfully handle json lists
66
+ # like your text is '[ 1,2,3 ]' JSON.parse gives you an array (correctly)
67
+ # which won't merge into a hash. If someone needs this, we can fix it
68
+ # later.
69
+ dest.merge!(JSON.parse(event[@source]))
70
+
71
+ # This is a hack to help folks who are mucking with @timestamp during
72
+ # their json filter. You aren't supposed to do anything with "@timestamp"
73
+ # outside of the date filter, but nobody listens... ;)
74
+ if event["@timestamp"].is_a?(String)
75
+ event["@timestamp"] = Time.parse(event["@timestamp"]).gmtime
76
+ end
77
+
78
+ filter_matched(event)
79
+ rescue => e
80
+ event.tag("_jsonparsefailure")
81
+ @logger.warn("Trouble parsing json", :source => @source,
82
+ :raw => event[@source], :exception => e)
83
+ return
84
+ end
85
+
86
+ @logger.debug("Event after json filter", :event => event)
87
+
88
+ end # def filter
89
+
90
+ end # class LogStash::Filters::Json
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # JSON encode filter. Takes a field and serializes it into JSON
6
+ #
7
+ # If no target is specified, the source field is overwritten with the JSON
8
+ # text.
9
+ #
10
+ # For example, if you have a field named 'foo', and you want to store the
11
+ # JSON encoded string in 'bar', do this:
12
+ #
13
+ # filter {
14
+ # json_encode {
15
+ # source => "foo"
16
+ # target => "bar"
17
+ # }
18
+ # }
19
+ class LogStash::Filters::JSONEncode < LogStash::Filters::Base
20
+
21
+ config_name "json_encode"
22
+ milestone 2
23
+
24
+ # The field to convert to JSON.
25
+ config :source, :validate => :string, :required => true
26
+
27
+ # The field to write the JSON into. If not specified, the source
28
+ # field will be overwritten.
29
+ config :target, :validate => :string
30
+
31
+ public
32
+ def register
33
+ @target = @source if @target.nil?
34
+ end # def register
35
+
36
+ public
37
+ def filter(event)
38
+ return unless filter?(event)
39
+
40
+ @logger.debug("Running JSON encoder", :event => event)
41
+
42
+ begin
43
+ event[@target] = JSON.pretty_generate(event[@source])
44
+ filter_matched(event)
45
+ rescue => e
46
+ event.tag "_jsongeneratefailure"
47
+ @logger.warn("Trouble encoding JSON", :source => @source, :raw => event[@source].inspect, :exception => e)
48
+ end
49
+
50
+ @logger.debug? && @logger.debug("Event after JSON encoder", :event => event)
51
+ end # def filter
52
+ end # class LogStash::Filters::JSONEncode
@@ -0,0 +1,232 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/base"
3
+ require "logstash/namespace"
4
+
5
+ # This filter helps automatically parse messages which are of the 'foo=bar'
6
+ # variety.
7
+ #
8
+ # For example, if you have a log message which contains 'ip=1.2.3.4
9
+ # error=REFUSED', you can parse those automatically by doing:
10
+ #
11
+ # filter {
12
+ # kv { }
13
+ # }
14
+ #
15
+ # The above will result in a message of "ip=1.2.3.4 error=REFUSED" having
16
+ # the fields:
17
+ #
18
+ # * ip: 1.2.3.4
19
+ # * error: REFUSED
20
+ #
21
+ # This is great for postfix, iptables, and other types of logs that
22
+ # tend towards 'key=value' syntax.
23
+ #
24
+ # Further, this can often be used to parse query parameters like
25
+ # 'foo=bar&baz=fizz' by setting the field_split to "&"
26
+ class LogStash::Filters::KV < LogStash::Filters::Base
27
+ config_name "kv"
28
+ milestone 2
29
+
30
+ # A string of characters to trim from the value. This is useful if your
31
+ # values are wrapped in brackets or are terminated by comma (like postfix
32
+ # logs)
33
+ #
34
+ # These characters form a regex character class and thus you must escape special regex
35
+ # characters like [ or ] using \.
36
+ #
37
+ # Example, to strip '<' '>' '[' ']' and ',' characters from values:
38
+ #
39
+ # filter {
40
+ # kv {
41
+ # trim => "<>\[\],"
42
+ # }
43
+ # }
44
+ config :trim, :validate => :string
45
+
46
+ # A string of characters to trim from the key. This is useful if your
47
+ # key are wrapped in brackets or starts with space
48
+ #
49
+ # These characters form a regex character class and thus you must escape special regex
50
+ # characters like [ or ] using \.
51
+ #
52
+ # Example, to strip '<' '>' '[' ']' and ',' characters from keys:
53
+ #
54
+ # filter {
55
+ # kv {
56
+ # trimkey => "<>\[\],"
57
+ # }
58
+ # }
59
+ config :trimkey, :validate => :string
60
+
61
+ # A string of characters to use as delimiters for parsing out key-value pairs.
62
+ #
63
+ # These characters form a regex character class and thus you must escape special regex
64
+ # characters like [ or ] using \.
65
+ #
66
+ # #### Example with URL Query Strings
67
+ #
68
+ # Example, to split out the args from a url query string such as
69
+ # '?pin=12345~0&d=123&e=foo@bar.com&oq=bobo&ss=12345':
70
+ #
71
+ # filter {
72
+ # kv {
73
+ # field_split => "&?"
74
+ # }
75
+ # }
76
+ #
77
+ # The above splits on both "&" and "?" characters, giving you the following
78
+ # fields:
79
+ #
80
+ # * pin: 12345~0
81
+ # * d: 123
82
+ # * e: foo@bar.com
83
+ # * oq: bobo
84
+ # * ss: 12345
85
+ config :field_split, :validate => :string, :default => ' '
86
+
87
+
88
+ # A string of characters to use as delimiters for identifying key-value relations.
89
+ #
90
+ # These characters form a regex character class and thus you must escape special regex
91
+ # characters like [ or ] using \.
92
+ #
93
+ # Example, to identify key-values such as
94
+ # 'key1:value1 key2:value2':
95
+ #
96
+ # filter { kv { value_split => ":" } }
97
+ config :value_split, :validate => :string, :default => '='
98
+
99
+ # A string to prepend to all of the extracted keys
100
+ #
101
+ # Example, to prepend arg_ to all keys:
102
+ #
103
+ # filter { kv { prefix => "arg_" } }
104
+ config :prefix, :validate => :string, :default => ''
105
+
106
+ # The fields to perform 'key=value' searching on
107
+ #
108
+ # Example, to use the message field:
109
+ #
110
+ # filter { kv { source => "message" } }
111
+ config :source, :validate => :string, :default => "message"
112
+
113
+ # The name of the container to put all of the key-value pairs into
114
+ #
115
+ # If this setting is omitted, fields will be written to the root of the
116
+ # event.
117
+ #
118
+ # Example, to place all keys into field kv:
119
+ #
120
+ # filter { kv { target => "kv" } }
121
+ config :target, :validate => :string
122
+
123
+ # An array that specifies the parsed keys which should be added to event.
124
+ # By default all keys will be added.
125
+ #
126
+ # Example, to include only "from" and "to" from a source like "Hey, from=<abc>, to=def foo=bar"
127
+ # while "foo" key will not be added to event.
128
+ #
129
+ # filter {
130
+ # kv {
131
+ # include_keys = [ "from", "to" ]
132
+ # }
133
+ # }
134
+ config :include_keys, :validate => :array, :default => []
135
+
136
+ # An array that specifies the parsed keys which should not be added to event.
137
+ # By default no keys will be excluded.
138
+ #
139
+ # Example, to exclude "from" and "to" from a source like "Hey, from=<abc>, to=def foo=bar"
140
+ # while "foo" key will be added to event.
141
+ #
142
+ # filter {
143
+ # kv {
144
+ # exclude_keys = [ "from", "to" ]
145
+ # }
146
+ # }
147
+ config :exclude_keys, :validate => :array, :default => []
148
+
149
+ # A hash that specifies the default keys and their values that should be added to event
150
+ # in case these keys do no exist in the source field being parsed.
151
+ #
152
+ # filter {
153
+ # kv {
154
+ # default_keys = [ "from", "logstash@example.com",
155
+ # "to", "default@dev.null" ]
156
+ # }
157
+ # }
158
+ config :default_keys, :validate => :hash, :default => {}
159
+
160
+ def register
161
+ @trim_re = Regexp.new("[#{@trim}]") if !@trim.nil?
162
+ @trimkey_re = Regexp.new("[#{@trimkey}]") if !@trimkey.nil?
163
+ @scan_re = Regexp.new("((?:\\\\ |[^"+@field_split+@value_split+"])+)["+@value_split+"](?:\"([^\"]+)\"|'([^']+)'|((?:\\\\ |[^"+@field_split+"])+))")
164
+ end # def register
165
+
166
+ def filter(event)
167
+ return unless filter?(event)
168
+
169
+ kv = Hash.new
170
+
171
+ value = event[@source]
172
+
173
+ case value
174
+ when nil; # Nothing to do
175
+ when String; kv = parse(value, event, kv)
176
+ when Array; value.each { |v| kv = parse(v, event, kv) }
177
+ else
178
+ @logger.warn("kv filter has no support for this type of data",
179
+ :type => value.class, :value => value)
180
+ end # case value
181
+
182
+ # Add default key-values for missing keys
183
+ kv = @default_keys.merge(kv)
184
+
185
+ # If we have any keys, create/append the hash
186
+ if kv.length > 0
187
+ if @target.nil?
188
+ # Default is to write to the root of the event.
189
+ dest = event.to_hash
190
+ else
191
+ if !event[@target].is_a?(Hash)
192
+ @logger.debug("Overwriting existing target field", :target => @target)
193
+ dest = event[@target] = {}
194
+ else
195
+ dest = event[@target]
196
+ end
197
+ end
198
+
199
+ dest.merge!(kv)
200
+ filter_matched(event)
201
+ end
202
+ end # def filter
203
+
204
+ private
205
+ def parse(text, event, kv_keys)
206
+ if !event =~ /[@field_split]/
207
+ return kv_keys
208
+ end
209
+ text.scan(@scan_re) do |key, v1, v2, v3|
210
+ value = v1 || v2 || v3
211
+ key = @trimkey.nil? ? key : key.gsub(@trimkey_re, "")
212
+
213
+ # Bail out as per the values of @include_keys and @exclude_keys
214
+ next if not @include_keys.empty? and not @include_keys.include?(key)
215
+ next if @exclude_keys.include?(key)
216
+
217
+ key = event.sprintf(@prefix) + key
218
+
219
+ value = @trim.nil? ? value : value.gsub(@trim_re, "")
220
+ if kv_keys.has_key?(key)
221
+ if kv_keys[key].is_a? Array
222
+ kv_keys[key].push(value)
223
+ else
224
+ kv_keys[key] = [kv_keys[key], value]
225
+ end
226
+ else
227
+ kv_keys[key] = value
228
+ end
229
+ end
230
+ return kv_keys
231
+ end
232
+ end # class LogStash::Filters::KV