logstash-lib 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (419) hide show
  1. data/.gitignore +24 -0
  2. data/.tailor +8 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG +1185 -0
  5. data/CONTRIBUTING.md +61 -0
  6. data/CONTRIBUTORS +79 -0
  7. data/LICENSE +14 -0
  8. data/Makefile +460 -0
  9. data/README.md +120 -0
  10. data/STYLE.md +96 -0
  11. data/bin/logstash +37 -0
  12. data/bin/logstash-test +4 -0
  13. data/bin/logstash-web +4 -0
  14. data/bin/logstash.lib.sh +78 -0
  15. data/bot/check_pull_changelog.rb +89 -0
  16. data/docs/configuration.md +260 -0
  17. data/docs/docgen.rb +242 -0
  18. data/docs/extending/example-add-a-new-filter.md +121 -0
  19. data/docs/extending/index.md +91 -0
  20. data/docs/flags.md +43 -0
  21. data/docs/generate_index.rb +28 -0
  22. data/docs/index.html.erb +56 -0
  23. data/docs/learn.md +46 -0
  24. data/docs/life-of-an-event.md +109 -0
  25. data/docs/logging-tool-comparisons.md +60 -0
  26. data/docs/plugin-doc.html.erb +91 -0
  27. data/docs/plugin-milestones.md +41 -0
  28. data/docs/plugin-synopsis.html.erb +24 -0
  29. data/docs/release-engineering.md +46 -0
  30. data/docs/release-test-results.md +14 -0
  31. data/docs/repositories.md +35 -0
  32. data/docs/tutorials/10-minute-walkthrough/apache-elasticsearch.conf +35 -0
  33. data/docs/tutorials/10-minute-walkthrough/apache-parse.conf +33 -0
  34. data/docs/tutorials/10-minute-walkthrough/apache_log.1 +1 -0
  35. data/docs/tutorials/10-minute-walkthrough/apache_log.2.bz2 +0 -0
  36. data/docs/tutorials/10-minute-walkthrough/hello-search.conf +25 -0
  37. data/docs/tutorials/10-minute-walkthrough/hello.conf +16 -0
  38. data/docs/tutorials/10-minute-walkthrough/index.md +124 -0
  39. data/docs/tutorials/10-minute-walkthrough/step-5-output.txt +17 -0
  40. data/docs/tutorials/getting-started-centralized-overview-diagram.png +0 -0
  41. data/docs/tutorials/getting-started-centralized-overview-diagram.xml +1 -0
  42. data/docs/tutorials/getting-started-centralized.md +217 -0
  43. data/docs/tutorials/getting-started-simple.md +200 -0
  44. data/docs/tutorials/just-enough-rabbitmq-for-logstash.md +201 -0
  45. data/docs/tutorials/media/frontend-response-codes.png +0 -0
  46. data/docs/tutorials/metrics-from-logs.md +84 -0
  47. data/docs/tutorials/zeromq.md +118 -0
  48. data/extract_services.rb +29 -0
  49. data/gembag.rb +64 -0
  50. data/lib/logstash-event.rb +2 -0
  51. data/lib/logstash.rb +4 -0
  52. data/lib/logstash/JRUBY-6970-openssl.rb +22 -0
  53. data/lib/logstash/JRUBY-6970.rb +102 -0
  54. data/lib/logstash/agent.rb +305 -0
  55. data/lib/logstash/certs/cacert.pem +3895 -0
  56. data/lib/logstash/codecs/base.rb +49 -0
  57. data/lib/logstash/codecs/compress_spooler.rb +50 -0
  58. data/lib/logstash/codecs/dots.rb +18 -0
  59. data/lib/logstash/codecs/edn.rb +28 -0
  60. data/lib/logstash/codecs/edn_lines.rb +36 -0
  61. data/lib/logstash/codecs/fluent.rb +55 -0
  62. data/lib/logstash/codecs/graphite.rb +114 -0
  63. data/lib/logstash/codecs/json.rb +41 -0
  64. data/lib/logstash/codecs/json_lines.rb +52 -0
  65. data/lib/logstash/codecs/json_spooler.rb +22 -0
  66. data/lib/logstash/codecs/line.rb +58 -0
  67. data/lib/logstash/codecs/msgpack.rb +43 -0
  68. data/lib/logstash/codecs/multiline.rb +189 -0
  69. data/lib/logstash/codecs/netflow.rb +342 -0
  70. data/lib/logstash/codecs/netflow/util.rb +212 -0
  71. data/lib/logstash/codecs/noop.rb +19 -0
  72. data/lib/logstash/codecs/oldlogstashjson.rb +56 -0
  73. data/lib/logstash/codecs/plain.rb +48 -0
  74. data/lib/logstash/codecs/rubydebug.rb +22 -0
  75. data/lib/logstash/codecs/spool.rb +38 -0
  76. data/lib/logstash/config/Makefile +4 -0
  77. data/lib/logstash/config/config_ast.rb +380 -0
  78. data/lib/logstash/config/file.rb +39 -0
  79. data/lib/logstash/config/grammar.rb +3504 -0
  80. data/lib/logstash/config/grammar.treetop +241 -0
  81. data/lib/logstash/config/mixin.rb +464 -0
  82. data/lib/logstash/config/registry.rb +13 -0
  83. data/lib/logstash/config/test.conf +18 -0
  84. data/lib/logstash/errors.rb +10 -0
  85. data/lib/logstash/event.rb +262 -0
  86. data/lib/logstash/filters/advisor.rb +178 -0
  87. data/lib/logstash/filters/alter.rb +173 -0
  88. data/lib/logstash/filters/anonymize.rb +93 -0
  89. data/lib/logstash/filters/base.rb +190 -0
  90. data/lib/logstash/filters/checksum.rb +50 -0
  91. data/lib/logstash/filters/cidr.rb +76 -0
  92. data/lib/logstash/filters/cipher.rb +145 -0
  93. data/lib/logstash/filters/clone.rb +35 -0
  94. data/lib/logstash/filters/collate.rb +114 -0
  95. data/lib/logstash/filters/csv.rb +94 -0
  96. data/lib/logstash/filters/date.rb +244 -0
  97. data/lib/logstash/filters/dns.rb +201 -0
  98. data/lib/logstash/filters/drop.rb +32 -0
  99. data/lib/logstash/filters/elapsed.rb +256 -0
  100. data/lib/logstash/filters/elasticsearch.rb +73 -0
  101. data/lib/logstash/filters/environment.rb +27 -0
  102. data/lib/logstash/filters/extractnumbers.rb +84 -0
  103. data/lib/logstash/filters/gelfify.rb +52 -0
  104. data/lib/logstash/filters/geoip.rb +145 -0
  105. data/lib/logstash/filters/grep.rb +153 -0
  106. data/lib/logstash/filters/grok.rb +425 -0
  107. data/lib/logstash/filters/grokdiscovery.rb +75 -0
  108. data/lib/logstash/filters/i18n.rb +51 -0
  109. data/lib/logstash/filters/json.rb +90 -0
  110. data/lib/logstash/filters/json_encode.rb +52 -0
  111. data/lib/logstash/filters/kv.rb +232 -0
  112. data/lib/logstash/filters/metaevent.rb +68 -0
  113. data/lib/logstash/filters/metrics.rb +237 -0
  114. data/lib/logstash/filters/multiline.rb +241 -0
  115. data/lib/logstash/filters/mutate.rb +399 -0
  116. data/lib/logstash/filters/noop.rb +21 -0
  117. data/lib/logstash/filters/prune.rb +149 -0
  118. data/lib/logstash/filters/punct.rb +32 -0
  119. data/lib/logstash/filters/railsparallelrequest.rb +86 -0
  120. data/lib/logstash/filters/range.rb +142 -0
  121. data/lib/logstash/filters/ruby.rb +42 -0
  122. data/lib/logstash/filters/sleep.rb +111 -0
  123. data/lib/logstash/filters/split.rb +64 -0
  124. data/lib/logstash/filters/sumnumbers.rb +73 -0
  125. data/lib/logstash/filters/syslog_pri.rb +107 -0
  126. data/lib/logstash/filters/translate.rb +121 -0
  127. data/lib/logstash/filters/unique.rb +29 -0
  128. data/lib/logstash/filters/urldecode.rb +57 -0
  129. data/lib/logstash/filters/useragent.rb +112 -0
  130. data/lib/logstash/filters/uuid.rb +58 -0
  131. data/lib/logstash/filters/xml.rb +139 -0
  132. data/lib/logstash/filters/zeromq.rb +123 -0
  133. data/lib/logstash/filterworker.rb +122 -0
  134. data/lib/logstash/inputs/base.rb +125 -0
  135. data/lib/logstash/inputs/collectd.rb +306 -0
  136. data/lib/logstash/inputs/drupal_dblog.rb +323 -0
  137. data/lib/logstash/inputs/drupal_dblog/jdbcconnection.rb +66 -0
  138. data/lib/logstash/inputs/elasticsearch.rb +140 -0
  139. data/lib/logstash/inputs/eventlog.rb +129 -0
  140. data/lib/logstash/inputs/eventlog/racob_fix.rb +44 -0
  141. data/lib/logstash/inputs/exec.rb +69 -0
  142. data/lib/logstash/inputs/file.rb +146 -0
  143. data/lib/logstash/inputs/ganglia.rb +127 -0
  144. data/lib/logstash/inputs/ganglia/gmondpacket.rb +146 -0
  145. data/lib/logstash/inputs/ganglia/xdr.rb +327 -0
  146. data/lib/logstash/inputs/gelf.rb +138 -0
  147. data/lib/logstash/inputs/gemfire.rb +222 -0
  148. data/lib/logstash/inputs/generator.rb +97 -0
  149. data/lib/logstash/inputs/graphite.rb +41 -0
  150. data/lib/logstash/inputs/heroku.rb +51 -0
  151. data/lib/logstash/inputs/imap.rb +136 -0
  152. data/lib/logstash/inputs/irc.rb +84 -0
  153. data/lib/logstash/inputs/log4j.rb +136 -0
  154. data/lib/logstash/inputs/lumberjack.rb +53 -0
  155. data/lib/logstash/inputs/pipe.rb +57 -0
  156. data/lib/logstash/inputs/rabbitmq.rb +126 -0
  157. data/lib/logstash/inputs/rabbitmq/bunny.rb +118 -0
  158. data/lib/logstash/inputs/rabbitmq/hot_bunnies.rb +1 -0
  159. data/lib/logstash/inputs/rabbitmq/march_hare.rb +129 -0
  160. data/lib/logstash/inputs/redis.rb +263 -0
  161. data/lib/logstash/inputs/relp.rb +106 -0
  162. data/lib/logstash/inputs/s3.rb +279 -0
  163. data/lib/logstash/inputs/snmptrap.rb +87 -0
  164. data/lib/logstash/inputs/sqlite.rb +185 -0
  165. data/lib/logstash/inputs/sqs.rb +172 -0
  166. data/lib/logstash/inputs/stdin.rb +46 -0
  167. data/lib/logstash/inputs/stomp.rb +84 -0
  168. data/lib/logstash/inputs/syslog.rb +237 -0
  169. data/lib/logstash/inputs/tcp.rb +231 -0
  170. data/lib/logstash/inputs/threadable.rb +18 -0
  171. data/lib/logstash/inputs/twitter.rb +82 -0
  172. data/lib/logstash/inputs/udp.rb +81 -0
  173. data/lib/logstash/inputs/unix.rb +163 -0
  174. data/lib/logstash/inputs/varnishlog.rb +48 -0
  175. data/lib/logstash/inputs/websocket.rb +50 -0
  176. data/lib/logstash/inputs/wmi.rb +72 -0
  177. data/lib/logstash/inputs/xmpp.rb +81 -0
  178. data/lib/logstash/inputs/zenoss.rb +143 -0
  179. data/lib/logstash/inputs/zeromq.rb +165 -0
  180. data/lib/logstash/kibana.rb +113 -0
  181. data/lib/logstash/loadlibs.rb +9 -0
  182. data/lib/logstash/logging.rb +89 -0
  183. data/lib/logstash/monkeypatches-for-bugs.rb +2 -0
  184. data/lib/logstash/monkeypatches-for-debugging.rb +47 -0
  185. data/lib/logstash/monkeypatches-for-performance.rb +66 -0
  186. data/lib/logstash/multiqueue.rb +53 -0
  187. data/lib/logstash/namespace.rb +16 -0
  188. data/lib/logstash/outputs/base.rb +120 -0
  189. data/lib/logstash/outputs/boundary.rb +116 -0
  190. data/lib/logstash/outputs/circonus.rb +78 -0
  191. data/lib/logstash/outputs/cloudwatch.rb +351 -0
  192. data/lib/logstash/outputs/csv.rb +55 -0
  193. data/lib/logstash/outputs/datadog.rb +93 -0
  194. data/lib/logstash/outputs/datadog_metrics.rb +123 -0
  195. data/lib/logstash/outputs/elasticsearch.rb +332 -0
  196. data/lib/logstash/outputs/elasticsearch/elasticsearch-template.json +44 -0
  197. data/lib/logstash/outputs/elasticsearch_http.rb +256 -0
  198. data/lib/logstash/outputs/elasticsearch_river.rb +214 -0
  199. data/lib/logstash/outputs/email.rb +299 -0
  200. data/lib/logstash/outputs/exec.rb +40 -0
  201. data/lib/logstash/outputs/file.rb +180 -0
  202. data/lib/logstash/outputs/ganglia.rb +75 -0
  203. data/lib/logstash/outputs/gelf.rb +208 -0
  204. data/lib/logstash/outputs/gemfire.rb +103 -0
  205. data/lib/logstash/outputs/google_bigquery.rb +570 -0
  206. data/lib/logstash/outputs/google_cloud_storage.rb +431 -0
  207. data/lib/logstash/outputs/graphite.rb +143 -0
  208. data/lib/logstash/outputs/graphtastic.rb +185 -0
  209. data/lib/logstash/outputs/hipchat.rb +80 -0
  210. data/lib/logstash/outputs/http.rb +142 -0
  211. data/lib/logstash/outputs/irc.rb +80 -0
  212. data/lib/logstash/outputs/jira.rb +109 -0
  213. data/lib/logstash/outputs/juggernaut.rb +105 -0
  214. data/lib/logstash/outputs/librato.rb +146 -0
  215. data/lib/logstash/outputs/loggly.rb +93 -0
  216. data/lib/logstash/outputs/lumberjack.rb +51 -0
  217. data/lib/logstash/outputs/metriccatcher.rb +103 -0
  218. data/lib/logstash/outputs/mongodb.rb +81 -0
  219. data/lib/logstash/outputs/nagios.rb +119 -0
  220. data/lib/logstash/outputs/nagios_nsca.rb +123 -0
  221. data/lib/logstash/outputs/null.rb +18 -0
  222. data/lib/logstash/outputs/opentsdb.rb +101 -0
  223. data/lib/logstash/outputs/pagerduty.rb +79 -0
  224. data/lib/logstash/outputs/pipe.rb +132 -0
  225. data/lib/logstash/outputs/rabbitmq.rb +96 -0
  226. data/lib/logstash/outputs/rabbitmq/bunny.rb +135 -0
  227. data/lib/logstash/outputs/rabbitmq/hot_bunnies.rb +1 -0
  228. data/lib/logstash/outputs/rabbitmq/march_hare.rb +143 -0
  229. data/lib/logstash/outputs/redis.rb +245 -0
  230. data/lib/logstash/outputs/riak.rb +152 -0
  231. data/lib/logstash/outputs/riemann.rb +109 -0
  232. data/lib/logstash/outputs/s3.rb +356 -0
  233. data/lib/logstash/outputs/sns.rb +124 -0
  234. data/lib/logstash/outputs/solr_http.rb +78 -0
  235. data/lib/logstash/outputs/sqs.rb +141 -0
  236. data/lib/logstash/outputs/statsd.rb +116 -0
  237. data/lib/logstash/outputs/stdout.rb +53 -0
  238. data/lib/logstash/outputs/stomp.rb +67 -0
  239. data/lib/logstash/outputs/syslog.rb +145 -0
  240. data/lib/logstash/outputs/tcp.rb +145 -0
  241. data/lib/logstash/outputs/udp.rb +38 -0
  242. data/lib/logstash/outputs/websocket.rb +46 -0
  243. data/lib/logstash/outputs/websocket/app.rb +29 -0
  244. data/lib/logstash/outputs/websocket/pubsub.rb +45 -0
  245. data/lib/logstash/outputs/xmpp.rb +78 -0
  246. data/lib/logstash/outputs/zabbix.rb +108 -0
  247. data/lib/logstash/outputs/zeromq.rb +125 -0
  248. data/lib/logstash/pipeline.rb +286 -0
  249. data/lib/logstash/plugin.rb +150 -0
  250. data/lib/logstash/plugin_mixins/aws_config.rb +93 -0
  251. data/lib/logstash/program.rb +15 -0
  252. data/lib/logstash/runner.rb +238 -0
  253. data/lib/logstash/sized_queue.rb +8 -0
  254. data/lib/logstash/test.rb +183 -0
  255. data/lib/logstash/threadwatchdog.rb +37 -0
  256. data/lib/logstash/time_addon.rb +33 -0
  257. data/lib/logstash/util.rb +106 -0
  258. data/lib/logstash/util/buftok.rb +139 -0
  259. data/lib/logstash/util/charset.rb +39 -0
  260. data/lib/logstash/util/fieldreference.rb +50 -0
  261. data/lib/logstash/util/password.rb +25 -0
  262. data/lib/logstash/util/prctl.rb +11 -0
  263. data/lib/logstash/util/relp.rb +326 -0
  264. data/lib/logstash/util/require-helper.rb +18 -0
  265. data/lib/logstash/util/socket_peer.rb +7 -0
  266. data/lib/logstash/util/zenoss.rb +566 -0
  267. data/lib/logstash/util/zeromq.rb +47 -0
  268. data/lib/logstash/version.rb +6 -0
  269. data/locales/en.yml +170 -0
  270. data/logstash-event.gemspec +29 -0
  271. data/logstash.gemspec +128 -0
  272. data/patterns/firewalls +60 -0
  273. data/patterns/grok-patterns +91 -0
  274. data/patterns/haproxy +37 -0
  275. data/patterns/java +3 -0
  276. data/patterns/linux-syslog +14 -0
  277. data/patterns/mcollective +1 -0
  278. data/patterns/mcollective-patterns +4 -0
  279. data/patterns/nagios +108 -0
  280. data/patterns/postgresql +3 -0
  281. data/patterns/redis +3 -0
  282. data/patterns/ruby +2 -0
  283. data/pkg/build.sh +135 -0
  284. data/pkg/centos/after-install.sh +1 -0
  285. data/pkg/centos/before-install.sh +10 -0
  286. data/pkg/centos/before-remove.sh +11 -0
  287. data/pkg/centos/sysconfig +15 -0
  288. data/pkg/debian/after-install.sh +5 -0
  289. data/pkg/debian/before-install.sh +13 -0
  290. data/pkg/debian/before-remove.sh +13 -0
  291. data/pkg/debian/build.sh +34 -0
  292. data/pkg/debian/debian/README +6 -0
  293. data/pkg/debian/debian/changelog +17 -0
  294. data/pkg/debian/debian/compat +1 -0
  295. data/pkg/debian/debian/control +16 -0
  296. data/pkg/debian/debian/copyright +27 -0
  297. data/pkg/debian/debian/dirs +19 -0
  298. data/pkg/debian/debian/docs +0 -0
  299. data/pkg/debian/debian/logstash.default +39 -0
  300. data/pkg/debian/debian/logstash.init +201 -0
  301. data/pkg/debian/debian/logstash.install +1 -0
  302. data/pkg/debian/debian/logstash.logrotate +9 -0
  303. data/pkg/debian/debian/logstash.postinst +68 -0
  304. data/pkg/debian/debian/logstash.postrm +23 -0
  305. data/pkg/debian/debian/manpage.1.ex +59 -0
  306. data/pkg/debian/debian/preinst.ex +37 -0
  307. data/pkg/debian/debian/prerm.ex +40 -0
  308. data/pkg/debian/debian/release.conf +5 -0
  309. data/pkg/debian/debian/rules +80 -0
  310. data/pkg/debian/debian/watch.ex +22 -0
  311. data/pkg/logrotate.conf +8 -0
  312. data/pkg/logstash-web.default +41 -0
  313. data/pkg/logstash-web.sysv.debian +201 -0
  314. data/pkg/logstash-web.upstart.ubuntu +18 -0
  315. data/pkg/logstash.default +45 -0
  316. data/pkg/logstash.sysv.debian +202 -0
  317. data/pkg/logstash.sysv.redhat +158 -0
  318. data/pkg/logstash.upstart.ubuntu +20 -0
  319. data/pkg/rpm/SOURCES/logstash.conf +26 -0
  320. data/pkg/rpm/SOURCES/logstash.init +80 -0
  321. data/pkg/rpm/SOURCES/logstash.logrotate +8 -0
  322. data/pkg/rpm/SOURCES/logstash.sysconfig +3 -0
  323. data/pkg/rpm/SOURCES/logstash.wrapper +105 -0
  324. data/pkg/rpm/SPECS/logstash.spec +180 -0
  325. data/pkg/rpm/readme.md +4 -0
  326. data/pkg/ubuntu/after-install.sh +7 -0
  327. data/pkg/ubuntu/before-install.sh +12 -0
  328. data/pkg/ubuntu/before-remove.sh +13 -0
  329. data/pull_release_note.rb +25 -0
  330. data/require-analyze.rb +22 -0
  331. data/spec/README.md +14 -0
  332. data/spec/codecs/edn.rb +40 -0
  333. data/spec/codecs/edn_lines.rb +53 -0
  334. data/spec/codecs/graphite.rb +96 -0
  335. data/spec/codecs/json.rb +57 -0
  336. data/spec/codecs/json_lines.rb +51 -0
  337. data/spec/codecs/json_spooler.rb +43 -0
  338. data/spec/codecs/msgpack.rb +39 -0
  339. data/spec/codecs/multiline.rb +60 -0
  340. data/spec/codecs/oldlogstashjson.rb +55 -0
  341. data/spec/codecs/plain.rb +35 -0
  342. data/spec/codecs/spool.rb +35 -0
  343. data/spec/conditionals/test.rb +323 -0
  344. data/spec/config.rb +31 -0
  345. data/spec/event.rb +165 -0
  346. data/spec/examples/fail2ban.rb +28 -0
  347. data/spec/examples/graphite-input.rb +41 -0
  348. data/spec/examples/mysql-slow-query.rb +70 -0
  349. data/spec/examples/parse-apache-logs.rb +66 -0
  350. data/spec/examples/parse-haproxy-logs.rb +115 -0
  351. data/spec/examples/syslog.rb +48 -0
  352. data/spec/filters/alter.rb +96 -0
  353. data/spec/filters/anonymize.rb +189 -0
  354. data/spec/filters/checksum.rb +41 -0
  355. data/spec/filters/clone.rb +67 -0
  356. data/spec/filters/collate.rb +122 -0
  357. data/spec/filters/csv.rb +174 -0
  358. data/spec/filters/date.rb +285 -0
  359. data/spec/filters/date_performance.rb +31 -0
  360. data/spec/filters/dns.rb +159 -0
  361. data/spec/filters/drop.rb +19 -0
  362. data/spec/filters/elapsed.rb +294 -0
  363. data/spec/filters/environment.rb +43 -0
  364. data/spec/filters/geoip.rb +62 -0
  365. data/spec/filters/grep.rb +342 -0
  366. data/spec/filters/grok.rb +473 -0
  367. data/spec/filters/grok/timeout2.rb +56 -0
  368. data/spec/filters/grok/timeouts.rb +39 -0
  369. data/spec/filters/i18n.rb +25 -0
  370. data/spec/filters/json.rb +72 -0
  371. data/spec/filters/json_encode.rb +37 -0
  372. data/spec/filters/kv.rb +403 -0
  373. data/spec/filters/metrics.rb +212 -0
  374. data/spec/filters/multiline.rb +119 -0
  375. data/spec/filters/mutate.rb +180 -0
  376. data/spec/filters/noop.rb +221 -0
  377. data/spec/filters/prune.rb +441 -0
  378. data/spec/filters/punct.rb +18 -0
  379. data/spec/filters/railsparallelrequest.rb +112 -0
  380. data/spec/filters/range.rb +169 -0
  381. data/spec/filters/split.rb +58 -0
  382. data/spec/filters/translate.rb +70 -0
  383. data/spec/filters/unique.rb +25 -0
  384. data/spec/filters/useragent.rb +42 -0
  385. data/spec/filters/xml.rb +157 -0
  386. data/spec/inputs/file.rb +107 -0
  387. data/spec/inputs/gelf.rb +52 -0
  388. data/spec/inputs/generator.rb +30 -0
  389. data/spec/inputs/imap.rb +60 -0
  390. data/spec/inputs/redis.rb +63 -0
  391. data/spec/inputs/relp.rb +70 -0
  392. data/spec/inputs/tcp.rb +101 -0
  393. data/spec/jar.rb +21 -0
  394. data/spec/outputs/csv.rb +266 -0
  395. data/spec/outputs/elasticsearch.rb +161 -0
  396. data/spec/outputs/elasticsearch_http.rb +240 -0
  397. data/spec/outputs/email.rb +173 -0
  398. data/spec/outputs/file.rb +82 -0
  399. data/spec/outputs/graphite.rb +236 -0
  400. data/spec/outputs/redis.rb +127 -0
  401. data/spec/speed.rb +20 -0
  402. data/spec/sqlite-test.rb +81 -0
  403. data/spec/support/LOGSTASH-733.rb +21 -0
  404. data/spec/support/LOGSTASH-820.rb +25 -0
  405. data/spec/support/akamai-grok.rb +26 -0
  406. data/spec/support/date-http.rb +17 -0
  407. data/spec/support/postwait1.rb +26 -0
  408. data/spec/support/pull375.rb +21 -0
  409. data/spec/test_utils.rb +125 -0
  410. data/spec/util/fieldeval_spec.rb +44 -0
  411. data/test/jenkins/config.xml.erb +74 -0
  412. data/test/jenkins/create-jobs.rb +23 -0
  413. data/test/jenkins/generatorjob.config.xml +66 -0
  414. data/tools/Gemfile +14 -0
  415. data/tools/Gemfile.jruby-1.9.lock +322 -0
  416. data/tools/Gemfile.rbx-2.1.lock +516 -0
  417. data/tools/Gemfile.ruby-1.9.1.lock +310 -0
  418. data/tools/Gemfile.ruby-2.0.0.lock +310 -0
  419. metadata +629 -0
@@ -0,0 +1,24 @@
1
+ <%= name %> {
2
+ <% sorted_attributes.each do |name, config|
3
+ next if config[:deprecated]
4
+ if config[:validate].is_a?(Array)
5
+ annotation = "string, one of #{config[:validate].inspect}"
6
+ elsif config[:validate] == :path
7
+ annotation = "a valid filesystem path"
8
+ else
9
+ annotation = "#{config[:validate]}"
10
+ end
11
+
12
+ if name.is_a?(Regexp)
13
+ name = "/" + name.to_s.gsub(/^\(\?-mix:/, "").gsub(/\)$/, "") + "/"
14
+ end
15
+ if config[:required]
16
+ annotation += " (required)"
17
+ else
18
+ annotation += " (optional)"
19
+ end
20
+ annotation += ", default: #{config[:default].inspect}" if config.include?(:default)
21
+ -%>
22
+ <a href="#<%= name %>"><%= name %></a> => ... # <%= annotation %>
23
+ <% end -%>
24
+ }
@@ -0,0 +1,46 @@
1
+ ---
2
+ title: Release Engineering - logstash
3
+ layout: content_right
4
+ ---
5
+
6
+ # logstash rel-eng.
7
+
8
+ The version patterns for logstash are x.y.z
9
+
10
+ * In the same x.y release, no backwards-incompatible changes will be made.
11
+ * Between x.y.z and x.y.(z+1), deprecations are allowed but should be
12
+ functional through the next release.
13
+ * Any backwards-incompatible changes should be well-documented and, if
14
+ possible, should include tools to help in migrating.
15
+ * It is OK to add features, plugins, etc, in minor releases as long as they do
16
+ not break existing functionality.
17
+
18
+ I do not suspect the 'x' (currently 1) will change frequently. It should only change
19
+ if there are major, backwards-incompatible changes made to logstash, and I'm
20
+ trying to not make those changes, so logstash should forever be at 1.y,z,
21
+ right? ;)
22
+
23
+ # building a release.
24
+
25
+ * Make sure all tests pass (make test)
26
+ * `ruby bin/logstash test`
27
+ * `java -jar logstash-x.y.z-flatjar.jar test`
28
+ * Update VERSION.rb
29
+ * VERSION=$(ruby -r./VERSION -e 'puts LOGSTASH_VERSION')
30
+ * Ensure CHANGELOG is up-to-date
31
+ * `git tag v$VERSION; git push origin master; git push --tags`
32
+ * Build binaries
33
+ * `make jar`
34
+ * make docs
35
+ * copy build/docs to ../logstash.github.com/docs/$VERSION
36
+ * Note: you will need to use C-ruby 1.9.2 for this.
37
+ * You'll need 'bluecloth' and 'cabin' rubygems installed.
38
+ * cd ../logstash.github.com
39
+ * `make clean update VERSION=$VERSION`
40
+ * `git add docs/$VERSION docs/latest.html index.html _layouts/*`
41
+ * `git commit -m "version $VERSION docs" && git push origin master`
42
+ * Publish binaries
43
+ * Stage binaries at `carrera.databits.net:/home/jls/s/files/logstash/`
44
+ * Update #logstash IRC /topic
45
+ * Send announcement email to logstash-users@, include relevant download URLs &
46
+ changelog (see past emails for a template)
@@ -0,0 +1,14 @@
1
+ # Testing for a release
2
+
3
+ * exec + split + stdout
4
+ * tcp input (server and client modes)
5
+ * tcp output (server and client modes)
6
+ * graphite output (tested server failure conditions, netcat receiver)
7
+ * statsd output (increment, netcat receiver)
8
+
9
+ ## Test Suite
10
+
11
+ Finished in 16.826 seconds.
12
+
13
+ 29 tests, 119 assertions, 0 failures, 0 errors
14
+
@@ -0,0 +1,35 @@
1
+ ---
2
+ title: repositories - logstash
3
+ layout: content_right
4
+ ---
5
+ # LogStash repositories
6
+
7
+ We also have Logstash available als APT and YUM repositories.
8
+
9
+ Our public signing key can be found [here](http://packages.elasticsearch.org/GPG-KEY-elasticsearch)
10
+
11
+ ## Apt based distributions
12
+
13
+ Add the key:
14
+
15
+ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -
16
+
17
+ Add the repo to /etc/apt/sources.list
18
+
19
+ deb http://packages.elasticsearch.org/logstash/1.3/debian stable main
20
+
21
+
22
+ ## YUM based distributions
23
+
24
+ Add the key:
25
+
26
+ rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
27
+
28
+ Add the repo to /etc/yum.repos.d/ directory
29
+
30
+ [logstash-1.3]
31
+ name=logstash repository for 1.3.x packages
32
+ baseurl=http://packages.elasticsearch.org/logstash/1.3/centos
33
+ gpgcheck=1
34
+ gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
35
+ enabled=1
@@ -0,0 +1,35 @@
1
+ input {
2
+ tcp {
3
+ type => "apache"
4
+ port => 3333
5
+ }
6
+ }
7
+
8
+ filter {
9
+ if [type] == "apache" {
10
+ grok {
11
+ # See the following URL for a complete list of named patterns
12
+ # logstash/grok ships with by default:
13
+ # https://github.com/logstash/logstash/tree/master/patterns
14
+ #
15
+ # The grok filter will use the below pattern and on successful match use
16
+ # any captured values as new fields in the event.
17
+ match => { "message" => "%{COMBINEDAPACHELOG}" }
18
+ }
19
+
20
+ date {
21
+ # Try to pull the timestamp from the 'timestamp' field (parsed above with
22
+ # grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700"
23
+ match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
24
+ }
25
+ }
26
+ }
27
+
28
+ output {
29
+ elasticsearch {
30
+ # Setting 'embedded' will run a real elasticsearch server inside logstash.
31
+ # This option below saves you from having to run a separate process just
32
+ # for ElasticSearch, so you can get started quicker!
33
+ embedded => true
34
+ }
35
+ }
@@ -0,0 +1,33 @@
1
+ input {
2
+ tcp {
3
+ type => "apache"
4
+ port => 3333
5
+ }
6
+ }
7
+
8
+ filter {
9
+ if [type] == "apache" {
10
+ grok {
11
+ # See the following URL for a complete list of named patterns
12
+ # logstash/grok ships with by default:
13
+ # https://github.com/logstash/logstash/tree/master/patterns
14
+ #
15
+ # The grok filter will use the below pattern and on successful match use
16
+ # any captured values as new fields in the event.
17
+ match => { "message" => "%{COMBINEDAPACHELOG}" }
18
+ }
19
+
20
+ date {
21
+ # Try to pull the timestamp from the 'timestamp' field (parsed above with
22
+ # grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700"
23
+ match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
24
+ }
25
+ }
26
+ }
27
+
28
+ output {
29
+ # Use stdout in debug mode again to see what logstash makes of the event.
30
+ stdout {
31
+ debug => true
32
+ }
33
+ }
@@ -0,0 +1 @@
1
+ 129.92.249.70 - - [18/Aug/2011:06:00:14 -0700] "GET /style2.css HTTP/1.1" 200 1820 "http://www.semicomplete.com/blog/geekery/bypassing-captive-portals.html" "Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5"
@@ -0,0 +1,25 @@
1
+ input {
2
+ stdin {
3
+ # A type is a label applied to an event. It is used later with filters
4
+ # to restrict what filters are run against each event.
5
+ type => "human"
6
+ }
7
+ }
8
+
9
+ output {
10
+ # Print each event to stdout.
11
+ stdout {
12
+ # Enabling 'rubydebug' codec on the stdout output will make logstash
13
+ # pretty-print the entire event as something similar to a JSON representation.
14
+ codec => rubydebug
15
+ }
16
+
17
+ # You can have multiple outputs. All events generally to all outputs.
18
+ # Output events to elasticsearch
19
+ elasticsearch {
20
+ # Setting 'embedded' will run a real elasticsearch server inside logstash.
21
+ # This option below saves you from having to run a separate process just
22
+ # for ElasticSearch, so you can get started quicker!
23
+ embedded => true
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ input {
2
+ stdin {
3
+ # A type is a label applied to an event. It is used later with filters
4
+ # to restrict what filters are run against each event.
5
+ type => "human"
6
+ }
7
+ }
8
+
9
+ output {
10
+ # Print each event to stdout.
11
+ stdout {
12
+ # Enabling 'rubydebug' codec on the stdout output will make logstash
13
+ # pretty-print the entire event as something similar to a JSON representation.
14
+ codec => rubydebug
15
+ }
16
+ }
@@ -0,0 +1,124 @@
1
+ ---
2
+ title: Logstash 10-Minute Tutorial
3
+ layout: content_right
4
+ ---
5
+ # Logstash 10-minute Tutorial
6
+
7
+ ## Step 1 - Download
8
+
9
+ ### Download logstash:
10
+
11
+ * [logstash-%VERSION%-flatjar.jar](https://download.elasticsearch.org/logstash/logstash/logstash-%VERSION%-flatjar.jar)
12
+
13
+ ### Requirements:
14
+
15
+ * java
16
+
17
+ ### The Secret:
18
+
19
+ logstash is written in JRuby, but I release standalone jar files for easy
20
+ deployment, so you don't need to download JRuby or most any other dependencies.
21
+
22
+ I bake as much as possible into the single release file.
23
+
24
+ ## Step 2 - A hello world.
25
+
26
+ ### Download this config file:
27
+
28
+ * [hello.conf](hello.conf)
29
+
30
+ ### Run it:
31
+
32
+ java -jar logstash-%VERSION%-flatjar.jar agent -f hello.conf
33
+
34
+ Type stuff on standard input. Press enter. Watch what event logstash sees.
35
+ Press ^C to kill it.
36
+
37
+ ## Step 3 - Add ElasticSearch
38
+
39
+ ### Download this config file:
40
+
41
+ * [hello-search.conf](hello-search.conf)
42
+
43
+ ### Run it:
44
+
45
+ java -jar logstash-%VERSION%-flatjar.jar agent -f hello-search.conf
46
+
47
+ Same config as step 2, but now we are also writing events to ElasticSearch. Do
48
+ a search for `*` (all):
49
+
50
+ curl 'http://localhost:9200/_search?pretty=1&q=*'
51
+
52
+ ## Step 4 - logstash web
53
+
54
+ The previous step is good, but a better frontend on elasticsearch would help!
55
+
56
+ The same config as step 3 is used.
57
+
58
+ ### Run it:
59
+
60
+ java -jar logstash-%VERSION%-flatjar.jar agent -f hello-search.conf -- web
61
+
62
+ The above runs both the agent and the logstash web interface in the same
63
+ process. Useful for simple deploys.
64
+
65
+ ### Use it:
66
+
67
+ Go to the logstash web interface in browser: <http://localhost:9292/>
68
+
69
+ Type stuff on stdin on the agent, then search for it in the web interface.
70
+
71
+ ## Step 5 - real world example
72
+
73
+ Let's backfill some old apache logs. First, let's use grok.
74
+
75
+ Use the ['grok'](../../filters/grok) logstash filter to parse logs.
76
+
77
+ ### Download
78
+
79
+ * [apache-parse.conf](apache-parse.conf)
80
+ * [apache_log.1](apache_log.1) (a single apache log line)
81
+
82
+ ### Run it
83
+
84
+ java -jar logstash-%VERSION%-flatjar.jar agent -f apache-parse.conf
85
+
86
+ Logstash will now be listening on TCP port 3333. Send an apache log message at it:
87
+
88
+ nc localhost 3333 < apache_log.1
89
+
90
+ The expected output can be viewed here: [step-5-output.txt](step-5-output.txt)
91
+
92
+ ## Step 6 - real world example + search
93
+
94
+ Same as the previous step, but we'll output to ElasticSearch now.
95
+
96
+ ### Download
97
+
98
+ * [apache-elasticsearch.conf](apache-elasticsearch.conf)
99
+ * [apache_log.2.bz2](apache_log.2.bz2) (2 days of apache logs)
100
+
101
+ ### Run it
102
+
103
+ java -jar logstash-%VERSION%-flatjar.jar agent -f apache-elasticsearch.conf -- web
104
+
105
+ Logstash should be all set for you now. Start feeding it logs:
106
+
107
+ bzip2 -d apache_log.2.bz2
108
+
109
+ nc localhost 3333 < apache_log.2
110
+
111
+ Go to the logstash web interface in browser: <http://localhost:9292/>
112
+
113
+ Try some search queries. To see all the data, search for `*` (no quotes). Click
114
+ on some results, drill around in some logs.
115
+
116
+ ## Want more?
117
+
118
+ For further learning, try these:
119
+
120
+ * [Watch a presentation on logstash](http://www.youtube.com/embed/RuUFnog29M4)
121
+ * [Getting started 'standalone' guide](http://logstash.net/docs/%VERSION%/tutorials/getting-started-simple)
122
+ * [Getting started 'centralized' guide](http://logstash.net/docs/%VERSION%/tutorials/getting-started-centralized) -
123
+ learn how to build out your logstash infrastructure and centralize your logs.
124
+ * [Dive into the docs](http://logstash.net/docs/%VERSION%/)
@@ -0,0 +1,17 @@
1
+ {
2
+ "type" => "apache",
3
+ "clientip" => "129.92.249.70",
4
+ "ident" => "-",
5
+ "auth" => "-",
6
+ "timestamp" => "18/Aug/2011:06:00:14 -0700",
7
+ "verb" => "GET",
8
+ "request" => "/style2.css",
9
+ "httpversion" => "1.1",
10
+ "response" => "200",
11
+ "bytes" => "1820",
12
+ "referrer" => "http://www.semicomplete.com/blog/geekery/bypassing-captive-portals.html",
13
+ "agent" => "\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\"",
14
+ "@timestamp" => "2011-08-18T13:00:14.000Z",
15
+ "host" => "127.0.0.1",
16
+ "message" => "129.92.249.70 - - [18/Aug/2011:06:00:14 -0700] \"GET /style2.css HTTP/1.1\" 200 1820 \"http://www.semicomplete.com/blog/geekery/bypassing-captive-portals.html\" \"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\"\n"
17
+ }
@@ -0,0 +1 @@
1
+ <mxGraphModel dx="800" dy="800" grid="1" guides="1" tooltips="1" connect="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="Shipper" style="icon;image=http://logstash.net/images/logstash.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="50" y="110" width="60" height="60" as="geometry"/></mxCell><mxCell id="5" value="Broker" style="icon;image=http://www.java-freelance.fr/wp-content/uploads/2012/06/banner_redis-300dpi-0315a8013afee137cce47b474541d7f1.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="180" y="161" width="60" height="60" as="geometry"/></mxCell><mxCell id="7" value="Storage &amp; Search" style="icon;image=http://www.elasticsearch.org/images/set3/bonsai2.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="470" y="161" width="120" height="60" as="geometry"/></mxCell><mxCell id="8" value="" style="endArrow=open;entryX=0;entryY=0.5;fontSize=18" parent="1" source="5" target="11" edge="1"><mxGeometry x="-40" as="geometry"><mxPoint x="520" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="11" value="Indexer" style="icon;image=http://logstash.net/images/logstash.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="280" y="161" width="140" height="60" as="geometry"/></mxCell><mxCell id="13" value="Shipper" style="icon;image=http://logstash.net/images/logstash.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="50" y="240" width="60" height="60" as="geometry"/></mxCell><mxCell id="16" value="...&#xa;" style="text;fontSize=36" parent="1" vertex="1"><mxGeometry x="60" y="178" width="40" height="52" as="geometry"/></mxCell><mxCell id="17" value="" style="endArrow=none;exitX=1;exitY=0.5;entryX=1;entryY=0.5;fontSize=18" parent="1" edge="1"><mxGeometry x="50" y="-7" as="geometry"><mxPoint x="260" y="250" as="sourcePoint"/><mxPoint x="260" y="250" as="targetPoint"/></mxGeometry></mxCell><mxCell id="19" value="" style="endArrow=open;entryX=0;entryY=0.5;exitX=1;exitY=0.5;fontSize=18" parent="1" source="2" target="5" edge="1"><mxGeometry x="-40" as="geometry"><mxPoint x="520" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="20" value="" style="endArrow=open;entryX=0;entryY=0.5;exitX=1;exitY=0.5;fontSize=18" parent="1" source="13" target="5" edge="1"><mxGeometry x="-40" as="geometry"><mxPoint x="520" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="" style="endArrow=open;exitX=1;exitY=0.5;fontSize=18" parent="1" source="11" target="7" edge="1"><mxGeometry x="-40" as="geometry"><mxPoint x="490" y="200" as="sourcePoint"/><mxPoint x="520" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="26" value="Logstash" style="label;image=http://logstash.net/images/logstash.png;fontSize=12" parent="1" vertex="1"><mxGeometry x="210" y="10" width="140" height="40" as="geometry"/></mxCell><mxCell id="28" value="Redis" style="label;image=http://www.java-freelance.fr/wp-content/uploads/2012/06/banner_redis-300dpi-0315a8013afee137cce47b474541d7f1.png" parent="1" vertex="1"><mxGeometry x="350" y="10" width="110" height="40" as="geometry"/></mxCell><mxCell id="32" value="ElasticSearch" style="label;image=http://www.elasticsearch.org/images/set3/bonsai2.png;fontSize=12" parent="1" vertex="1"><mxGeometry x="460" y="10" width="210" height="40" as="geometry"/></mxCell><mxCell id="34" value="Web Interface" style="icon;image=http://logstash.net/images/logstash.png;fontSize=18" parent="1" vertex="1"><mxGeometry x="630" y="161" width="140" height="60" as="geometry"/></mxCell><mxCell id="35" value="" style="endArrow=open;entryX=0;entryY=0.5;exitX=1;exitY=0.5;fontSize=18" parent="1" source="7" target="34" edge="1"><mxGeometry x="-40" as="geometry"><mxPoint x="520" y="160" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="Legend:" style="text;align=center;verticalAlign=middle;fontSize=18" parent="1" vertex="1"><mxGeometry x="130" y="10" width="70" height="40" as="geometry"/></mxCell><mxCell id="37" value="" style="endArrow=open;entryX=0;entryY=0.5;exitX=1;exitY=0.75" parent="1" source="16" target="5" edge="1"><mxGeometry as="geometry"><mxPoint x="560" y="160" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
@@ -0,0 +1,217 @@
1
+ ---
2
+ title: Getting Started (Centralized Server) - logstash
3
+ layout: content_right
4
+ ---
5
+
6
+ # Getting Started
7
+
8
+ ## Centralized Setup with Event Parsing
9
+
10
+ This guide shows how to get you going quickly with logstash with multiple
11
+ servers. This guide is for folks who want to ship all their logstash logs to a
12
+ central location for indexing and search.
13
+
14
+ We'll have two classes of server. First, one that ships logs. Second, one that
15
+ collects and indexes logs.
16
+
17
+ It's important to note that logstash itself has no concept of "shipper" and
18
+ "collector" - the behavior of an agent depends entirely on how you configure
19
+ it.
20
+
21
+ This diagram gives you an overview of the architecture:
22
+
23
+ ![Centralized setup overview](getting-started-centralized-overview-diagram.png)
24
+
25
+ On servers shipping logs:
26
+
27
+ * Download and run logstash (See section 'logstash log shipper' below)
28
+
29
+ On the server collecting and indexing your logs:
30
+
31
+ * Download and run Elasticsearch
32
+ * Download and run Redis
33
+ * Download and run Logstash
34
+
35
+ ## ElasticSearch
36
+
37
+ Requirements: java
38
+
39
+ You'll most likely want the version of ElasticSearch specified by the
40
+ [elasticsearch output](../outputs/elasticsearch) docs. Modify this in your shell
41
+ for easy downloading of ElasticSearch:
42
+
43
+ ES_PACKAGE=elasticsearch-%ELASTICSEARCH_VERSION%.zip
44
+ ES_DIR=${ES_PACKAGE%%.zip}
45
+ SITE=https://download.elasticsearch.org/elasticsearch/elasticsearch
46
+ if [ ! -d "$ES_DIR" ] ; then
47
+ wget --no-check-certificate $SITE/$ES_PACKAGE
48
+ unzip $ES_PACKAGE
49
+ fi
50
+
51
+ ElasticSearch requires Java (uses Lucene on the backend; if you want to know
52
+ more read the elasticsearch docs).
53
+
54
+ To start the service, run `bin/elasticsearch -f`. This will run it in the foreground. We want to keep it this way for debugging for now.
55
+
56
+ ## Redis
57
+
58
+ Previous versions of this guide used AMQP via RabbitMQ. Due to the complexity of AMQP as well as performance issues related to the Bunny driver we use, we're now recommending Redis instead.
59
+
60
+ Redis has no external dependencies and has a much simpler configuration in Logstash.
61
+
62
+ Building and installing Redis is fairly straightforward. While normally this would be out of the scope of this document, as the instructions are so simple we'll include them here:
63
+
64
+ - Download Redis from http://redis.io/download (The latest stable release is likely what you want)
65
+ - Extract the source, change to the directory and run `make`
66
+ - Run Redis with `src/redis-server --loglevel verbose`
67
+
68
+ That's it.
69
+
70
+ ## logstash
71
+
72
+ Once you have elasticsearch and redis running, you're
73
+ ready to configure logstash.
74
+
75
+ Download the logstash release jar file. The package contains all
76
+ required dependencies to save you time chasing down requirements.
77
+
78
+ Follow [this link to download logstash-%VERSION%](https://download.elasticsearch.org/logstash/logstash/logstash-%VERSION%-flatjar.jar).
79
+
80
+ Since we're doing a centralized configuration, you'll have two main
81
+ logstash agent roles: a shipper and an indexer. You will ship logs from
82
+ all servers via Redis and have another agent receive those messages,
83
+ parse them, and index them in elasticsearch.
84
+
85
+ ### logstash log shipper
86
+
87
+ As with the simple example, we're going to start simple to ensure that events are flowing
88
+
89
+ input {
90
+ stdin {
91
+ type => "example"
92
+ }
93
+ }
94
+
95
+ output {
96
+ stdout { codec => rubydebug }
97
+ redis { host => "127.0.0.1" data_type => "list" key => "logstash" }
98
+ }
99
+
100
+ Put this in a file and call it 'shipper.conf' (or anything, really), and run:
101
+
102
+ java -jar logstash-%VERSION%-flatjar.jar agent -f shipper.conf
103
+
104
+ This will take anything you type into this console and display it on the console. Additionally it will save events to Redis in a `list` named after the `key` value you provided.
105
+
106
+ ### Testing the Redis output
107
+
108
+ To verify that the message made it into Redis, check your Redis window. You should see something like the following:
109
+
110
+ [83019] 02 Jul 12:51:02 - Accepted 127.0.0.1:58312
111
+ [83019] 02 Jul 12:51:06 - Client closed connection
112
+ [83019] 02 Jul 12:51:06 - DB 0: 1 keys (0 volatile) in 4 slots HT.
113
+
114
+ The redis application ships with a CLI application that you can use to query the data. From your Redis source directory, run the following:
115
+
116
+ `src/redis-cli`
117
+
118
+ Once connected, run the following commands:
119
+
120
+ redis 127.0.0.1:6379> llen logstash
121
+ (integer) 1
122
+ redis 127.0.0.1:6379> lpop logstash
123
+ "{\"message\":\"hello\",\"@timestamp\":\"2013-09-07T00:59:28.383Z\",\"@version\":\"1\",\"type\":\"stdin\",\"host\":\"pork\"}"
124
+ redis 127.0.0.1:6379> llen logstash
125
+ (integer) 0
126
+
127
+ What we've just done is check the length of the list, read and removed the oldest item in the list, and checked the length again.
128
+
129
+ This behavior is what Logstash does when it reads from a Redis input (technically logstash performs a blocking lpop). We're essentially using Redis to simulate a queue via the `list` data type.
130
+
131
+ Go ahead and type a few more entries in the agent window:
132
+
133
+ - test 1
134
+ - test 2
135
+ - test 3
136
+
137
+ As you `lpop` you should get them in the correct order of insertion.
138
+
139
+ ### logstash indexer
140
+
141
+ This agent will parse and index your logs as they come in over Redis. Here's a
142
+ sample config based on the previous section. Save this as `indexer.conf`
143
+
144
+ input {
145
+ redis {
146
+ host => "127.0.0.1"
147
+ # these settings should match the output of the agent
148
+ data_type => "list"
149
+ key => "logstash"
150
+
151
+ # We use the 'json' codec here because we expect to read
152
+ # json events from redis.
153
+ codec => json
154
+ }
155
+ }
156
+
157
+ output {
158
+ stdout { debug => true debug_format => "json"}
159
+
160
+ elasticsearch {
161
+ host => "127.0.0.1"
162
+ }
163
+ }
164
+
165
+ The above configuration will attach to Redis and issue a `BLPOP` against the `logstash` list. When an event is recieved, it will be pulled off and sent to Elasticsearch for indexing.
166
+
167
+ Start the indexer the same way as the agent but specifying the `indexer.conf` file:
168
+
169
+ `java -jar logstash-%VERSION%-flatjar.jar agent -f indexer.conf`
170
+
171
+ To verify that your Logstash indexer is connecting to Elasticsearch properly, you should see a message in your Elasticsearch window similar to the following:
172
+
173
+ `[2012-07-02 13:14:27,008][INFO ][cluster.service ] [Baron Samedi] added {[Bes][JZQBMR21SUWRNtTMsDV3_g][inet[/192.168.1.194:9301]]{client=true, data=false},}`
174
+
175
+ The names `Bes` and `Baron Samedi` may differ as ES uses random names for nodes.
176
+
177
+ ### Testing the flow
178
+ Now we want to test the flow. In your agent window, type something to generate an event.
179
+ The indexer should read this and persist it to Elasticsearch. It will also display the event to stdout.
180
+
181
+ In your Elasticsearch window, you should see something like the following:
182
+
183
+ [2012-07-02 13:21:58,982][INFO ][cluster.metadata ] [Baron Samedi] [logstash-2012.07.02] creating index, cause [auto(index api)], shards [5]/[1], mappings []
184
+ [2012-07-02 13:21:59,495][INFO ][cluster.metadata ] [Baron Samedi] [logstash-2012.07.02] update_mapping [stdin-type] (dynamic)
185
+
186
+ Since indexes are created dynamically, this is the first sign that Logstash was able to write to ES. Let's use curl to verify our data is there:
187
+ Using our curl command from the simple tutorial should let us see the data:
188
+
189
+ `curl -gs -XGET http://localhost:9200/logstash-*/_search?q=type:example`
190
+
191
+ You may need to modify the date as this is based on the date this guide was written.
192
+
193
+ Now we can move on to the final step...
194
+ ## logstash web interface
195
+
196
+ Run this on the same server as your elasticsearch server.
197
+
198
+ To run the logstash web server, just run the jar with 'web' as the first
199
+ argument.
200
+
201
+ java -jar logstash-%VERSION%-flatjar.jar web
202
+
203
+ Just point your browser at the http://127.0.0.1:9292/ and start searching
204
+ logs!
205
+
206
+ The web interface is called 'kibana' - you can learn more about kibana at <http://kibana.org>
207
+
208
+ # Distributing the load
209
+ At this point we've been simulating a distributed environment on a single machine. If only the world were so easy.
210
+ In all of the example configurations, we've been explicitly setting the connection to connect to `127.0.0.1` despite the fact in most network-related plugins, that's the default host.
211
+
212
+ Since Logstash is so modular, you can install the various components on different systems.
213
+
214
+ - If you want to give Redis a dedicated host, simply ensure that the `host` attribute in configurations points to that host.
215
+ - If you want to give Elasticsearch a dedicated host, simple ensure that the `host` attribute is correct as well (in both web and indexer).
216
+
217
+ As with the simple input example, reading from stdin is fairly useless. Check the Logstash documentation for the various inputs offered and mix and match to taste!