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,113 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "rack/handler/ftw" # gem ftw
|
|
3
|
+
require "ftw" # gem ftw
|
|
4
|
+
require "sinatra/base" # gem sinatra
|
|
5
|
+
require "optparse"
|
|
6
|
+
require "mime/types"
|
|
7
|
+
|
|
8
|
+
class Rack::Handler::FTW
|
|
9
|
+
alias_method :handle_connection_, :handle_connection
|
|
10
|
+
def handle_connection(connection)
|
|
11
|
+
#require "pry"; binding.pry
|
|
12
|
+
return handle_connection_(connection)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module LogStash::Kibana
|
|
17
|
+
class App < Sinatra::Base
|
|
18
|
+
set :logging, true
|
|
19
|
+
|
|
20
|
+
use Rack::CommonLogger
|
|
21
|
+
use Rack::ShowExceptions
|
|
22
|
+
|
|
23
|
+
get "/" do
|
|
24
|
+
redirect "index.html"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Sinatra has problems serving static files from
|
|
28
|
+
# jar files, so let's hack this by hand.
|
|
29
|
+
#set :public, "#{File.dirname(__FILE__)}/public"
|
|
30
|
+
get "/config.js" do static_file end
|
|
31
|
+
get "/index.html" do static_file end
|
|
32
|
+
get "/app/*" do static_file end
|
|
33
|
+
get "/css/*" do static_file end
|
|
34
|
+
get "/font/*" do static_file end
|
|
35
|
+
get "/img/*" do static_file end
|
|
36
|
+
get "/vendor/*" do static_file end
|
|
37
|
+
|
|
38
|
+
def static_file
|
|
39
|
+
# request.path_info is the full path of the request.
|
|
40
|
+
docroot = File.expand_path(File.join(File.dirname(__FILE__), "../../vendor/kibana"))
|
|
41
|
+
path = File.join(docroot, *request.path_info.split("/"))
|
|
42
|
+
if File.exists?(path)
|
|
43
|
+
ext = path.split(".").last
|
|
44
|
+
content_type MIME::Types.type_for(ext).first.to_s
|
|
45
|
+
body File.new(path, "r").read
|
|
46
|
+
else
|
|
47
|
+
status 404
|
|
48
|
+
content_type "text/plain"
|
|
49
|
+
body "File not found: #{path}"
|
|
50
|
+
end
|
|
51
|
+
end # def static_file
|
|
52
|
+
end # class App
|
|
53
|
+
|
|
54
|
+
class Runner
|
|
55
|
+
Settings = Struct.new(:logfile, :address, :port, :backend)
|
|
56
|
+
|
|
57
|
+
public
|
|
58
|
+
def run(args)
|
|
59
|
+
settings = Settings.new
|
|
60
|
+
settings.address = "0.0.0.0"
|
|
61
|
+
settings.port = 9292
|
|
62
|
+
settings.backend = "localhost"
|
|
63
|
+
|
|
64
|
+
progname = File.basename($0)
|
|
65
|
+
|
|
66
|
+
opts = OptionParser.new do |opts|
|
|
67
|
+
opts.banner = "Usage: #{progname} [options]"
|
|
68
|
+
opts.on("-a", "--address ADDRESS", "Address on which to start webserver. Default is 0.0.0.0.") do |address|
|
|
69
|
+
settings.address = address
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
opts.on("-p", "--port PORT", "Port on which to start webserver. Default is 9292.") do |port|
|
|
73
|
+
settings.port = port.to_i
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
#opts.on("-b", "--backend host",
|
|
77
|
+
#"The backend host to use. Default is 'localhost'") do |host|
|
|
78
|
+
#settings.backend = host
|
|
79
|
+
#end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
begin
|
|
83
|
+
args = opts.parse(args)
|
|
84
|
+
rescue SystemExit
|
|
85
|
+
# if you ask for --help, optparse will exit.
|
|
86
|
+
# capture it and return normally
|
|
87
|
+
return []
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
@thread = Thread.new do
|
|
91
|
+
Cabin::Channel.get.info("Starting web server", :settings => settings)
|
|
92
|
+
ftw = Rack::Handler::FTW.new(LogStash::Kibana::App.new,
|
|
93
|
+
:Host => settings.address,
|
|
94
|
+
:Port => settings.port)
|
|
95
|
+
trap_id = Stud::trap("INT") do
|
|
96
|
+
puts "Stopping web..."
|
|
97
|
+
ftw.stop rescue nil
|
|
98
|
+
raise SystemExit
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
ftw.run
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
return args
|
|
105
|
+
end # def run
|
|
106
|
+
|
|
107
|
+
public
|
|
108
|
+
def wait
|
|
109
|
+
@thread.join if @thread
|
|
110
|
+
return 0
|
|
111
|
+
end # def wait
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "cabin"
|
|
4
|
+
require "logger"
|
|
5
|
+
|
|
6
|
+
class LogStash::Logger
|
|
7
|
+
attr_accessor :target
|
|
8
|
+
|
|
9
|
+
public
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
super()
|
|
12
|
+
|
|
13
|
+
#self[:program] = File.basename($0)
|
|
14
|
+
#subscribe(::Logger.new(*args))
|
|
15
|
+
@target = args[0]
|
|
16
|
+
@channel = Cabin::Channel.get(LogStash)
|
|
17
|
+
|
|
18
|
+
# lame hack until cabin's smart enough not to doubley-subscribe something.
|
|
19
|
+
# without this subscription count check, running the test suite
|
|
20
|
+
# causes Cabin to subscribe to STDOUT maaaaaany times.
|
|
21
|
+
subscriptions = @channel.instance_eval { @subscribers.count }
|
|
22
|
+
@channel.subscribe(@target) unless subscriptions > 0
|
|
23
|
+
|
|
24
|
+
# Set default loglevel to WARN unless $DEBUG is set (run with 'ruby -d')
|
|
25
|
+
@level = $DEBUG ? :debug : :warn
|
|
26
|
+
if ENV["LOGSTASH_DEBUG"]
|
|
27
|
+
@level = :debug
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Direct metrics elsewhere.
|
|
31
|
+
@channel.metrics.channel = Cabin::Channel.new
|
|
32
|
+
end # def initialize
|
|
33
|
+
|
|
34
|
+
# Delegation
|
|
35
|
+
def level=(value) @channel.level = value; end
|
|
36
|
+
def debug(*args); @channel.debug(*args); end
|
|
37
|
+
def debug?(*args); @channel.debug?(*args); end
|
|
38
|
+
def info(*args); @channel.info(*args); end
|
|
39
|
+
def info?(*args); @channel.info?(*args); end
|
|
40
|
+
def warn(*args); @channel.warn(*args); end
|
|
41
|
+
def warn?(*args); @channel.warn?(*args); end
|
|
42
|
+
def error(*args); @channel.error(*args); end
|
|
43
|
+
def error?(*args); @channel.error?(*args); end
|
|
44
|
+
def fatal(*args); @channel.fatal(*args); end
|
|
45
|
+
def fatal?(*args); @channel.fatal?(*args); end
|
|
46
|
+
|
|
47
|
+
def self.setup_log4j(logger)
|
|
48
|
+
require "java"
|
|
49
|
+
|
|
50
|
+
properties = java.util.Properties.new
|
|
51
|
+
log4j_level = "WARN"
|
|
52
|
+
case logger.level
|
|
53
|
+
when :debug
|
|
54
|
+
log4j_level = "DEBUG"
|
|
55
|
+
when :info
|
|
56
|
+
log4j_level = "INFO"
|
|
57
|
+
when :warn
|
|
58
|
+
log4j_level = "WARN"
|
|
59
|
+
end # case level
|
|
60
|
+
properties.setProperty("log4j.rootLogger", "#{log4j_level},logstash")
|
|
61
|
+
|
|
62
|
+
# TODO(sissel): This is a shitty hack to work around the fact that
|
|
63
|
+
# LogStash::Logger isn't used anymore. We should fix that.
|
|
64
|
+
target = logger.instance_eval { @subscribers }.values.first.instance_eval { @io }
|
|
65
|
+
case target
|
|
66
|
+
when STDOUT
|
|
67
|
+
properties.setProperty("log4j.appender.logstash",
|
|
68
|
+
"org.apache.log4j.ConsoleAppender")
|
|
69
|
+
properties.setProperty("log4j.appender.logstash.Target", "System.out")
|
|
70
|
+
when STDERR
|
|
71
|
+
properties.setProperty("log4j.appender.logstash",
|
|
72
|
+
"org.apache.log4j.ConsoleAppender")
|
|
73
|
+
properties.setProperty("log4j.appender.logstash.Target", "System.err")
|
|
74
|
+
else
|
|
75
|
+
properties.setProperty("log4j.appender.logstash",
|
|
76
|
+
"org.apache.log4j.FileAppender")
|
|
77
|
+
properties.setProperty("log4j.appender.logstash.File", target.path)
|
|
78
|
+
end # case target
|
|
79
|
+
|
|
80
|
+
properties.setProperty("log4j.appender.logstash.layout",
|
|
81
|
+
"org.apache.log4j.PatternLayout")
|
|
82
|
+
properties.setProperty("log4j.appender.logstash.layout.conversionPattern",
|
|
83
|
+
"log4j, [%d{yyyy-MM-dd}T%d{HH:mm:ss.SSS}] %5p: %c: %m%n")
|
|
84
|
+
|
|
85
|
+
org.apache.log4j.LogManager.resetConfiguration
|
|
86
|
+
org.apache.log4j.PropertyConfigurator.configure(properties)
|
|
87
|
+
logger.debug("log4j java properties setup", :log4j_level => log4j_level)
|
|
88
|
+
end
|
|
89
|
+
end # class LogStash::Logger
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
if $DEBUGLIST.include?("require")
|
|
3
|
+
ROOT = File.dirname(__FILE__)
|
|
4
|
+
module Kernel
|
|
5
|
+
alias_method :require_debug, :require
|
|
6
|
+
|
|
7
|
+
def require(path)
|
|
8
|
+
start = Time.now
|
|
9
|
+
result = require_debug(path)
|
|
10
|
+
duration = Time.now - start
|
|
11
|
+
|
|
12
|
+
origin = caller[1]
|
|
13
|
+
if origin =~ /rubygems\/custom_require/
|
|
14
|
+
origin = caller[3]
|
|
15
|
+
if origin.nil?
|
|
16
|
+
STDERR.puts "Unknown origin"
|
|
17
|
+
STDERR.puts caller.join("\n")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
origin = origin.gsub(/:[0-9]+:in .*/, "") if origin
|
|
21
|
+
|
|
22
|
+
# Only print require() calls that did actual work.
|
|
23
|
+
# require() returns true on load, false if already loaded.
|
|
24
|
+
if result
|
|
25
|
+
source = caller[0]
|
|
26
|
+
#p source.include?("/lib/polyglot.rb:63:in `require'") => source
|
|
27
|
+
if source.include?("/lib/polyglot.rb:63:in `require'")
|
|
28
|
+
source = caller[1]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
#target = $LOADED_FEATURES.grep(/#{path}/).first
|
|
32
|
+
#puts path
|
|
33
|
+
#puts caller.map { |c| " #{c}" }.join("\n")
|
|
34
|
+
#fontsize = [10, duration * 48].max
|
|
35
|
+
puts "#{duration},#{path},#{source}"
|
|
36
|
+
end
|
|
37
|
+
#puts caller.map { |c| " => #{c}" }.join("\n")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
alias_method :load_debug, :load
|
|
41
|
+
|
|
42
|
+
def load(path)
|
|
43
|
+
puts "load(\"#{path}\")"
|
|
44
|
+
return load_debug(path)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
if RUBY_PLATFORM == "java"
|
|
3
|
+
class << File
|
|
4
|
+
# mpp == monkey patch for performance
|
|
5
|
+
alias_method :mpp_file?, :file?
|
|
6
|
+
alias_method :mpp_exist?, :exist?
|
|
7
|
+
alias_method :mpp_exists?, :exists?
|
|
8
|
+
|
|
9
|
+
JAR_RE = /^(?:jar:)?file:(\/.*\.jar)!(\/.*$)/
|
|
10
|
+
def file?(path)
|
|
11
|
+
#return mpp_file?(path)
|
|
12
|
+
# If path is in a jar (file://blah/foo.jar!/some/path)
|
|
13
|
+
# - create a cache for this jar of all files
|
|
14
|
+
# - return cached results only
|
|
15
|
+
if RUBY_PLATFORM == "java"
|
|
16
|
+
m = JAR_RE.match(path)
|
|
17
|
+
return mpp_file?(path) if !m # not a jar file
|
|
18
|
+
c = __zipcache(m[1], m[2]) # m[1] == the jar path
|
|
19
|
+
# ZipEntry has only 'isDirectory()' so I assume any
|
|
20
|
+
# non-directories are files.
|
|
21
|
+
rc = (!c.nil? && !c.isDirectory)
|
|
22
|
+
#p path => rc
|
|
23
|
+
return rc
|
|
24
|
+
end
|
|
25
|
+
return mpp_file?(path)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def exist?(path)
|
|
29
|
+
#return mpp_exist?(path)
|
|
30
|
+
# If path is in a jar (file://blah/foo.jar!/some/path)
|
|
31
|
+
# - create a cache for this jar of all files
|
|
32
|
+
# - return cached results only
|
|
33
|
+
if RUBY_PLATFORM == "java"
|
|
34
|
+
m = JAR_RE.match(path)
|
|
35
|
+
return mpp_exists?(path) if !m # not a jar file
|
|
36
|
+
c = __zipcache(m[1], m[2]) # m[1] == the jar path
|
|
37
|
+
return !c.nil?
|
|
38
|
+
end
|
|
39
|
+
return mpp_exists?(path)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def exists?(path)
|
|
43
|
+
return exist?(path)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def __zipcache(jarpath, path)
|
|
47
|
+
@jarcache ||= Hash.new { |h,k| h[k] = {} }
|
|
48
|
+
|
|
49
|
+
if @jarcache[jarpath].empty?
|
|
50
|
+
#puts "Caching file entries for #{jarpath}"
|
|
51
|
+
s = Time.now
|
|
52
|
+
zip = java.util.zip.ZipFile.new(jarpath)
|
|
53
|
+
zip.entries.each do |entry|
|
|
54
|
+
#puts "Caching file entries for #{jarpath}: /#{entry.name}"
|
|
55
|
+
# Prefix entry name with "/" because that's what the jar path looks
|
|
56
|
+
# like in jruby: file://some.jar!/some/path
|
|
57
|
+
@jarcache[jarpath]["/" + entry.name] = entry
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
entry = @jarcache[jarpath][path]
|
|
62
|
+
#puts "Serving cached file info #{path}: #{entry}"
|
|
63
|
+
return entry
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "cabin"
|
|
4
|
+
|
|
5
|
+
class LogStash::MultiQueue
|
|
6
|
+
attr_accessor :logger
|
|
7
|
+
|
|
8
|
+
public
|
|
9
|
+
def initialize(*queues)
|
|
10
|
+
@logger = Cabin::Channel.get(LogStash)
|
|
11
|
+
@mutex = Mutex.new
|
|
12
|
+
@queues = queues
|
|
13
|
+
end # def initialize
|
|
14
|
+
|
|
15
|
+
public
|
|
16
|
+
def logger=(_logger)
|
|
17
|
+
@logger = _logger
|
|
18
|
+
|
|
19
|
+
# Set the logger for all known queues, too.
|
|
20
|
+
@queues.each do |q|
|
|
21
|
+
q.logger = _logger
|
|
22
|
+
end
|
|
23
|
+
end # def logger=
|
|
24
|
+
|
|
25
|
+
# Push an object to all queues.
|
|
26
|
+
public
|
|
27
|
+
def push(object)
|
|
28
|
+
@queues.each { |q| q.push(object) }
|
|
29
|
+
end # def push
|
|
30
|
+
alias :<< :push
|
|
31
|
+
|
|
32
|
+
alias_method :<<, :push
|
|
33
|
+
|
|
34
|
+
# Add a new Queue to this queue.
|
|
35
|
+
public
|
|
36
|
+
def add_queue(queue)
|
|
37
|
+
@mutex.synchronize do
|
|
38
|
+
@queues << queue
|
|
39
|
+
end
|
|
40
|
+
end # def add_queue
|
|
41
|
+
|
|
42
|
+
public
|
|
43
|
+
def remove_queue(queue)
|
|
44
|
+
@mutex.synchronize do
|
|
45
|
+
@queues.delete(queue)
|
|
46
|
+
end
|
|
47
|
+
end # def remove_queue
|
|
48
|
+
|
|
49
|
+
public
|
|
50
|
+
def size
|
|
51
|
+
return @queues.collect { |q| q.size }
|
|
52
|
+
end # def size
|
|
53
|
+
end # class LogStash::MultiQueue
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
#$: << File.join(File.dirname(__FILE__), "..", "..", "vendor", "bundle")
|
|
3
|
+
|
|
4
|
+
module LogStash
|
|
5
|
+
module Inputs; end
|
|
6
|
+
module Outputs; end
|
|
7
|
+
module Filters; end
|
|
8
|
+
module Search; end
|
|
9
|
+
module Config; end
|
|
10
|
+
module File; end
|
|
11
|
+
module Web; end
|
|
12
|
+
module Util; end
|
|
13
|
+
module PluginMixins; end
|
|
14
|
+
|
|
15
|
+
SHUTDOWN = :shutdown
|
|
16
|
+
end # module LogStash
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "cgi"
|
|
3
|
+
require "logstash/event"
|
|
4
|
+
require "logstash/logging"
|
|
5
|
+
require "logstash/plugin"
|
|
6
|
+
require "logstash/namespace"
|
|
7
|
+
require "logstash/config/mixin"
|
|
8
|
+
require "uri"
|
|
9
|
+
|
|
10
|
+
class LogStash::Outputs::Base < LogStash::Plugin
|
|
11
|
+
include LogStash::Config::Mixin
|
|
12
|
+
|
|
13
|
+
config_name "output"
|
|
14
|
+
|
|
15
|
+
# The type to act on. If a type is given, then this output will only
|
|
16
|
+
# act on messages with the same type. See any input plugin's "type"
|
|
17
|
+
# attribute for more.
|
|
18
|
+
# Optional.
|
|
19
|
+
config :type, :validate => :string, :default => "", :deprecated => "You can achieve this same behavior with the new conditionals, like: `if [type] == \"sometype\" { %PLUGIN% { ... } }`."
|
|
20
|
+
|
|
21
|
+
# Only handle events with all of these tags. Note that if you specify
|
|
22
|
+
# a type, the event must also match that type.
|
|
23
|
+
# Optional.
|
|
24
|
+
config :tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if \"sometag\" in [tags] { %PLUGIN% { ... } }`"
|
|
25
|
+
|
|
26
|
+
# Only handle events without any of these tags. Note this check is additional to type and tags.
|
|
27
|
+
config :exclude_tags, :validate => :array, :default => [], :deprecated => "You can achieve similar behavior with the new conditionals, like: `if !(\"sometag\" in [tags]) { %PLUGIN% { ... } }`"
|
|
28
|
+
|
|
29
|
+
# The codec used for output data
|
|
30
|
+
config :codec, :validate => :codec, :default => "plain"
|
|
31
|
+
|
|
32
|
+
# The number of workers to use for this output.
|
|
33
|
+
# Note that this setting may not be useful for all outputs.
|
|
34
|
+
config :workers, :validate => :number, :default => 1
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def workers_not_supported(message=nil)
|
|
38
|
+
return if @workers == 1
|
|
39
|
+
if message
|
|
40
|
+
@logger.warn(I18n.t("logstash.pipeline.output-worker-unsupported-with-message", :plugin => self.class.config_name, :worker_count => @workers, :message => message))
|
|
41
|
+
else
|
|
42
|
+
@logger.warn(I18n.t("logstash.pipeline.output-worker-unsupported", :plugin => self.class.config_name, :worker_count => @workers))
|
|
43
|
+
end
|
|
44
|
+
@workers = 1
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
public
|
|
48
|
+
def initialize(params={})
|
|
49
|
+
super
|
|
50
|
+
config_init(params)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
public
|
|
54
|
+
def register
|
|
55
|
+
raise "#{self.class}#register must be overidden"
|
|
56
|
+
end # def register
|
|
57
|
+
|
|
58
|
+
public
|
|
59
|
+
def receive(event)
|
|
60
|
+
raise "#{self.class}#receive must be overidden"
|
|
61
|
+
end # def receive
|
|
62
|
+
|
|
63
|
+
public
|
|
64
|
+
def worker_setup
|
|
65
|
+
return unless @workers > 1
|
|
66
|
+
|
|
67
|
+
define_singleton_method(:handle, method(:handle_worker))
|
|
68
|
+
@worker_queue = SizedQueue.new(20)
|
|
69
|
+
|
|
70
|
+
@worker_threads = @workers.times do |i|
|
|
71
|
+
Thread.new(original_params, @worker_queue) do |params, queue|
|
|
72
|
+
LogStash::Util::set_thread_name(">#{self.class.config_name}.#{i}")
|
|
73
|
+
worker_params = params.merge("workers" => 1, "codec" => @codec.clone)
|
|
74
|
+
worker_plugin = self.class.new(worker_params)
|
|
75
|
+
worker_plugin.register
|
|
76
|
+
while true
|
|
77
|
+
event = queue.pop
|
|
78
|
+
worker_plugin.handle(event)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
public
|
|
85
|
+
def handle(event)
|
|
86
|
+
receive(event)
|
|
87
|
+
end # def handle
|
|
88
|
+
|
|
89
|
+
def handle_worker(event)
|
|
90
|
+
@worker_queue.push(event)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
def output?(event)
|
|
95
|
+
if !@type.empty?
|
|
96
|
+
if event["type"] != @type
|
|
97
|
+
@logger.debug? and @logger.debug(["outputs/#{self.class.name}: Dropping event because type doesn't match #{@type}", event])
|
|
98
|
+
return false
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if !@tags.empty?
|
|
103
|
+
return false if !event["tags"]
|
|
104
|
+
@include_method = :any?
|
|
105
|
+
if !@tags.send(@include_method) {|tag| event["tags"].include?(tag)}
|
|
106
|
+
@logger.debug? and @logger.debug("outputs/#{self.class.name}: Dropping event because tags don't match #{@tags.inspect}", event)
|
|
107
|
+
return false
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
if !@exclude_tags.empty? && event["tags"]
|
|
112
|
+
if @exclude_tags.send(@exclude_method) {|tag| event["tags"].include?(tag)}
|
|
113
|
+
@logger.debug? and @logger.debug("outputs/#{self.class.name}: Dropping event because tags contains excluded tags: #{exclude_tags.inspect}", event)
|
|
114
|
+
return false
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
return true
|
|
119
|
+
end
|
|
120
|
+
end # class LogStash::Outputs::Base
|