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,200 @@
1
+ ---
2
+ title: Getting Started (Standalone server) - logstash
3
+ layout: content_right
4
+ ---
5
+ # Getting started with logstash (standalone server example)
6
+
7
+ This guide shows how to get you going quickly with logstash on a single,
8
+ standalone server. We'll begin by showing you how to read events from standard
9
+ input (your keyboard) and emit them to standard output. After that, we'll start
10
+ collecting actual log files.
11
+
12
+ By standalone, I mean that everything happens on a single server: log collection, indexing, and the web interface.
13
+
14
+ logstash can be run on multiple servers (collect from many servers to a single
15
+ indexer) if you want, but this example shows simply a standalone configuration.
16
+
17
+ Steps detailed in this guide:
18
+
19
+ * Download and run logstash
20
+
21
+ ## Problems?
22
+
23
+ If you have problems, feel free to email the users list
24
+ (logstash-users@googlegroups.com) or join IRC (#logstash on irc.freenode.org)
25
+
26
+ ## logstash
27
+
28
+ You should download the logstash jar file - if you haven't yet,
29
+ [download it
30
+ now](https://download.elasticsearch.org/logstash/logstash/logstash-%VERSION%-flatjar.jar).
31
+ This package includes most of the dependencies for logstash in it and
32
+ helps you get started quicker.
33
+
34
+ The configuration of any logstash agent consists of specifying inputs, filters,
35
+ and outputs. For this example, we will not configure any filters.
36
+
37
+ The inputs are your log files. The output will be elasticsearch. The config
38
+ format should be simple to read and write. The bottom of this document includes
39
+ links for further reading (config, etc) if you want to learn more.
40
+
41
+ Here is a simple Logstash configuration:
42
+
43
+ input { stdin { } }
44
+ output { stdout { codec => rubydebug } }
45
+
46
+ Save this to a file called `logstash-simple.conf` and run it like so:
47
+
48
+ java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-simple.conf
49
+
50
+ After a few seconds, type something in the console where you started logstash.
51
+ Maybe `hello`. You should get some output like so:
52
+
53
+ {
54
+ "message" => "hello",
55
+ "@timestamp" => "2013-09-04T00:24:21.707Z",
56
+ "@version" => "1",
57
+ "host" => "pork"
58
+ }
59
+
60
+ If everything is okay, let's move on to a more complex version:
61
+
62
+ ### Saving to Elasticsearch
63
+
64
+ The recommended storage engine for Logstash is Elasticsearch. If you're running
65
+ Logstash from the jar file or via jruby, you can use an embedded version of
66
+ Elasticsearch for storage.
67
+
68
+ Using our configuration above, let's change it to look like so:
69
+
70
+ input { stdin { type => example } }
71
+ output {
72
+ stdout { codec => rubydebug }
73
+ elasticsearch { embedded => true }
74
+ }
75
+
76
+ We're going to KEEP the existing configuration but add a second output -
77
+ embedded Elasticsearch. Restart your Logstash (CTRL-C and rerun the java
78
+ command). Depending on the horsepower of your machine, this could take some
79
+ time. Logstash needs to extract the jar contents to a working directory AND
80
+ start an instance of Elasticsearch.
81
+
82
+ Let's do our test again by simply typing `test`. You should get the same output to the console.
83
+ Now let's verify that Logstash stored the message in Elasticsearch:
84
+
85
+ curl -s http://127.0.0.1:9200/_status?pretty=true | grep logstash
86
+
87
+ _This assumes you have the `curl` command installed._
88
+
89
+ You should get back some output like so:
90
+
91
+ "logstash-2012.07.02" : {
92
+ "index" : "logstash-2012.07.02"
93
+
94
+ This means Logstash created a new index based on today's date. Likely your data is in there as well:
95
+
96
+ `curl -gs -XGET "http://localhost:9200/logstash-*/_search?pretty&q=type:example"`
97
+
98
+ This will return a rather large JSON output. We're only concerned with a subset:
99
+
100
+ "_index" : "logstash-2013.09.07",
101
+ "_type" : "logs",
102
+ "_id" : "iARTN3MtQ-Kaf_x0fZaFwQ",
103
+ "_score" : 1.4054651, "_source" : {
104
+ "message": "fizzle",
105
+ "@timestamp": "2013-09-07T00:42:23.453Z",
106
+ "@version": "1",
107
+ "type": "example",
108
+ "host": "pork"
109
+ }
110
+
111
+ Your output may look a little different.
112
+ The reason we're going about it this way is to make absolutely sure that we have all the bits working before adding more complexity.
113
+
114
+ If you are unable to get these steps working, you likely have something interfering with multicast traffic. This has been known to happen when connected to VPNs for instance.
115
+ For best results, test on a Linux VM or system with less complicated networking. If in doubt, rerun the command with the options `-vv` and paste the output to Github Gist or Pastie.
116
+ Hop on the logstash IRC channel or mailing list and ask for help with that output as reference.
117
+
118
+ Obviously this is fairly useless this way. Let's add the final step and test with the builtin logstash web ui:
119
+
120
+ ### Testing the webui
121
+
122
+ We've already proven that events can make it into Elasticsearch. However using
123
+ curl for everything is less than ideal.
124
+
125
+ Logstash ships with a built-in web interface (called Kibana). Let's restart our
126
+ logstash process with an additional option:
127
+
128
+ java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-simple.conf -- web
129
+
130
+ One important thing to note is that the `web` option is actually its own set of
131
+ commmand-line options. We're essentially starting two programs in one. This is
132
+ worth remembering as you move to an external Elasticsearch server. The options
133
+ you specify in your logstash.conf have no bearing on the web ui. It has its own
134
+ options.
135
+
136
+ Again, the reason for testing without the web interface is to ensure that the
137
+ logstash agent itself is getting events into Elasticsearch. This is different
138
+ than the Logstash web ui being able to read them. As before, we'll need to
139
+ wait a bit for everything to spin up. You can verify that everything is running
140
+ (assuming you aren't running with any `-v` options) by checking the output of
141
+ `netstat`:
142
+
143
+ netstat -napt | grep -i LISTEN
144
+
145
+ What's interesting is that you should see the following ports in use:
146
+
147
+ - 9200
148
+ - 9300
149
+ - 9301
150
+ - 9302
151
+ - 9292
152
+
153
+ The `9200` and `9300` ports are the embedded ES listening. The `9301` and `9302` ports are the agent and web interfaces talking to ES. `9292` is the port the web ui listens on.
154
+
155
+ If you open a browser to http://localhost:9292/ and click on the link in the body, you should see results. If not, switch back to your console, type some test and hit return.
156
+ Refresh the browser page and you should have results!
157
+
158
+ ### Continuing on
159
+ At this point you have a working self-contained Logstash instance. However typing things into stdin is likely not to be what you want.
160
+
161
+ Here is a sample config you can start with. It defines some basic inputs
162
+ grouped by type and two outputs.
163
+
164
+ input {
165
+ stdin {
166
+ type => "stdin-type"
167
+ }
168
+
169
+ file {
170
+ type => "syslog"
171
+
172
+ # Wildcards work, here :)
173
+ path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
174
+ }
175
+ }
176
+
177
+ output {
178
+ stdout { }
179
+ elasticsearch { embedded => true }
180
+ }
181
+
182
+ Put this in a file called "logstash-complex.conf"
183
+
184
+ Now run it all (again. Be sure to stop your previous Logstash tests!):
185
+
186
+ java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-complex.conf -- web
187
+
188
+ Point your browser at <http://yourserver:9292> and start searching!
189
+
190
+ *Note*: If things are not working, such as you get an error message while
191
+ searching, like 'SERVICE_UNAVAILABLE' or some other elasticsearch error, you
192
+ should check that your firewall (local, too) is not blocking multicast.
193
+
194
+ ## Further reading
195
+
196
+ Want to know more about the configuration language? Check out the
197
+ [configuration](../configuration) documentation.
198
+
199
+ You may have logs on many servers you want to centralize through logstash. To
200
+ learn how to do that, [read this](getting-started-centralized)
@@ -0,0 +1,201 @@
1
+ ---
2
+ title: Just Enough RabbitMQ - logstash
3
+ layout: content_right
4
+ ---
5
+
6
+ While configuring your RabbitMQ broker is out of scope for logstash, it's important
7
+ to understand how logstash uses RabbitMQ. To do that, we need to understand a
8
+ little about AMQP.
9
+
10
+ You should also consider reading
11
+ [this](http://www.rabbitmq.com/tutorials/amqp-concepts.html) at the RabbitMQ
12
+ website.
13
+
14
+ # Exchanges, queues and bindings; OH MY!
15
+
16
+ You can get a long way by understanding a few key terms.
17
+
18
+ ## Exchanges
19
+
20
+ Exchanges are for message **producers**. In Logstash, we map these to
21
+ **outputs**. Logstash puts messages on exchanges. There are many types of
22
+ exchanges and they are discussed below.
23
+
24
+ ## Queues
25
+
26
+ Queues are for message **consumers**. In Logstash, we map these to inputs.
27
+ Logstash reads messages from queues. Optionally, queues can consume only a
28
+ subset of messages. This is done with "routing keys".
29
+
30
+ ## Bindings
31
+
32
+ Just having a producer and a consumer is not enough. We must `bind` a queue to
33
+ an exchange. When we bind a queue to an exchange, we can optionally provide a
34
+ routing key. Routing keys are discussed below.
35
+
36
+ ## Broker
37
+
38
+ A broker is simply the AMQP server software. There are several brokers, but this
39
+ tutorial will cover the most common (and arguably popular), [RabbitMQ](http://www.rabbitmq.com).
40
+
41
+ # Routing Keys
42
+
43
+ Simply put, routing keys are somewhat like tags for messages. In practice, they
44
+ are hierarchical in nature with the each level separated by a dot:
45
+
46
+ - `messages.servers.production`
47
+ - `sports.atlanta.baseball`
48
+ - `company.myorg.mydepartment`
49
+
50
+ Routing keys are really handy with a tool like logstash where you
51
+ can programatically define the routing key for a given event using the metadata that logstash provides:
52
+
53
+ - `logs.servers.production.host1`
54
+ - `logs.servers.development.host1.syslog`
55
+ - `logs.servers.application_foo.critical`
56
+
57
+ From a consumer/queue perspective, routing keys also support two types wildcards - `#` and `*`.
58
+
59
+ - `*` (asterisk) matches any single word.
60
+ - `#` (hash) matches any number of words and behaves like a traditional wildcard.
61
+
62
+ Using the above examples, if you wanted to bind to an exchange and see messages
63
+ for just production, you would use the routing key `logs.servers.production.*`.
64
+ If you wanted to see messages for host1, regardless of environment you could
65
+ use `logs.servers.%.host1.#`.
66
+
67
+ Wildcards can be a bit confusing but a good general rule to follow is to use
68
+ `*` in places where you need wildcards for a known element. Use `#` when you
69
+ need to match any remaining placeholders. Note that wildcards in routing keys
70
+ only make sense on the consumer/queue binding, not in the publishing/exchange
71
+ side.
72
+
73
+ We'll get into some of that neat stuff below. For now, it's enough to
74
+ understand the general idea behind routing keys.
75
+
76
+ # Exchange types
77
+
78
+ There are three primary types of exchanges that you'll see.
79
+
80
+ ## Direct
81
+
82
+ A direct exchange is one that is probably most familiar to people. Message
83
+ comes in and, assuming there is a queue bound, the message is picked up. You
84
+ can have multiple queues bound to the same direct exchange. The best way to
85
+ understand this pattern is pool of workers (queues) that read from a direct
86
+ exchange to get units of work. Only one consumer will see a given message in a
87
+ direct exchange.
88
+
89
+ You can set routing keys on messages published to a direct exchange. This
90
+ allows you do have workers that do different tasks read from the same global
91
+ pool of messages yet consume only the ones they know how to handle.
92
+
93
+ The RabbitMQ concepts guide (linked below) does a good job of describing this
94
+ visually
95
+ [here](http://www.rabbitmq.com/img/tutorials/intro/exchange-direct.png)
96
+
97
+ ## Fanout
98
+
99
+ Fanouts are another type of exchange. Unlike direct exchanges, every queue
100
+ bound to a fanout exchange will see the same messages. This is best described
101
+ as a PUB/SUB pattern. This is helpful when you need broadcast messages to
102
+ multiple interested parties.
103
+
104
+ Fanout exchanges do NOT support routing keys. All bound queues see all
105
+ messages.
106
+
107
+ ## Topic
108
+
109
+ Topic exchanges are special type of fanout exchange. Fanout exchanges don't
110
+ support routing keys. Topic exchanges do support them. Just like a fanout
111
+ exchange, all bound queues see all messages with the additional filter of the
112
+ routing key.
113
+
114
+ # RabbitMQ in logstash
115
+
116
+ As stated earlier, in Logstash, Outputs publish to Exchanges. Inputs read from
117
+ Queues that are bound to Exchanges. Logstash uses the `bunny` RabbitMQ library for
118
+ interaction with a broker. Logstash endeavors to expose as much of the
119
+ configuration for both exchanges and queues. There are many different tunables
120
+ that you might be concerned with setting - including things like message
121
+ durability or persistence of declared queues/exchanges. See the relevant input
122
+ and output documentation for RabbitMQ for a full list of tunables.
123
+
124
+ # Sample configurations, tips, tricks and gotchas
125
+
126
+ There are several examples in the logstash source directory of RabbitMQ usage,
127
+ however a few general rules might help eliminate any issues.
128
+
129
+ ## Check your bindings
130
+
131
+ If logstash is publishing the messages and logstash is consuming the messages,
132
+ the `exchange` value for the input should match the `name` in the output.
133
+
134
+ sender agent
135
+
136
+ input { stdin { type = "test" } }
137
+ output {
138
+ rabbitmq {
139
+ exchange => "test_exchange"
140
+ host => "my_rabbitmq_server"
141
+ exchange_type => "fanout"
142
+ }
143
+ }
144
+
145
+ receiver agent
146
+
147
+ input {
148
+ rabbitmq {
149
+ queue => "test_queue"
150
+ host => "my_rabbitmq_server"
151
+ exchange => "test_exchange" # This matches the exchange declared above
152
+ }
153
+ }
154
+ output { stdout { debug => true }}
155
+
156
+ ## Message persistence
157
+
158
+ By default, logstash will attempt to ensure that you don't lose any messages.
159
+ This is reflected in the RabbitMQ default settings as well. However there are
160
+ cases where you might not want this. A good example is where RabbitMQ is not your
161
+ primary method of shipping.
162
+
163
+ In the following example, we use RabbitMQ as a sniffing interface. Our primary
164
+ destination is the embedded ElasticSearch instance. We have a secondary RabbitMQ
165
+ output that we use for duplicating messages. However we disable persistence and
166
+ durability on this interface so that messages don't pile up waiting for
167
+ delivery. We only use RabbitMQ when we want to watch messages in realtime.
168
+ Additionally, we're going to leverage routing keys so that we can optionally
169
+ filter incoming messages to subsets of hosts. The exercise of getting messages
170
+ to this logstash agent are left up to the user.
171
+
172
+ input {
173
+ # some input definition here
174
+ }
175
+
176
+ output {
177
+ elasticsearch { embedded => true }
178
+ rabbitmq {
179
+ exchange => "logtail"
180
+ host => "my_rabbitmq_server"
181
+ exchange_type => "topic" # We use topic here to enable pub/sub with routing keys
182
+ key => "logs.%{host}"
183
+ durable => false # If rabbitmq restarts, the exchange disappears.
184
+ auto_delete => true # If logstash disconnects, the exchange goes away
185
+ persistent => false # Messages are not persisted to disk
186
+ }
187
+ }
188
+
189
+ Now if you want to stream logs in realtime, you can use the programming
190
+ language of your choice to bind a queue to the `logtail` exchange. If you do
191
+ not specify a routing key, you will see every message that comes in to
192
+ logstash. However, you can specify a routing key like `logs.apache1` and see
193
+ only messages from host `apache1`.
194
+
195
+ Note that any logstash variable is valid in the key definition. This allows you
196
+ to create really complex routing key hierarchies for advanced filtering.
197
+
198
+ Note that RabbitMQ has specific rules about durability and persistence matching
199
+ on both the queue and exchange. You should read the RabbitMQ documentation to
200
+ make sure you don't crash your RabbitMQ server with messages awaiting someone
201
+ to pick them up.
@@ -0,0 +1,84 @@
1
+ ---
2
+ title: Metrics from Logs - logstash
3
+ layout: content_right
4
+ ---
5
+ # Pull metrics from logs
6
+
7
+ Logs are more than just text. How many customers signed up today? How many HTTP
8
+ errors happened this week? When was your last puppet run?
9
+
10
+ Apache logs give you the http response code and bytes sent - that's useful in a
11
+ graph. Metrics occur in logs so frequently there are piles of tools available to
12
+ help process them.
13
+
14
+ Logstash can help (and even replace some tools you might already be using).
15
+
16
+ ## Example: Replacing Etsy's Logster
17
+
18
+ [Etsy](https://github.com/etsy) has some excellent open source tools. One of
19
+ them, [logster](https://github.com/etsy/logster), is meant to help you pull
20
+ metrics from logs and ship them to [graphite](http://graphite.wikidot.com/) so
21
+ you can make pretty graphs of those metrics.
22
+
23
+ One sample logster parser is one that pulls http response codes out of your
24
+ apache logs: [SampleLogster.py](https://github.com/etsy/logster/blob/master/logster/parsers/SampleLogster.py)
25
+
26
+ The above code is roughly 50 lines of python and only solves one specific
27
+ problem in only apache logs: count http response codes by major number (1xx,
28
+ 2xx, 3xx, etc). To be completely fair, you could shrink the code required for
29
+ a Logster parser, but size is not strictly the point, here.
30
+
31
+ ## Keep it simple
32
+
33
+ Logstash can do more than the above, simpler, and without much coding skill:
34
+
35
+ input {
36
+ file {
37
+ path => "/var/log/apache/access.log"
38
+ type => "apache-access"
39
+ }
40
+ }
41
+
42
+ filter {
43
+ grok {
44
+ type => "apache-access"
45
+ pattern => "%{COMBINEDAPACHELOG}"
46
+ }
47
+ }
48
+
49
+ output {
50
+ statsd {
51
+ # Count one hit every event by response
52
+ increment => "apache.response.%{response}"
53
+ }
54
+ }
55
+
56
+ The above uses grok to parse fields out of apache logs and using the statsd
57
+ output to increment counters based on the response code. Of course, now that we
58
+ are parsing apache logs fully, we can trivially add additional metrics:
59
+
60
+ output {
61
+ statsd {
62
+ # Count one hit every event by response
63
+ increment => "apache.response.%{response}"
64
+
65
+ # Use the 'bytes' field from the apache log as the count value.
66
+ count => [ "apache.bytes", "%{bytes}" ]
67
+ }
68
+ }
69
+
70
+ Now adding additional metrics is just one more line in your logstash config
71
+ file. BTW, the 'statsd' output writes to another Etsy tool,
72
+ [statsd](https://github.com/etsy/statsd), which helps build counters/latency
73
+ data and ship it to graphite for graphing.
74
+
75
+ Using the logstash config above and a bunch of apache access requests, you might end up
76
+ with a graph that looks like this:
77
+
78
+ ![apache response codes graphed with graphite, fed data with logstash](media/frontend-response-codes.png)
79
+
80
+ The point made above is not "logstash is better than Logster" - the point is
81
+ that logstash is a general-purpose log management and pipelining tool and that
82
+ while you can centralize logs with logstash, you can read, modify, and write
83
+ them to and from just about anywhere.
84
+