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,51 @@
1
+ # encoding: utf-8
2
+ class LogStash::Outputs::Lumberjack < LogStash::Outputs::Base
3
+
4
+ config_name "lumberjack"
5
+ milestone 1
6
+
7
+ # list of addresses lumberjack can send to
8
+ config :hosts, :validate => :array, :required => true
9
+
10
+ # the port to connect to
11
+ config :port, :validate => :number, :required => true
12
+
13
+ # ssl certificate to use
14
+ config :ssl_certificate, :validate => :path, :required => true
15
+
16
+ # window size
17
+ config :window_size, :validate => :number, :default => 5000
18
+
19
+ public
20
+ def register
21
+ require 'lumberjack/client'
22
+ connect
23
+ end # def register
24
+
25
+ public
26
+ def receive(event)
27
+ return unless output?(event)
28
+ begin
29
+ @client.write(event.to_hash)
30
+ rescue Exception => e
31
+ @logger.error("Client write error", :e => e, :backtrace => e.backtrace)
32
+ connect
33
+ retry
34
+ end
35
+ end # def receive
36
+
37
+ private
38
+ def connect
39
+ @logger.info("Connecting to lumberjack server.", :addresses => @hosts, :port => @port,
40
+ :ssl_certificate => @ssl_certificate, :window_size => @window_size)
41
+ begin
42
+ @client = Lumberjack::Client.new(:addresses => @hosts, :port => @port,
43
+ :ssl_certificate => @ssl_certificate, :window_size => @window_size)
44
+ rescue Exception => e
45
+ @logger.error("All hosts unavailable, sleeping", :hosts => @hosts, :e => e,
46
+ :backtrace => e.backtrace)
47
+ sleep(10)
48
+ retry
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,103 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+ require "json"
5
+
6
+ # This output ships metrics to MetricCatcher, allowing you to
7
+ # utilize Coda Hale's Metrics.
8
+ #
9
+ # More info on MetricCatcher: https://github.com/clearspring/MetricCatcher
10
+ #
11
+ # At Clearspring, we use it to count the response codes from Apache logs:
12
+ # metriccatcher {
13
+ # host => "localhost"
14
+ # port => "1420"
15
+ # type => "apache-access"
16
+ # fields => [ "response" ]
17
+ # meter => [ "%{host}.apache.response.%{response}", "1" ]
18
+ # }
19
+ class LogStash::Outputs::MetricCatcher < LogStash::Outputs::Base
20
+ config_name "metriccatcher"
21
+ milestone 2
22
+
23
+ # The address of the MetricCatcher
24
+ config :host, :validate => :string, :default => "localhost"
25
+ # The port to connect on your MetricCatcher
26
+ config :port, :validate => :number, :default => 1420
27
+
28
+ # The metrics to send. This supports dynamic strings like %{host}
29
+ # for metric names and also for values. This is a hash field with key
30
+ # of the metric name, value of the metric value.
31
+ #
32
+ # The value will be coerced to a floating point value. Values which cannot be
33
+ # coerced will zero (0)
34
+ config :gauge, :validate => :hash
35
+
36
+ # The metrics to send. This supports dynamic strings like %{host}
37
+ # for metric names and also for values. This is a hash field with key
38
+ # of the metric name, value of the metric value. Example:
39
+ #
40
+ # counter => [ "%{host}.apache.hits.%{response}, "1" ]
41
+ #
42
+ # The value will be coerced to a floating point value. Values which cannot be
43
+ # coerced will zero (0)
44
+ config :counter, :validate => :hash
45
+
46
+ # The metrics to send. This supports dynamic strings like %{host}
47
+ # for metric names and also for values. This is a hash field with key
48
+ # of the metric name, value of the metric value.
49
+ #
50
+ # The value will be coerced to a floating point value. Values which cannot be
51
+ # coerced will zero (0)
52
+ config :meter, :validate => :hash
53
+
54
+ # The metrics to send. This supports dynamic strings like %{host}
55
+ # for metric names and also for values. This is a hash field with key
56
+ # of the metric name, value of the metric value.
57
+ #
58
+ # The value will be coerced to a floating point value. Values which cannot be
59
+ # coerced will zero (0)
60
+ config :biased, :validate => :hash
61
+
62
+ # The metrics to send. This supports dynamic strings like %{host}
63
+ # for metric names and also for values. This is a hash field with key
64
+ # of the metric name, value of the metric value.
65
+ #
66
+ # The value will be coerced to a floating point value. Values which cannot be
67
+ # coerced will zero (0)
68
+ config :uniform, :validate => :hash
69
+
70
+ # The metrics to send. This supports dynamic strings like %{host}
71
+ # for metric names and also for values. This is a hash field with key
72
+ # of the metric name, value of the metric value. Example:
73
+ #
74
+ # timer => [ "%{host}.apache.response_time, "%{response_time}" ]
75
+ #
76
+ # The value will be coerced to a floating point value. Values which cannot be
77
+ # coerced will zero (0)
78
+ config :timer, :validate => :hash
79
+
80
+ def register
81
+ @socket = UDPSocket.new
82
+ end # def register
83
+
84
+ public
85
+ def receive(event)
86
+ return unless output?(event)
87
+
88
+ @@metric_types.each do |metric_type|
89
+ if instance_variable_defined?("@#{metric_type}")
90
+ instance_variable_get("@#{metric_type}").each do |metric_name, metric_value|
91
+ message = [{
92
+ "name" => event.sprintf(metric_name),
93
+ "type" => event.sprintf(metric_type),
94
+ "value" => event.sprintf(metric_value).to_f,
95
+ "timestamp" => event.sprintf("%{+%s}.") + Time.now.usec.to_s
96
+ }]
97
+
98
+ @socket.send(message.to_json, 0, @host, @port)
99
+ end # instance_variable_get("@#{metric_type}").each_slice
100
+ end # if
101
+ end # @metric_types.each
102
+ end # def receive
103
+ end # class LogStash::Outputs::MetricCatcher
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+
5
+ class LogStash::Outputs::Mongodb < LogStash::Outputs::Base
6
+
7
+ config_name "mongodb"
8
+ milestone 2
9
+
10
+ # a MongoDB URI to connect to
11
+ # See http://docs.mongodb.org/manual/reference/connection-string/
12
+ config :uri, :validate => :string, :required => true
13
+
14
+ # The database to use
15
+ config :database, :validate => :string, :required => true
16
+
17
+ # The collection to use. This value can use %{foo} values to dynamically
18
+ # select a collection based on data in the event.
19
+ config :collection, :validate => :string, :required => true
20
+
21
+ # If true, store the @timestamp field in mongodb as an ISODate type instead
22
+ # of an ISO8601 string. For more information about this, see
23
+ # http://www.mongodb.org/display/DOCS/Dates
24
+ config :isodate, :validate => :boolean, :default => false
25
+
26
+ # Number of seconds to wait after failure before retrying
27
+ config :retry_delay, :validate => :number, :default => 3, :required => false
28
+
29
+ # If true, a _id field will be added to the document before insertion.
30
+ # The _id field will use the timestamp of the event and overwrite an existing
31
+ # _id field in the event.
32
+ config :generateId, :validate => :boolean, :default => false
33
+
34
+ public
35
+ def register
36
+ require "mongo"
37
+ uriParsed=Mongo::URIParser.new(@uri)
38
+ conn = uriParsed.connection({})
39
+ if uriParsed.auths.length > 0
40
+ uriParsed.auths.each do |auth|
41
+ if !auth['db_name'].nil?
42
+ conn.add_auth(auth['db_name'], auth['username'], auth['password'], nil)
43
+ end
44
+ end
45
+ conn.apply_saved_authentication()
46
+ end
47
+ @db = conn.db(@database)
48
+ end # def register
49
+
50
+ public
51
+ def receive(event)
52
+ return unless output?(event)
53
+
54
+ begin
55
+ if @isodate
56
+ # the mongodb driver wants time values as a ruby Time object.
57
+ # set the @timestamp value of the document to a ruby Time object, then.
58
+ document = event.to_hash
59
+ else
60
+ document = event.to_hash.merge("@timestamp" => event["@timestamp"].to_json)
61
+ end
62
+ if @generateId
63
+ document['_id'] = BSON::ObjectId.new(nil, event["@timestamp"])
64
+ end
65
+ @db.collection(event.sprintf(@collection)).insert(document)
66
+ rescue => e
67
+ @logger.warn("Failed to send event to MongoDB", :event => event, :exception => e,
68
+ :backtrace => e.backtrace)
69
+ if e.error_code == 11000
70
+ # On a duplicate key error, skip the insert.
71
+ # We could check if the duplicate key err is the _id key
72
+ # and generate a new primary key.
73
+ # If the duplicate key error is on another field, we have no way
74
+ # to fix the issue.
75
+ else
76
+ sleep @retry_delay
77
+ retry
78
+ end
79
+ end
80
+ end # def receive
81
+ end # class LogStash::Outputs::Mongodb
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ require "logstash/namespace"
3
+ require "logstash/outputs/base"
4
+
5
+ # The nagios output is used for sending passive check results to nagios via the
6
+ # nagios command file.
7
+ #
8
+ # For this output to work, your event must have the following fields:
9
+ #
10
+ # * "nagios_host"
11
+ # * "nagios_service"
12
+ #
13
+ # These fields are supported, but optional:
14
+ #
15
+ # * "nagios_annotation"
16
+ # * "nagios_level"
17
+ #
18
+ # There are two configuration options:
19
+ #
20
+ # * commandfile - The location of the Nagios external command file
21
+ # * nagios_level - Specifies the level of the check to be sent. Defaults to
22
+ # CRITICAL and can be overriden by setting the "nagios_level" field to one
23
+ # of "OK", "WARNING", "CRITICAL", or "UNKNOWN"
24
+ #
25
+ # match => [ "message", "(error|ERROR|CRITICAL)" ]
26
+ #
27
+ # output{
28
+ # if [message] =~ /(error|ERROR|CRITICAL)/ {
29
+ # nagios {
30
+ # # your config here
31
+ # }
32
+ # }
33
+ # }
34
+ class LogStash::Outputs::Nagios < LogStash::Outputs::Base
35
+
36
+ config_name "nagios"
37
+ milestone 2
38
+
39
+ # The path to your nagios command file
40
+ config :commandfile, :validate => :path, :default => "/var/lib/nagios3/rw/nagios.cmd"
41
+
42
+ # The Nagios check level. Should be one of 0=OK, 1=WARNING, 2=CRITICAL,
43
+ # 3=UNKNOWN. Defaults to 2 - CRITICAL.
44
+ config :nagios_level, :validate => [ "0", "1", "2", "3" ], :default => "2"
45
+
46
+ public
47
+ def register
48
+ # nothing to do
49
+ end # def register
50
+
51
+ public
52
+ def receive(event)
53
+ return unless output?(event)
54
+
55
+ if !File.exists?(@commandfile)
56
+ @logger.warn("Skipping nagios output; command file is missing",
57
+ :commandfile => @commandfile, :missed_event => event)
58
+ return
59
+ end
60
+
61
+ # TODO(petef): if nagios_host/nagios_service both have more than one
62
+ # value, send multiple alerts. They will have to match up together by
63
+ # array indexes (host/service combos) and the arrays must be the same
64
+ # length.
65
+
66
+ host = event["nagios_host"]
67
+ if !host
68
+ @logger.warn("Skipping nagios output; nagios_host field is missing",
69
+ :missed_event => event)
70
+ return
71
+ end
72
+
73
+ service = event["nagios_service"]
74
+ if !service
75
+ @logger.warn("Skipping nagios output; nagios_service field is missing",
76
+ "missed_event" => event)
77
+ return
78
+ end
79
+
80
+ annotation = event["nagios_annotation"]
81
+ level = @nagios_level
82
+
83
+ if event["nagios_level"]
84
+ event_level = [*event["nagios_level"]]
85
+ case event_level[0].downcase
86
+ when "ok"
87
+ level = "0"
88
+ when "warning"
89
+ level = "1"
90
+ when "critical"
91
+ level = "2"
92
+ when "unknown"
93
+ level = "3"
94
+ else
95
+ @logger.warn("Invalid Nagios level. Defaulting to CRITICAL", :data => event_level)
96
+ end
97
+ end
98
+
99
+ cmd = "[#{Time.now.to_i}] PROCESS_SERVICE_CHECK_RESULT;#{host};#{service};#{level};"
100
+ if annotation
101
+ cmd += "#{annotation}: "
102
+ end
103
+ # In the multi-line case, escape the newlines for the nagios command file
104
+ cmd += (event["message"] || "<no message>").gsub("\n", "\\n")
105
+
106
+ @logger.debug("Opening nagios command file", :commandfile => @commandfile,
107
+ :nagios_command => cmd)
108
+ begin
109
+ File.open(@commandfile, "r+") do |f|
110
+ f.puts(cmd)
111
+ f.flush # TODO(sissel): probably don't need this.
112
+ end
113
+ rescue => e
114
+ @logger.warn("Skipping nagios output; error writing to command file",
115
+ :commandfile => @commandfile, :missed_event => event,
116
+ :exception => e, :backtrace => e.backtrace)
117
+ end
118
+ end # def receive
119
+ end # class LogStash::Outputs::Nagios
@@ -0,0 +1,123 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/namespace"
4
+
5
+ # The nagios_nsca output is used for sending passive check results to Nagios
6
+ # through the NSCA protocol.
7
+ #
8
+ # This is useful if your Nagios server is not the same as the source host from
9
+ # where you want to send logs or alerts. If you only have one server, this
10
+ # output is probably overkill # for you, take a look at the 'nagios' output
11
+ # instead.
12
+ #
13
+ # Here is a sample config using the nagios_nsca output:
14
+ # output {
15
+ # nagios_nsca {
16
+ # # specify the hostname or ip of your nagios server
17
+ # host => "nagios.example.com"
18
+ #
19
+ # # specify the port to connect to
20
+ # port => 5667
21
+ # }
22
+ # }
23
+
24
+ class LogStash::Outputs::NagiosNsca < LogStash::Outputs::Base
25
+
26
+ config_name "nagios_nsca"
27
+ milestone 1
28
+
29
+ # The status to send to nagios. Should be 0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN
30
+ config :nagios_status, :validate => :string, :required => true
31
+
32
+ # The nagios host or IP to send logs to. It should have a NSCA daemon running.
33
+ config :host, :validate => :string, :default => "localhost"
34
+
35
+ # The port where the NSCA daemon on the nagios host listens.
36
+ config :port, :validate => :number, :default => 5667
37
+
38
+ # The path to the 'send_nsca' binary on the local host.
39
+ config :send_nsca_bin, :validate => :path, :default => "/usr/sbin/send_nsca"
40
+
41
+ # The path to the send_nsca config file on the local host.
42
+ # Leave blank if you don't want to provide a config file.
43
+ config :send_nsca_config, :validate => :path
44
+
45
+ # The nagios 'host' you want to submit a passive check result to. This
46
+ # parameter accepts interpolation, e.g. you can use @source_host or other
47
+ # logstash internal variables.
48
+ config :nagios_host, :validate => :string, :default => "%{host}"
49
+
50
+ # The nagios 'service' you want to submit a passive check result to. This
51
+ # parameter accepts interpolation, e.g. you can use @source_host or other
52
+ # logstash internal variables.
53
+ config :nagios_service, :validate => :string, :default => "LOGSTASH"
54
+
55
+ # The format to use when writing events to nagios. This value
56
+ # supports any string and can include %{name} and other dynamic
57
+ # strings.
58
+ config :message_format, :validate => :string, :default => "%{@timestamp} %{host}: %{message}"
59
+
60
+ public
61
+ def register
62
+ #nothing for now
63
+ end
64
+
65
+ public
66
+ def receive(event)
67
+ # exit if type or tags don't match
68
+ return unless output?(event)
69
+
70
+ # catch logstash shutdown
71
+ if event == LogStash::SHUTDOWN
72
+ finished
73
+ return
74
+ end
75
+
76
+ # skip if 'send_nsca' binary doesn't exist
77
+ if !File.exists?(@send_nsca_bin)
78
+ @logger.warn("Skipping nagios_nsca output; send_nsca_bin file is missing",
79
+ "send_nsca_bin" => @send_nsca_bin, "missed_event" => event)
80
+ return
81
+ end
82
+
83
+ # interpolate params
84
+ nagios_host = event.sprintf(@nagios_host)
85
+ nagios_service = event.sprintf(@nagios_service)
86
+
87
+ # escape basic things in the log message
88
+ # TODO: find a way to escape the message correctly
89
+ msg = event.sprintf(@message_format)
90
+ msg.gsub!("\n", "<br/>")
91
+ msg.gsub!("'", "&#146;")
92
+
93
+ status = event.sprintf(@nagios_status)
94
+ if status.to_i.to_s != status # Check it round-trips to int correctly
95
+ msg = "status '#{status}' is not numeric"
96
+ status = 2
97
+ else
98
+ status = status.to_i
99
+ if status > 3 || status < 0
100
+ msg "status must be > 0 and <= 3, not #{status}"
101
+ status = 2
102
+ end
103
+ end
104
+
105
+ # build the command
106
+ # syntax: echo '<server>!<nagios_service>!<status>!<text>' | \
107
+ # /usr/sbin/send_nsca -H <nagios_host> -d '!' -c <nsca_config>"
108
+ cmd = %(echo '#{nagios_host}~#{nagios_service}~#{status}~#{msg}' |)
109
+ cmd << %( #{@send_nsca_bin} -H #{@host} -p #{@port} -d '~')
110
+ cmd << %( -c #{@send_nsca_config}) if @send_nsca_config
111
+ cmd << %( 2>/dev/null >/dev/null)
112
+ @logger.debug("Running send_nsca command", "nagios_nsca_command" => cmd)
113
+
114
+ begin
115
+ system cmd
116
+ rescue => e
117
+ @logger.warn("Skipping nagios_nsca output; error calling send_nsca",
118
+ "error" => $!, "nagios_nsca_command" => cmd,
119
+ "missed_event" => event)
120
+ @logger.debug("Backtrace", e.backtrace)
121
+ end
122
+ end # def receive
123
+ end # class LogStash::Outputs::NagiosNsca