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.
- data/.gitignore +24 -0
- data/.tailor +8 -0
- data/.travis.yml +12 -0
- data/CHANGELOG +1185 -0
- data/CONTRIBUTING.md +61 -0
- data/CONTRIBUTORS +79 -0
- data/LICENSE +14 -0
- data/Makefile +460 -0
- data/README.md +120 -0
- data/STYLE.md +96 -0
- data/bin/logstash +37 -0
- data/bin/logstash-test +4 -0
- data/bin/logstash-web +4 -0
- data/bin/logstash.lib.sh +78 -0
- data/bot/check_pull_changelog.rb +89 -0
- data/docs/configuration.md +260 -0
- data/docs/docgen.rb +242 -0
- data/docs/extending/example-add-a-new-filter.md +121 -0
- data/docs/extending/index.md +91 -0
- data/docs/flags.md +43 -0
- data/docs/generate_index.rb +28 -0
- data/docs/index.html.erb +56 -0
- data/docs/learn.md +46 -0
- data/docs/life-of-an-event.md +109 -0
- data/docs/logging-tool-comparisons.md +60 -0
- data/docs/plugin-doc.html.erb +91 -0
- data/docs/plugin-milestones.md +41 -0
- data/docs/plugin-synopsis.html.erb +24 -0
- data/docs/release-engineering.md +46 -0
- data/docs/release-test-results.md +14 -0
- data/docs/repositories.md +35 -0
- data/docs/tutorials/10-minute-walkthrough/apache-elasticsearch.conf +35 -0
- data/docs/tutorials/10-minute-walkthrough/apache-parse.conf +33 -0
- data/docs/tutorials/10-minute-walkthrough/apache_log.1 +1 -0
- data/docs/tutorials/10-minute-walkthrough/apache_log.2.bz2 +0 -0
- data/docs/tutorials/10-minute-walkthrough/hello-search.conf +25 -0
- data/docs/tutorials/10-minute-walkthrough/hello.conf +16 -0
- data/docs/tutorials/10-minute-walkthrough/index.md +124 -0
- data/docs/tutorials/10-minute-walkthrough/step-5-output.txt +17 -0
- data/docs/tutorials/getting-started-centralized-overview-diagram.png +0 -0
- data/docs/tutorials/getting-started-centralized-overview-diagram.xml +1 -0
- data/docs/tutorials/getting-started-centralized.md +217 -0
- data/docs/tutorials/getting-started-simple.md +200 -0
- data/docs/tutorials/just-enough-rabbitmq-for-logstash.md +201 -0
- data/docs/tutorials/media/frontend-response-codes.png +0 -0
- data/docs/tutorials/metrics-from-logs.md +84 -0
- data/docs/tutorials/zeromq.md +118 -0
- data/extract_services.rb +29 -0
- data/gembag.rb +64 -0
- data/lib/logstash-event.rb +2 -0
- data/lib/logstash.rb +4 -0
- data/lib/logstash/JRUBY-6970-openssl.rb +22 -0
- data/lib/logstash/JRUBY-6970.rb +102 -0
- data/lib/logstash/agent.rb +305 -0
- data/lib/logstash/certs/cacert.pem +3895 -0
- data/lib/logstash/codecs/base.rb +49 -0
- data/lib/logstash/codecs/compress_spooler.rb +50 -0
- data/lib/logstash/codecs/dots.rb +18 -0
- data/lib/logstash/codecs/edn.rb +28 -0
- data/lib/logstash/codecs/edn_lines.rb +36 -0
- data/lib/logstash/codecs/fluent.rb +55 -0
- data/lib/logstash/codecs/graphite.rb +114 -0
- data/lib/logstash/codecs/json.rb +41 -0
- data/lib/logstash/codecs/json_lines.rb +52 -0
- data/lib/logstash/codecs/json_spooler.rb +22 -0
- data/lib/logstash/codecs/line.rb +58 -0
- data/lib/logstash/codecs/msgpack.rb +43 -0
- data/lib/logstash/codecs/multiline.rb +189 -0
- data/lib/logstash/codecs/netflow.rb +342 -0
- data/lib/logstash/codecs/netflow/util.rb +212 -0
- data/lib/logstash/codecs/noop.rb +19 -0
- data/lib/logstash/codecs/oldlogstashjson.rb +56 -0
- data/lib/logstash/codecs/plain.rb +48 -0
- data/lib/logstash/codecs/rubydebug.rb +22 -0
- data/lib/logstash/codecs/spool.rb +38 -0
- data/lib/logstash/config/Makefile +4 -0
- data/lib/logstash/config/config_ast.rb +380 -0
- data/lib/logstash/config/file.rb +39 -0
- data/lib/logstash/config/grammar.rb +3504 -0
- data/lib/logstash/config/grammar.treetop +241 -0
- data/lib/logstash/config/mixin.rb +464 -0
- data/lib/logstash/config/registry.rb +13 -0
- data/lib/logstash/config/test.conf +18 -0
- data/lib/logstash/errors.rb +10 -0
- data/lib/logstash/event.rb +262 -0
- data/lib/logstash/filters/advisor.rb +178 -0
- data/lib/logstash/filters/alter.rb +173 -0
- data/lib/logstash/filters/anonymize.rb +93 -0
- data/lib/logstash/filters/base.rb +190 -0
- data/lib/logstash/filters/checksum.rb +50 -0
- data/lib/logstash/filters/cidr.rb +76 -0
- data/lib/logstash/filters/cipher.rb +145 -0
- data/lib/logstash/filters/clone.rb +35 -0
- data/lib/logstash/filters/collate.rb +114 -0
- data/lib/logstash/filters/csv.rb +94 -0
- data/lib/logstash/filters/date.rb +244 -0
- data/lib/logstash/filters/dns.rb +201 -0
- data/lib/logstash/filters/drop.rb +32 -0
- data/lib/logstash/filters/elapsed.rb +256 -0
- data/lib/logstash/filters/elasticsearch.rb +73 -0
- data/lib/logstash/filters/environment.rb +27 -0
- data/lib/logstash/filters/extractnumbers.rb +84 -0
- data/lib/logstash/filters/gelfify.rb +52 -0
- data/lib/logstash/filters/geoip.rb +145 -0
- data/lib/logstash/filters/grep.rb +153 -0
- data/lib/logstash/filters/grok.rb +425 -0
- data/lib/logstash/filters/grokdiscovery.rb +75 -0
- data/lib/logstash/filters/i18n.rb +51 -0
- data/lib/logstash/filters/json.rb +90 -0
- data/lib/logstash/filters/json_encode.rb +52 -0
- data/lib/logstash/filters/kv.rb +232 -0
- data/lib/logstash/filters/metaevent.rb +68 -0
- data/lib/logstash/filters/metrics.rb +237 -0
- data/lib/logstash/filters/multiline.rb +241 -0
- data/lib/logstash/filters/mutate.rb +399 -0
- data/lib/logstash/filters/noop.rb +21 -0
- data/lib/logstash/filters/prune.rb +149 -0
- data/lib/logstash/filters/punct.rb +32 -0
- data/lib/logstash/filters/railsparallelrequest.rb +86 -0
- data/lib/logstash/filters/range.rb +142 -0
- data/lib/logstash/filters/ruby.rb +42 -0
- data/lib/logstash/filters/sleep.rb +111 -0
- data/lib/logstash/filters/split.rb +64 -0
- data/lib/logstash/filters/sumnumbers.rb +73 -0
- data/lib/logstash/filters/syslog_pri.rb +107 -0
- data/lib/logstash/filters/translate.rb +121 -0
- data/lib/logstash/filters/unique.rb +29 -0
- data/lib/logstash/filters/urldecode.rb +57 -0
- data/lib/logstash/filters/useragent.rb +112 -0
- data/lib/logstash/filters/uuid.rb +58 -0
- data/lib/logstash/filters/xml.rb +139 -0
- data/lib/logstash/filters/zeromq.rb +123 -0
- data/lib/logstash/filterworker.rb +122 -0
- data/lib/logstash/inputs/base.rb +125 -0
- data/lib/logstash/inputs/collectd.rb +306 -0
- data/lib/logstash/inputs/drupal_dblog.rb +323 -0
- data/lib/logstash/inputs/drupal_dblog/jdbcconnection.rb +66 -0
- data/lib/logstash/inputs/elasticsearch.rb +140 -0
- data/lib/logstash/inputs/eventlog.rb +129 -0
- data/lib/logstash/inputs/eventlog/racob_fix.rb +44 -0
- data/lib/logstash/inputs/exec.rb +69 -0
- data/lib/logstash/inputs/file.rb +146 -0
- data/lib/logstash/inputs/ganglia.rb +127 -0
- data/lib/logstash/inputs/ganglia/gmondpacket.rb +146 -0
- data/lib/logstash/inputs/ganglia/xdr.rb +327 -0
- data/lib/logstash/inputs/gelf.rb +138 -0
- data/lib/logstash/inputs/gemfire.rb +222 -0
- data/lib/logstash/inputs/generator.rb +97 -0
- data/lib/logstash/inputs/graphite.rb +41 -0
- data/lib/logstash/inputs/heroku.rb +51 -0
- data/lib/logstash/inputs/imap.rb +136 -0
- data/lib/logstash/inputs/irc.rb +84 -0
- data/lib/logstash/inputs/log4j.rb +136 -0
- data/lib/logstash/inputs/lumberjack.rb +53 -0
- data/lib/logstash/inputs/pipe.rb +57 -0
- data/lib/logstash/inputs/rabbitmq.rb +126 -0
- data/lib/logstash/inputs/rabbitmq/bunny.rb +118 -0
- data/lib/logstash/inputs/rabbitmq/hot_bunnies.rb +1 -0
- data/lib/logstash/inputs/rabbitmq/march_hare.rb +129 -0
- data/lib/logstash/inputs/redis.rb +263 -0
- data/lib/logstash/inputs/relp.rb +106 -0
- data/lib/logstash/inputs/s3.rb +279 -0
- data/lib/logstash/inputs/snmptrap.rb +87 -0
- data/lib/logstash/inputs/sqlite.rb +185 -0
- data/lib/logstash/inputs/sqs.rb +172 -0
- data/lib/logstash/inputs/stdin.rb +46 -0
- data/lib/logstash/inputs/stomp.rb +84 -0
- data/lib/logstash/inputs/syslog.rb +237 -0
- data/lib/logstash/inputs/tcp.rb +231 -0
- data/lib/logstash/inputs/threadable.rb +18 -0
- data/lib/logstash/inputs/twitter.rb +82 -0
- data/lib/logstash/inputs/udp.rb +81 -0
- data/lib/logstash/inputs/unix.rb +163 -0
- data/lib/logstash/inputs/varnishlog.rb +48 -0
- data/lib/logstash/inputs/websocket.rb +50 -0
- data/lib/logstash/inputs/wmi.rb +72 -0
- data/lib/logstash/inputs/xmpp.rb +81 -0
- data/lib/logstash/inputs/zenoss.rb +143 -0
- data/lib/logstash/inputs/zeromq.rb +165 -0
- data/lib/logstash/kibana.rb +113 -0
- data/lib/logstash/loadlibs.rb +9 -0
- data/lib/logstash/logging.rb +89 -0
- data/lib/logstash/monkeypatches-for-bugs.rb +2 -0
- data/lib/logstash/monkeypatches-for-debugging.rb +47 -0
- data/lib/logstash/monkeypatches-for-performance.rb +66 -0
- data/lib/logstash/multiqueue.rb +53 -0
- data/lib/logstash/namespace.rb +16 -0
- data/lib/logstash/outputs/base.rb +120 -0
- data/lib/logstash/outputs/boundary.rb +116 -0
- data/lib/logstash/outputs/circonus.rb +78 -0
- data/lib/logstash/outputs/cloudwatch.rb +351 -0
- data/lib/logstash/outputs/csv.rb +55 -0
- data/lib/logstash/outputs/datadog.rb +93 -0
- data/lib/logstash/outputs/datadog_metrics.rb +123 -0
- data/lib/logstash/outputs/elasticsearch.rb +332 -0
- data/lib/logstash/outputs/elasticsearch/elasticsearch-template.json +44 -0
- data/lib/logstash/outputs/elasticsearch_http.rb +256 -0
- data/lib/logstash/outputs/elasticsearch_river.rb +214 -0
- data/lib/logstash/outputs/email.rb +299 -0
- data/lib/logstash/outputs/exec.rb +40 -0
- data/lib/logstash/outputs/file.rb +180 -0
- data/lib/logstash/outputs/ganglia.rb +75 -0
- data/lib/logstash/outputs/gelf.rb +208 -0
- data/lib/logstash/outputs/gemfire.rb +103 -0
- data/lib/logstash/outputs/google_bigquery.rb +570 -0
- data/lib/logstash/outputs/google_cloud_storage.rb +431 -0
- data/lib/logstash/outputs/graphite.rb +143 -0
- data/lib/logstash/outputs/graphtastic.rb +185 -0
- data/lib/logstash/outputs/hipchat.rb +80 -0
- data/lib/logstash/outputs/http.rb +142 -0
- data/lib/logstash/outputs/irc.rb +80 -0
- data/lib/logstash/outputs/jira.rb +109 -0
- data/lib/logstash/outputs/juggernaut.rb +105 -0
- data/lib/logstash/outputs/librato.rb +146 -0
- data/lib/logstash/outputs/loggly.rb +93 -0
- data/lib/logstash/outputs/lumberjack.rb +51 -0
- data/lib/logstash/outputs/metriccatcher.rb +103 -0
- data/lib/logstash/outputs/mongodb.rb +81 -0
- data/lib/logstash/outputs/nagios.rb +119 -0
- data/lib/logstash/outputs/nagios_nsca.rb +123 -0
- data/lib/logstash/outputs/null.rb +18 -0
- data/lib/logstash/outputs/opentsdb.rb +101 -0
- data/lib/logstash/outputs/pagerduty.rb +79 -0
- data/lib/logstash/outputs/pipe.rb +132 -0
- data/lib/logstash/outputs/rabbitmq.rb +96 -0
- data/lib/logstash/outputs/rabbitmq/bunny.rb +135 -0
- data/lib/logstash/outputs/rabbitmq/hot_bunnies.rb +1 -0
- data/lib/logstash/outputs/rabbitmq/march_hare.rb +143 -0
- data/lib/logstash/outputs/redis.rb +245 -0
- data/lib/logstash/outputs/riak.rb +152 -0
- data/lib/logstash/outputs/riemann.rb +109 -0
- data/lib/logstash/outputs/s3.rb +356 -0
- data/lib/logstash/outputs/sns.rb +124 -0
- data/lib/logstash/outputs/solr_http.rb +78 -0
- data/lib/logstash/outputs/sqs.rb +141 -0
- data/lib/logstash/outputs/statsd.rb +116 -0
- data/lib/logstash/outputs/stdout.rb +53 -0
- data/lib/logstash/outputs/stomp.rb +67 -0
- data/lib/logstash/outputs/syslog.rb +145 -0
- data/lib/logstash/outputs/tcp.rb +145 -0
- data/lib/logstash/outputs/udp.rb +38 -0
- data/lib/logstash/outputs/websocket.rb +46 -0
- data/lib/logstash/outputs/websocket/app.rb +29 -0
- data/lib/logstash/outputs/websocket/pubsub.rb +45 -0
- data/lib/logstash/outputs/xmpp.rb +78 -0
- data/lib/logstash/outputs/zabbix.rb +108 -0
- data/lib/logstash/outputs/zeromq.rb +125 -0
- data/lib/logstash/pipeline.rb +286 -0
- data/lib/logstash/plugin.rb +150 -0
- data/lib/logstash/plugin_mixins/aws_config.rb +93 -0
- data/lib/logstash/program.rb +15 -0
- data/lib/logstash/runner.rb +238 -0
- data/lib/logstash/sized_queue.rb +8 -0
- data/lib/logstash/test.rb +183 -0
- data/lib/logstash/threadwatchdog.rb +37 -0
- data/lib/logstash/time_addon.rb +33 -0
- data/lib/logstash/util.rb +106 -0
- data/lib/logstash/util/buftok.rb +139 -0
- data/lib/logstash/util/charset.rb +39 -0
- data/lib/logstash/util/fieldreference.rb +50 -0
- data/lib/logstash/util/password.rb +25 -0
- data/lib/logstash/util/prctl.rb +11 -0
- data/lib/logstash/util/relp.rb +326 -0
- data/lib/logstash/util/require-helper.rb +18 -0
- data/lib/logstash/util/socket_peer.rb +7 -0
- data/lib/logstash/util/zenoss.rb +566 -0
- data/lib/logstash/util/zeromq.rb +47 -0
- data/lib/logstash/version.rb +6 -0
- data/locales/en.yml +170 -0
- data/logstash-event.gemspec +29 -0
- data/logstash.gemspec +128 -0
- data/patterns/firewalls +60 -0
- data/patterns/grok-patterns +91 -0
- data/patterns/haproxy +37 -0
- data/patterns/java +3 -0
- data/patterns/linux-syslog +14 -0
- data/patterns/mcollective +1 -0
- data/patterns/mcollective-patterns +4 -0
- data/patterns/nagios +108 -0
- data/patterns/postgresql +3 -0
- data/patterns/redis +3 -0
- data/patterns/ruby +2 -0
- data/pkg/build.sh +135 -0
- data/pkg/centos/after-install.sh +1 -0
- data/pkg/centos/before-install.sh +10 -0
- data/pkg/centos/before-remove.sh +11 -0
- data/pkg/centos/sysconfig +15 -0
- data/pkg/debian/after-install.sh +5 -0
- data/pkg/debian/before-install.sh +13 -0
- data/pkg/debian/before-remove.sh +13 -0
- data/pkg/debian/build.sh +34 -0
- data/pkg/debian/debian/README +6 -0
- data/pkg/debian/debian/changelog +17 -0
- data/pkg/debian/debian/compat +1 -0
- data/pkg/debian/debian/control +16 -0
- data/pkg/debian/debian/copyright +27 -0
- data/pkg/debian/debian/dirs +19 -0
- data/pkg/debian/debian/docs +0 -0
- data/pkg/debian/debian/logstash.default +39 -0
- data/pkg/debian/debian/logstash.init +201 -0
- data/pkg/debian/debian/logstash.install +1 -0
- data/pkg/debian/debian/logstash.logrotate +9 -0
- data/pkg/debian/debian/logstash.postinst +68 -0
- data/pkg/debian/debian/logstash.postrm +23 -0
- data/pkg/debian/debian/manpage.1.ex +59 -0
- data/pkg/debian/debian/preinst.ex +37 -0
- data/pkg/debian/debian/prerm.ex +40 -0
- data/pkg/debian/debian/release.conf +5 -0
- data/pkg/debian/debian/rules +80 -0
- data/pkg/debian/debian/watch.ex +22 -0
- data/pkg/logrotate.conf +8 -0
- data/pkg/logstash-web.default +41 -0
- data/pkg/logstash-web.sysv.debian +201 -0
- data/pkg/logstash-web.upstart.ubuntu +18 -0
- data/pkg/logstash.default +45 -0
- data/pkg/logstash.sysv.debian +202 -0
- data/pkg/logstash.sysv.redhat +158 -0
- data/pkg/logstash.upstart.ubuntu +20 -0
- data/pkg/rpm/SOURCES/logstash.conf +26 -0
- data/pkg/rpm/SOURCES/logstash.init +80 -0
- data/pkg/rpm/SOURCES/logstash.logrotate +8 -0
- data/pkg/rpm/SOURCES/logstash.sysconfig +3 -0
- data/pkg/rpm/SOURCES/logstash.wrapper +105 -0
- data/pkg/rpm/SPECS/logstash.spec +180 -0
- data/pkg/rpm/readme.md +4 -0
- data/pkg/ubuntu/after-install.sh +7 -0
- data/pkg/ubuntu/before-install.sh +12 -0
- data/pkg/ubuntu/before-remove.sh +13 -0
- data/pull_release_note.rb +25 -0
- data/require-analyze.rb +22 -0
- data/spec/README.md +14 -0
- data/spec/codecs/edn.rb +40 -0
- data/spec/codecs/edn_lines.rb +53 -0
- data/spec/codecs/graphite.rb +96 -0
- data/spec/codecs/json.rb +57 -0
- data/spec/codecs/json_lines.rb +51 -0
- data/spec/codecs/json_spooler.rb +43 -0
- data/spec/codecs/msgpack.rb +39 -0
- data/spec/codecs/multiline.rb +60 -0
- data/spec/codecs/oldlogstashjson.rb +55 -0
- data/spec/codecs/plain.rb +35 -0
- data/spec/codecs/spool.rb +35 -0
- data/spec/conditionals/test.rb +323 -0
- data/spec/config.rb +31 -0
- data/spec/event.rb +165 -0
- data/spec/examples/fail2ban.rb +28 -0
- data/spec/examples/graphite-input.rb +41 -0
- data/spec/examples/mysql-slow-query.rb +70 -0
- data/spec/examples/parse-apache-logs.rb +66 -0
- data/spec/examples/parse-haproxy-logs.rb +115 -0
- data/spec/examples/syslog.rb +48 -0
- data/spec/filters/alter.rb +96 -0
- data/spec/filters/anonymize.rb +189 -0
- data/spec/filters/checksum.rb +41 -0
- data/spec/filters/clone.rb +67 -0
- data/spec/filters/collate.rb +122 -0
- data/spec/filters/csv.rb +174 -0
- data/spec/filters/date.rb +285 -0
- data/spec/filters/date_performance.rb +31 -0
- data/spec/filters/dns.rb +159 -0
- data/spec/filters/drop.rb +19 -0
- data/spec/filters/elapsed.rb +294 -0
- data/spec/filters/environment.rb +43 -0
- data/spec/filters/geoip.rb +62 -0
- data/spec/filters/grep.rb +342 -0
- data/spec/filters/grok.rb +473 -0
- data/spec/filters/grok/timeout2.rb +56 -0
- data/spec/filters/grok/timeouts.rb +39 -0
- data/spec/filters/i18n.rb +25 -0
- data/spec/filters/json.rb +72 -0
- data/spec/filters/json_encode.rb +37 -0
- data/spec/filters/kv.rb +403 -0
- data/spec/filters/metrics.rb +212 -0
- data/spec/filters/multiline.rb +119 -0
- data/spec/filters/mutate.rb +180 -0
- data/spec/filters/noop.rb +221 -0
- data/spec/filters/prune.rb +441 -0
- data/spec/filters/punct.rb +18 -0
- data/spec/filters/railsparallelrequest.rb +112 -0
- data/spec/filters/range.rb +169 -0
- data/spec/filters/split.rb +58 -0
- data/spec/filters/translate.rb +70 -0
- data/spec/filters/unique.rb +25 -0
- data/spec/filters/useragent.rb +42 -0
- data/spec/filters/xml.rb +157 -0
- data/spec/inputs/file.rb +107 -0
- data/spec/inputs/gelf.rb +52 -0
- data/spec/inputs/generator.rb +30 -0
- data/spec/inputs/imap.rb +60 -0
- data/spec/inputs/redis.rb +63 -0
- data/spec/inputs/relp.rb +70 -0
- data/spec/inputs/tcp.rb +101 -0
- data/spec/jar.rb +21 -0
- data/spec/outputs/csv.rb +266 -0
- data/spec/outputs/elasticsearch.rb +161 -0
- data/spec/outputs/elasticsearch_http.rb +240 -0
- data/spec/outputs/email.rb +173 -0
- data/spec/outputs/file.rb +82 -0
- data/spec/outputs/graphite.rb +236 -0
- data/spec/outputs/redis.rb +127 -0
- data/spec/speed.rb +20 -0
- data/spec/sqlite-test.rb +81 -0
- data/spec/support/LOGSTASH-733.rb +21 -0
- data/spec/support/LOGSTASH-820.rb +25 -0
- data/spec/support/akamai-grok.rb +26 -0
- data/spec/support/date-http.rb +17 -0
- data/spec/support/postwait1.rb +26 -0
- data/spec/support/pull375.rb +21 -0
- data/spec/test_utils.rb +125 -0
- data/spec/util/fieldeval_spec.rb +44 -0
- data/test/jenkins/config.xml.erb +74 -0
- data/test/jenkins/create-jobs.rb +23 -0
- data/test/jenkins/generatorjob.config.xml +66 -0
- data/tools/Gemfile +14 -0
- data/tools/Gemfile.jruby-1.9.lock +322 -0
- data/tools/Gemfile.rbx-2.1.lock +516 -0
- data/tools/Gemfile.ruby-1.9.1.lock +310 -0
- data/tools/Gemfile.ruby-2.0.0.lock +310 -0
- metadata +629 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "logstash/outputs/rabbitmq/march_hare"
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
class LogStash::Outputs::RabbitMQ
|
|
3
|
+
module MarchHareImpl
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# API
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
def register
|
|
11
|
+
require "march_hare"
|
|
12
|
+
require "java"
|
|
13
|
+
|
|
14
|
+
@logger.info("Registering output", :plugin => self)
|
|
15
|
+
|
|
16
|
+
@connected = java.util.concurrent.atomic.AtomicBoolean.new
|
|
17
|
+
|
|
18
|
+
connect
|
|
19
|
+
declare_exchange
|
|
20
|
+
|
|
21
|
+
@connected.set(true)
|
|
22
|
+
|
|
23
|
+
@codec.on_event(&method(:publish_serialized))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def receive(event)
|
|
28
|
+
return unless output?(event)
|
|
29
|
+
|
|
30
|
+
begin
|
|
31
|
+
@codec.encode(event)
|
|
32
|
+
rescue JSON::GeneratorError => e
|
|
33
|
+
@logger.warn("Trouble converting event to JSON", :exception => e,
|
|
34
|
+
:event => event)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def publish_serialized(message)
|
|
39
|
+
begin
|
|
40
|
+
if @connected.get
|
|
41
|
+
@x.publish(message, :routing_key => @key, :properties => {
|
|
42
|
+
:persistent => @persistent
|
|
43
|
+
})
|
|
44
|
+
else
|
|
45
|
+
@logger.warn("Tried to send a message, but not connected to RabbitMQ.")
|
|
46
|
+
end
|
|
47
|
+
rescue MarchHare::Exception, com.rabbitmq.client.AlreadyClosedException => e
|
|
48
|
+
@connected.set(false)
|
|
49
|
+
n = 10
|
|
50
|
+
|
|
51
|
+
@logger.error("RabbitMQ connection error: #{e.message}. Will attempt to reconnect in #{n} seconds...",
|
|
52
|
+
:exception => e,
|
|
53
|
+
:backtrace => e.backtrace)
|
|
54
|
+
return if terminating?
|
|
55
|
+
|
|
56
|
+
sleep n
|
|
57
|
+
|
|
58
|
+
connect
|
|
59
|
+
declare_exchange
|
|
60
|
+
retry
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def to_s
|
|
65
|
+
return "amqp://#{@user}@#{@host}:#{@port}#{@vhost}/#{@exchange_type}/#{@exchange}\##{@key}"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def teardown
|
|
69
|
+
@connected.set(false)
|
|
70
|
+
@conn.close if @conn && @conn.open?
|
|
71
|
+
@conn = nil
|
|
72
|
+
|
|
73
|
+
finished
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Implementation
|
|
80
|
+
#
|
|
81
|
+
|
|
82
|
+
def connect
|
|
83
|
+
return if terminating?
|
|
84
|
+
|
|
85
|
+
@vhost ||= "127.0.0.1"
|
|
86
|
+
# 5672. Will be switched to 5671 by Bunny if TLS is enabled.
|
|
87
|
+
@port ||= 5672
|
|
88
|
+
|
|
89
|
+
@settings = {
|
|
90
|
+
:vhost => @vhost,
|
|
91
|
+
:host => @host,
|
|
92
|
+
:port => @port,
|
|
93
|
+
:user => @user,
|
|
94
|
+
:automatic_recovery => false
|
|
95
|
+
}
|
|
96
|
+
@settings[:pass] = if @password
|
|
97
|
+
@password.value
|
|
98
|
+
else
|
|
99
|
+
"guest"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
@settings[:tls] = @ssl if @ssl
|
|
103
|
+
proto = if @ssl
|
|
104
|
+
"amqp"
|
|
105
|
+
else
|
|
106
|
+
"amqps"
|
|
107
|
+
end
|
|
108
|
+
@connection_url = "#{proto}://#{@user}@#{@host}:#{@port}#{vhost}/#{@queue}"
|
|
109
|
+
|
|
110
|
+
begin
|
|
111
|
+
@conn = MarchHare.connect(@settings)
|
|
112
|
+
|
|
113
|
+
@logger.debug("Connecting to RabbitMQ. Settings: #{@settings.inspect}, queue: #{@queue.inspect}")
|
|
114
|
+
|
|
115
|
+
@ch = @conn.create_channel
|
|
116
|
+
@logger.info("Connected to RabbitMQ at #{@settings[:host]}")
|
|
117
|
+
rescue MarchHare::Exception => e
|
|
118
|
+
@connected.set(false)
|
|
119
|
+
n = 10
|
|
120
|
+
|
|
121
|
+
@logger.error("RabbitMQ connection error: #{e.message}. Will attempt to reconnect in #{n} seconds...",
|
|
122
|
+
:exception => e,
|
|
123
|
+
:backtrace => e.backtrace)
|
|
124
|
+
return if terminating?
|
|
125
|
+
|
|
126
|
+
sleep n
|
|
127
|
+
retry
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def declare_exchange
|
|
132
|
+
@logger.debug("Declaring an exchange", :name => @exchange, :type => @exchange_type,
|
|
133
|
+
:durable => @durable)
|
|
134
|
+
@x = @ch.exchange(@exchange, :type => @exchange_type.to_sym, :durable => @durable)
|
|
135
|
+
|
|
136
|
+
# sets @connected to true during recovery. MK.
|
|
137
|
+
@connected.set(true)
|
|
138
|
+
|
|
139
|
+
@x
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end # MarchHareImpl
|
|
143
|
+
end
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "stud/buffer"
|
|
5
|
+
|
|
6
|
+
# send events to a redis database using RPUSH
|
|
7
|
+
#
|
|
8
|
+
# For more information about redis, see <http://redis.io/>
|
|
9
|
+
class LogStash::Outputs::Redis < LogStash::Outputs::Base
|
|
10
|
+
|
|
11
|
+
include Stud::Buffer
|
|
12
|
+
|
|
13
|
+
config_name "redis"
|
|
14
|
+
milestone 2
|
|
15
|
+
|
|
16
|
+
# Name is used for logging in case there are multiple instances.
|
|
17
|
+
# TODO: delete
|
|
18
|
+
config :name, :validate => :string, :default => 'default',
|
|
19
|
+
:deprecated => true
|
|
20
|
+
|
|
21
|
+
# The hostname(s) of your redis server(s). Ports may be specified on any
|
|
22
|
+
# hostname, which will override the global port config.
|
|
23
|
+
#
|
|
24
|
+
# For example:
|
|
25
|
+
#
|
|
26
|
+
# "127.0.0.1"
|
|
27
|
+
# ["127.0.0.1", "127.0.0.2"]
|
|
28
|
+
# ["127.0.0.1:6380", "127.0.0.1"]
|
|
29
|
+
config :host, :validate => :array, :default => ["127.0.0.1"]
|
|
30
|
+
|
|
31
|
+
# Shuffle the host list during logstash startup.
|
|
32
|
+
config :shuffle_hosts, :validate => :boolean, :default => true
|
|
33
|
+
|
|
34
|
+
# The default port to connect on. Can be overridden on any hostname.
|
|
35
|
+
config :port, :validate => :number, :default => 6379
|
|
36
|
+
|
|
37
|
+
# The redis database number.
|
|
38
|
+
config :db, :validate => :number, :default => 0
|
|
39
|
+
|
|
40
|
+
# Redis initial connection timeout in seconds.
|
|
41
|
+
config :timeout, :validate => :number, :default => 5
|
|
42
|
+
|
|
43
|
+
# Password to authenticate with. There is no authentication by default.
|
|
44
|
+
config :password, :validate => :password
|
|
45
|
+
|
|
46
|
+
# The name of the redis queue (we'll use RPUSH on this). Dynamic names are
|
|
47
|
+
# valid here, for example "logstash-%{type}"
|
|
48
|
+
# TODO: delete
|
|
49
|
+
config :queue, :validate => :string, :deprecated => true
|
|
50
|
+
|
|
51
|
+
# The name of a redis list or channel. Dynamic names are
|
|
52
|
+
# valid here, for example "logstash-%{type}".
|
|
53
|
+
# TODO set required true
|
|
54
|
+
config :key, :validate => :string, :required => false
|
|
55
|
+
|
|
56
|
+
# Either list or channel. If redis_type is list, then we will RPUSH to key.
|
|
57
|
+
# If redis_type is channel, then we will PUBLISH to key.
|
|
58
|
+
# TODO set required true
|
|
59
|
+
config :data_type, :validate => [ "list", "channel" ], :required => false
|
|
60
|
+
|
|
61
|
+
# Set to true if you want redis to batch up values and send 1 RPUSH command
|
|
62
|
+
# instead of one command per value to push on the list. Note that this only
|
|
63
|
+
# works with data_type="list" mode right now.
|
|
64
|
+
#
|
|
65
|
+
# If true, we send an RPUSH every "batch_events" events or
|
|
66
|
+
# "batch_timeout" seconds (whichever comes first).
|
|
67
|
+
# Only supported for list redis data_type.
|
|
68
|
+
config :batch, :validate => :boolean, :default => false
|
|
69
|
+
|
|
70
|
+
# If batch is set to true, the number of events we queue up for an RPUSH.
|
|
71
|
+
config :batch_events, :validate => :number, :default => 50
|
|
72
|
+
|
|
73
|
+
# If batch is set to true, the maximum amount of time between RPUSH commands
|
|
74
|
+
# when there are pending events to flush.
|
|
75
|
+
config :batch_timeout, :validate => :number, :default => 5
|
|
76
|
+
|
|
77
|
+
# Interval for reconnecting to failed redis connections
|
|
78
|
+
config :reconnect_interval, :validate => :number, :default => 1
|
|
79
|
+
|
|
80
|
+
# In case redis data_type is list and has more than @congestion_threshold items, block until someone consumes them and reduces
|
|
81
|
+
# congestion, otherwise if there are no consumers redis will run out of memory, unless it was configured with OOM protection.
|
|
82
|
+
# But even with OOM protection single redis list can block all other users of redis, as well redis cpu consumption
|
|
83
|
+
# becomes bad then it reaches the max allowed ram size.
|
|
84
|
+
# Default value of 0 means that this limit is disabled.
|
|
85
|
+
# Only supported for list redis data_type.
|
|
86
|
+
config :congestion_threshold, :validate => :number, :default => 0
|
|
87
|
+
|
|
88
|
+
# How often to check for congestion, defaults to 1 second.
|
|
89
|
+
# Zero means to check on every event.
|
|
90
|
+
config :congestion_interval, :validate => :number, :default => 1
|
|
91
|
+
|
|
92
|
+
def register
|
|
93
|
+
require 'redis'
|
|
94
|
+
|
|
95
|
+
# TODO remove after setting key and data_type to true
|
|
96
|
+
if @queue
|
|
97
|
+
if @key or @data_type
|
|
98
|
+
raise RuntimeError.new(
|
|
99
|
+
"Cannot specify queue parameter and key or data_type"
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
@key = @queue
|
|
103
|
+
@data_type = 'list'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
if not @key or not @data_type
|
|
107
|
+
raise RuntimeError.new(
|
|
108
|
+
"Must define queue, or key and data_type parameters"
|
|
109
|
+
)
|
|
110
|
+
end
|
|
111
|
+
# end TODO
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if @batch
|
|
115
|
+
if @data_type != "list"
|
|
116
|
+
raise RuntimeError.new(
|
|
117
|
+
"batch is not supported with data_type #{@data_type}"
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
buffer_initialize(
|
|
121
|
+
:max_items => @batch_events,
|
|
122
|
+
:max_interval => @batch_timeout,
|
|
123
|
+
:logger => @logger
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
@redis = nil
|
|
128
|
+
if @shuffle_hosts
|
|
129
|
+
@host.shuffle!
|
|
130
|
+
end
|
|
131
|
+
@host_idx = 0
|
|
132
|
+
|
|
133
|
+
@congestion_check_times = Hash.new { |h,k| h[k] = Time.now.to_i - @congestion_interval }
|
|
134
|
+
end # def register
|
|
135
|
+
|
|
136
|
+
def receive(event)
|
|
137
|
+
return unless output?(event)
|
|
138
|
+
|
|
139
|
+
if @batch and @data_type == 'list' # Don't use batched method for pubsub.
|
|
140
|
+
# Stud::Buffer
|
|
141
|
+
buffer_receive(event.to_json, event.sprintf(@key))
|
|
142
|
+
return
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
key = event.sprintf(@key)
|
|
146
|
+
# TODO(sissel): We really should not drop an event, but historically
|
|
147
|
+
# we have dropped events that fail to be converted to json.
|
|
148
|
+
# TODO(sissel): Find a way to continue passing events through even
|
|
149
|
+
# if they fail to convert properly.
|
|
150
|
+
begin
|
|
151
|
+
payload = event.to_json
|
|
152
|
+
rescue Encoding::UndefinedConversionError, ArgumentError
|
|
153
|
+
puts "FAILUREENCODING"
|
|
154
|
+
@logger.error("Failed to convert event to JSON. Invalid UTF-8, maybe?",
|
|
155
|
+
:event => event.inspect)
|
|
156
|
+
return
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
begin
|
|
160
|
+
@redis ||= connect
|
|
161
|
+
if @data_type == 'list'
|
|
162
|
+
congestion_check(key)
|
|
163
|
+
@redis.rpush(key, payload)
|
|
164
|
+
else
|
|
165
|
+
@redis.publish(key, payload)
|
|
166
|
+
end
|
|
167
|
+
rescue => e
|
|
168
|
+
@logger.warn("Failed to send event to redis", :event => event,
|
|
169
|
+
:identity => identity, :exception => e,
|
|
170
|
+
:backtrace => e.backtrace)
|
|
171
|
+
sleep @reconnect_interval
|
|
172
|
+
@redis = nil
|
|
173
|
+
retry
|
|
174
|
+
end
|
|
175
|
+
end # def receive
|
|
176
|
+
|
|
177
|
+
def congestion_check(key)
|
|
178
|
+
return if @congestion_threshold == 0
|
|
179
|
+
if (Time.now.to_i - @congestion_check_times[key]) >= @congestion_interval # Check congestion only if enough time has passed since last check.
|
|
180
|
+
while @redis.llen(key) > @congestion_threshold # Don't push event to redis key which has reached @congestion_threshold.
|
|
181
|
+
@logger.warn? and @logger.warn("Redis key size has hit a congestion threshold #{@congestion_threshold} suspending output for #{@congestion_interval} seconds")
|
|
182
|
+
sleep @congestion_interval
|
|
183
|
+
end
|
|
184
|
+
@congestion_check_time = Time.now.to_i
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# called from Stud::Buffer#buffer_flush when there are events to flush
|
|
189
|
+
def flush(events, key, teardown=false)
|
|
190
|
+
@redis ||= connect
|
|
191
|
+
# we should not block due to congestion on teardown
|
|
192
|
+
# to support this Stud::Buffer#buffer_flush should pass here the :final boolean value.
|
|
193
|
+
congestion_check(key) unless teardown
|
|
194
|
+
@redis.rpush(key, events)
|
|
195
|
+
end
|
|
196
|
+
# called from Stud::Buffer#buffer_flush when an error occurs
|
|
197
|
+
def on_flush_error(e)
|
|
198
|
+
@logger.warn("Failed to send backlog of events to redis",
|
|
199
|
+
:identity => identity,
|
|
200
|
+
:exception => e,
|
|
201
|
+
:backtrace => e.backtrace
|
|
202
|
+
)
|
|
203
|
+
@redis = connect
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def teardown
|
|
207
|
+
if @batch
|
|
208
|
+
buffer_flush(:final => true)
|
|
209
|
+
end
|
|
210
|
+
if @data_type == 'channel' and @redis
|
|
211
|
+
@redis.quit
|
|
212
|
+
@redis = nil
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
private
|
|
217
|
+
def connect
|
|
218
|
+
@current_host, @current_port = @host[@host_idx].split(':')
|
|
219
|
+
@host_idx = @host_idx + 1 >= @host.length ? 0 : @host_idx + 1
|
|
220
|
+
|
|
221
|
+
if not @current_port
|
|
222
|
+
@current_port = @port
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
params = {
|
|
226
|
+
:host => @current_host,
|
|
227
|
+
:port => @current_port,
|
|
228
|
+
:timeout => @timeout,
|
|
229
|
+
:db => @db
|
|
230
|
+
}
|
|
231
|
+
@logger.debug(params)
|
|
232
|
+
|
|
233
|
+
if @password
|
|
234
|
+
params[:password] = @password.value
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
Redis.new(params)
|
|
238
|
+
end # def connect
|
|
239
|
+
|
|
240
|
+
# A string used to identify a redis instance in log messages
|
|
241
|
+
def identity
|
|
242
|
+
@name || "redis://#{@password}@#{@current_host}:#{@current_port}/#{@db} #{@data_type}:#{@key}"
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Riak is a distributed k/v store from Basho.
|
|
6
|
+
# It's based on the Dynamo model.
|
|
7
|
+
|
|
8
|
+
class LogStash::Outputs::Riak < LogStash::Outputs::Base
|
|
9
|
+
config_name "riak"
|
|
10
|
+
milestone 1
|
|
11
|
+
|
|
12
|
+
# The nodes of your Riak cluster
|
|
13
|
+
# This can be a single host or
|
|
14
|
+
# a Logstash hash of node/port pairs
|
|
15
|
+
# e.g
|
|
16
|
+
# ["node1", "8098", "node2", "8098"]
|
|
17
|
+
config :nodes, :validate => :hash, :default => {"localhost" => "8098"}
|
|
18
|
+
|
|
19
|
+
# The protocol to use
|
|
20
|
+
# HTTP or ProtoBuf
|
|
21
|
+
# Applies to ALL backends listed above
|
|
22
|
+
# No mix and match
|
|
23
|
+
config :proto, :validate => ["http", "pb"], :default => "http"
|
|
24
|
+
|
|
25
|
+
# The bucket name to write events to
|
|
26
|
+
# Expansion is supported here as values are
|
|
27
|
+
# passed through event.sprintf
|
|
28
|
+
# Multiple buckets can be specified here
|
|
29
|
+
# but any bucket-specific settings defined
|
|
30
|
+
# apply to ALL the buckets.
|
|
31
|
+
config :bucket, :validate => :array, :default => ["logstash-%{+YYYY.MM.dd}"]
|
|
32
|
+
|
|
33
|
+
# The event key name
|
|
34
|
+
# variables are valid here.
|
|
35
|
+
#
|
|
36
|
+
# Choose this carefully. Best to let riak decide....
|
|
37
|
+
config :key_name, :validate => :string
|
|
38
|
+
|
|
39
|
+
# Bucket properties (NYI)
|
|
40
|
+
# Logstash hash of properties for the bucket
|
|
41
|
+
# i.e.
|
|
42
|
+
# `bucket_props => ["r", "one", "w", "one", "dw", "one"]`
|
|
43
|
+
# or
|
|
44
|
+
# `bucket_props => ["n_val", "3"]`
|
|
45
|
+
# Note that the Logstash config language cannot support
|
|
46
|
+
# hash or array values
|
|
47
|
+
# Properties will be passed as-is
|
|
48
|
+
config :bucket_props, :validate => :hash
|
|
49
|
+
|
|
50
|
+
# Indices
|
|
51
|
+
# Array of fields to add 2i on
|
|
52
|
+
# e.g.
|
|
53
|
+
# `indices => ["source_host", "type"]
|
|
54
|
+
# Off by default as not everyone runs eleveldb
|
|
55
|
+
config :indices, :validate => :array
|
|
56
|
+
|
|
57
|
+
# Search
|
|
58
|
+
# Enable search on the bucket defined above
|
|
59
|
+
config :enable_search, :validate => :boolean, :default => false
|
|
60
|
+
|
|
61
|
+
# SSL
|
|
62
|
+
# Enable SSL
|
|
63
|
+
config :enable_ssl, :validate => :boolean, :default => false
|
|
64
|
+
|
|
65
|
+
# SSL Options
|
|
66
|
+
# Options for SSL connections
|
|
67
|
+
# Only applied if SSL is enabled
|
|
68
|
+
# Logstash hash that maps to the riak-client options
|
|
69
|
+
# here: https://github.com/basho/riak-ruby-client/wiki/Connecting-to-Riak
|
|
70
|
+
# You'll likely want something like this:
|
|
71
|
+
# `ssl_opts => ["pem", "/etc/riak.pem", "ca_path", "/usr/share/certificates"]
|
|
72
|
+
# Per the riak client docs, the above sample options
|
|
73
|
+
# will turn on SSL `VERIFY_PEER`
|
|
74
|
+
config :ssl_opts, :validate => :hash
|
|
75
|
+
|
|
76
|
+
# Metadata (NYI)
|
|
77
|
+
# Allow the user to set custom metadata on the object
|
|
78
|
+
# Should consider converting logstash data to metadata as well
|
|
79
|
+
#
|
|
80
|
+
|
|
81
|
+
public
|
|
82
|
+
def register
|
|
83
|
+
require 'riak'
|
|
84
|
+
riak_opts = {}
|
|
85
|
+
cluster_nodes = Array.new
|
|
86
|
+
@logger.debug("Setting protocol", :protocol => @proto)
|
|
87
|
+
proto_type = "#{@proto}_port".to_sym
|
|
88
|
+
@nodes.each do |node,port|
|
|
89
|
+
@logger.debug("Adding node", :node => node, :port => port)
|
|
90
|
+
cluster_nodes << {:host => node, proto_type => port}
|
|
91
|
+
end
|
|
92
|
+
@logger.debug("Cluster nodes", :nodes => cluster_nodes)
|
|
93
|
+
if @enable_ssl
|
|
94
|
+
@logger.debug("SSL requested")
|
|
95
|
+
if @ssl_opts
|
|
96
|
+
@logger.debug("SSL options provided", @ssl_opts)
|
|
97
|
+
riak_opts.merge!(@ssl_opts.inject({}) {|h,(k,v)| h[k.to_sym] = v; h})
|
|
98
|
+
else
|
|
99
|
+
riak_opts.merge!({:ssl => true})
|
|
100
|
+
end
|
|
101
|
+
@logger.debug("Riak options:", :riak_opts => riak_opts)
|
|
102
|
+
end
|
|
103
|
+
riak_opts.merge!({:nodes => cluster_nodes})
|
|
104
|
+
@logger.debug("Riak options:", :riak_opts => riak_opts)
|
|
105
|
+
@client = Riak::Client.new(riak_opts)
|
|
106
|
+
end # def register
|
|
107
|
+
|
|
108
|
+
public
|
|
109
|
+
def receive(event)
|
|
110
|
+
return unless output?(event)
|
|
111
|
+
|
|
112
|
+
@bucket.each do |b|
|
|
113
|
+
# setup our bucket(s)
|
|
114
|
+
bukkit = @client.bucket(event.sprintf(b))
|
|
115
|
+
# Disable bucket props for now
|
|
116
|
+
# Need to detect params passed that should be converted to int
|
|
117
|
+
# otherwise setting props fails =(
|
|
118
|
+
# Logstash syntax only supports strings and bools
|
|
119
|
+
# likely fix is to either hack in is_numeric?
|
|
120
|
+
# or whitelist certain params and call to_i
|
|
121
|
+
##@logger.debug("Setting bucket props", :props => @bucket_props)
|
|
122
|
+
##bukkit.props = @bucket_props if @bucket_props
|
|
123
|
+
##@logger.debug("Bucket", :bukkit => bukkit.inspect)
|
|
124
|
+
|
|
125
|
+
if @enable_search
|
|
126
|
+
@logger.debug("Enable search requested", :bucket => bukkit.inspect)
|
|
127
|
+
# Check if search is enabled
|
|
128
|
+
@logger.debug("Checking bucket status", :search_enabled => bukkit.is_indexed?)
|
|
129
|
+
bukkit.enable_index! unless bukkit.is_indexed?
|
|
130
|
+
@logger.debug("Rechecking bucket status", :search_enabled => bukkit.is_indexed?)
|
|
131
|
+
end
|
|
132
|
+
@key_name.nil? ? evt_key=nil : evt_key=event.sprintf(@key_name)
|
|
133
|
+
evt = Riak::RObject.new(bukkit, evt_key)
|
|
134
|
+
@logger.debug("RObject", :robject => evt.to_s)
|
|
135
|
+
begin
|
|
136
|
+
evt.content_type = "application/json"
|
|
137
|
+
evt.data = event
|
|
138
|
+
if @indices
|
|
139
|
+
@indices.each do |k|
|
|
140
|
+
idx_name = "#{k.gsub('@','')}_bin"
|
|
141
|
+
@logger.debug("Riak index name", :idx => idx_name)
|
|
142
|
+
@logger.info("Indexes", :indexes => evt.indexes.to_s)
|
|
143
|
+
evt.indexes[idx_name] << event.sprintf("%{#{k}}")
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
evt.store
|
|
147
|
+
rescue Exception => e
|
|
148
|
+
@logger.warn("Exception storing", :message => e.message)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end # def receive
|
|
152
|
+
end # class LogStash::Outputs::Riak
|