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,244 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# The date filter is used for parsing dates from fields and using that
|
|
6
|
+
# date or timestamp as the timestamp for the event.
|
|
7
|
+
#
|
|
8
|
+
# For example, syslog events usually have timestamps like this:
|
|
9
|
+
#
|
|
10
|
+
# "Apr 17 09:32:01"
|
|
11
|
+
#
|
|
12
|
+
# You would use the date format "MMM dd HH:mm:ss" to parse this.
|
|
13
|
+
#
|
|
14
|
+
# The date filter is especially important for sorting events and for
|
|
15
|
+
# backfilling old data. If you don't get the date correct in your
|
|
16
|
+
# event, then searching for them later will likely sort out of order.
|
|
17
|
+
#
|
|
18
|
+
# In the absence of this filter, logstash will choose a timestamp based on the
|
|
19
|
+
# first time it sees the event (at input time), if the timestamp is not already
|
|
20
|
+
# set in the event. For example, with file input, the timestamp is set to the
|
|
21
|
+
# time of each read.
|
|
22
|
+
class LogStash::Filters::Date < LogStash::Filters::Base
|
|
23
|
+
if RUBY_ENGINE == "jruby"
|
|
24
|
+
JavaException = java.lang.Exception
|
|
25
|
+
UTC = org.joda.time.DateTimeZone.forID("UTC")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
config_name "date"
|
|
29
|
+
milestone 3
|
|
30
|
+
|
|
31
|
+
# Specify a timezone canonical ID to be used for date parsing.
|
|
32
|
+
# The valid ID are listed on http://joda-time.sourceforge.net/timezones.html
|
|
33
|
+
# Useful in case the timezone cannot be extracted from the value,
|
|
34
|
+
# and is not the platform default.
|
|
35
|
+
# If this is not specified the platform default will be used.
|
|
36
|
+
# Canonical ID is good as it takes care of daylight saving time for you
|
|
37
|
+
# For example, America/Los_Angeles or Europe/France are valid IDs.
|
|
38
|
+
config :timezone, :validate => :string
|
|
39
|
+
|
|
40
|
+
# specify a locale to be used for date parsing. If this is not specified the
|
|
41
|
+
# platform default will be used
|
|
42
|
+
#
|
|
43
|
+
# The locale is mostly necessary to be set for parsing month names and
|
|
44
|
+
# weekday names
|
|
45
|
+
#
|
|
46
|
+
config :locale, :validate => :string
|
|
47
|
+
|
|
48
|
+
# The date formats allowed are anything allowed by Joda-Time (java time
|
|
49
|
+
# library): You can see the docs for this format here:
|
|
50
|
+
#
|
|
51
|
+
# [joda.time.format.DateTimeFormat](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html)
|
|
52
|
+
#
|
|
53
|
+
# An array with field name first, and format patterns following, `[ field,
|
|
54
|
+
# formats... ]`
|
|
55
|
+
#
|
|
56
|
+
# If your time field has multiple possible formats, you can do this:
|
|
57
|
+
#
|
|
58
|
+
# match => [ "logdate", "MMM dd YYY HH:mm:ss",
|
|
59
|
+
# "MMM d YYY HH:mm:ss", "ISO8601" ]
|
|
60
|
+
#
|
|
61
|
+
# The above will match a syslog (rfc3164) or iso8601 timestamp.
|
|
62
|
+
#
|
|
63
|
+
# There are a few special exceptions, the following format literals exist
|
|
64
|
+
# to help you save time and ensure correctness of date parsing.
|
|
65
|
+
#
|
|
66
|
+
# * "ISO8601" - should parse any valid ISO8601 timestamp, such as
|
|
67
|
+
# 2011-04-19T03:44:01.103Z
|
|
68
|
+
# * "UNIX" - will parse unix time in seconds since epoch
|
|
69
|
+
# * "UNIX_MS" - will parse unix time in milliseconds since epoch
|
|
70
|
+
# * "TAI64N" - will parse tai64n time values
|
|
71
|
+
#
|
|
72
|
+
# For example, if you have a field 'logdate' and with a value that looks like
|
|
73
|
+
# 'Aug 13 2010 00:03:44', you would use this configuration:
|
|
74
|
+
#
|
|
75
|
+
# filter {
|
|
76
|
+
# date {
|
|
77
|
+
# match => [ "logdate", "MMM dd YYYY HH:mm:ss" ]
|
|
78
|
+
# }
|
|
79
|
+
# }
|
|
80
|
+
#
|
|
81
|
+
# If your field is nested in your structure, you can use the nested
|
|
82
|
+
# syntax [foo][bar] to match its value. For more information, please refer to
|
|
83
|
+
# http://logstash.net/docs/latest/configuration#fieldreferences
|
|
84
|
+
config :match, :validate => :array, :default => []
|
|
85
|
+
|
|
86
|
+
# Store the matching timestamp into the given target field. If not provided,
|
|
87
|
+
# default to updating the @timestamp field of the event.
|
|
88
|
+
config :target, :validate => :string, :default => "@timestamp"
|
|
89
|
+
|
|
90
|
+
# LOGSTASH-34
|
|
91
|
+
DATEPATTERNS = %w{ y d H m s S }
|
|
92
|
+
|
|
93
|
+
# The 'date' filter will take a value from your event and use it as the
|
|
94
|
+
# event timestamp. This is useful for parsing logs generated on remote
|
|
95
|
+
# servers or for importing old logs.
|
|
96
|
+
#
|
|
97
|
+
# The config looks like this:
|
|
98
|
+
#
|
|
99
|
+
# filter {
|
|
100
|
+
# date {
|
|
101
|
+
# type => "typename"
|
|
102
|
+
# filename => fieldformat
|
|
103
|
+
# # Example:
|
|
104
|
+
# timestamp => "mmm DD HH:mm:ss"
|
|
105
|
+
# }
|
|
106
|
+
# }
|
|
107
|
+
#
|
|
108
|
+
# The format is whatever is supported by Joda; generally:
|
|
109
|
+
# http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
|
|
110
|
+
#
|
|
111
|
+
# TODO(sissel): Support 'seconds since epoch' parsing (nagios uses this)
|
|
112
|
+
public
|
|
113
|
+
def initialize(config = {})
|
|
114
|
+
super
|
|
115
|
+
|
|
116
|
+
@parsers = Hash.new { |h,k| h[k] = [] }
|
|
117
|
+
end # def initialize
|
|
118
|
+
|
|
119
|
+
private
|
|
120
|
+
def parseLocale(localeString)
|
|
121
|
+
return nil if localeString == nil
|
|
122
|
+
matches = localeString.match(/(?<lang>.+?)(?:_(?<country>.+?))?(?:_(?<variant>.+))?/)
|
|
123
|
+
lang = matches['lang'] == nil ? "" : matches['lang'].strip()
|
|
124
|
+
country = matches['country'] == nil ? "" : matches['country'].strip()
|
|
125
|
+
variant = matches['variant'] == nil ? "" : matches['variant'].strip()
|
|
126
|
+
return lang.length > 0 ? java.util.Locale.new(lang, country, variant) : nil
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
public
|
|
130
|
+
def register
|
|
131
|
+
require "java"
|
|
132
|
+
if @match.length < 2
|
|
133
|
+
raise LogStash::ConfigurationError, I18n.t("logstash.agent.configuration.invalid_plugin_register",
|
|
134
|
+
:plugin => "filter", :type => "date",
|
|
135
|
+
:error => "The match setting should contains first a field name and at least one date format, current value is #{@match}")
|
|
136
|
+
end
|
|
137
|
+
# TODO(sissel): Need a way of capturing regexp configs better.
|
|
138
|
+
locale = parseLocale(@config["locale"][0]) if @config["locale"] != nil and @config["locale"][0] != nil
|
|
139
|
+
setupMatcher(@config["match"].shift, locale, @config["match"] )
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def setupMatcher(field, locale, value)
|
|
143
|
+
value.each do |format|
|
|
144
|
+
case format
|
|
145
|
+
when "ISO8601"
|
|
146
|
+
joda_parser = org.joda.time.format.ISODateTimeFormat.dateTimeParser
|
|
147
|
+
if @timezone
|
|
148
|
+
joda_parser = joda_parser.withZone(org.joda.time.DateTimeZone.forID(@timezone))
|
|
149
|
+
else
|
|
150
|
+
joda_parser = joda_parser.withOffsetParsed
|
|
151
|
+
end
|
|
152
|
+
parser = lambda { |date| joda_parser.parseMillis(date) }
|
|
153
|
+
when "UNIX" # unix epoch
|
|
154
|
+
joda_instant = org.joda.time.Instant.java_class.constructor(Java::long).method(:new_instance)
|
|
155
|
+
#parser = lambda { |date| joda_instant.call((date.to_f * 1000).to_i).to_java.toDateTime }
|
|
156
|
+
parser = lambda { |date| (date.to_f * 1000).to_i }
|
|
157
|
+
when "UNIX_MS" # unix epoch in ms
|
|
158
|
+
joda_instant = org.joda.time.Instant.java_class.constructor(Java::long).method(:new_instance)
|
|
159
|
+
parser = lambda do |date|
|
|
160
|
+
#return joda_instant.call(date.to_i).to_java.toDateTime
|
|
161
|
+
return date.to_i
|
|
162
|
+
end
|
|
163
|
+
when "TAI64N" # TAI64 with nanoseconds, -10000 accounts for leap seconds
|
|
164
|
+
joda_instant = org.joda.time.Instant.java_class.constructor(Java::long).method(:new_instance)
|
|
165
|
+
parser = lambda do |date|
|
|
166
|
+
# Skip leading "@" if it is present (common in tai64n times)
|
|
167
|
+
date = date[1..-1] if date[0, 1] == "@"
|
|
168
|
+
#return joda_instant.call((date[1..15].hex * 1000 - 10000)+(date[16..23].hex/1000000)).to_java.toDateTime
|
|
169
|
+
return (date[1..15].hex * 1000 - 10000)+(date[16..23].hex/1000000)
|
|
170
|
+
end
|
|
171
|
+
else
|
|
172
|
+
joda_parser = org.joda.time.format.DateTimeFormat.forPattern(format).withDefaultYear(Time.new.year)
|
|
173
|
+
if @timezone
|
|
174
|
+
joda_parser = joda_parser.withZone(org.joda.time.DateTimeZone.forID(@timezone))
|
|
175
|
+
else
|
|
176
|
+
joda_parser = joda_parser.withOffsetParsed
|
|
177
|
+
end
|
|
178
|
+
if (locale != nil)
|
|
179
|
+
joda_parser = joda_parser.withLocale(locale)
|
|
180
|
+
end
|
|
181
|
+
parser = lambda { |date| joda_parser.parseMillis(date) }
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
@logger.debug("Adding type with date config", :type => @type,
|
|
185
|
+
:field => field, :format => format)
|
|
186
|
+
@parsers[field] << {
|
|
187
|
+
:parser => parser,
|
|
188
|
+
:format => format
|
|
189
|
+
}
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# def register
|
|
194
|
+
|
|
195
|
+
public
|
|
196
|
+
def filter(event)
|
|
197
|
+
@logger.debug? && @logger.debug("Date filter: received event", :type => event["type"])
|
|
198
|
+
return unless filter?(event)
|
|
199
|
+
@parsers.each do |field, fieldparsers|
|
|
200
|
+
@logger.debug? && @logger.debug("Date filter looking for field",
|
|
201
|
+
:type => event["type"], :field => field)
|
|
202
|
+
next unless event.include?(field)
|
|
203
|
+
|
|
204
|
+
fieldvalues = event[field]
|
|
205
|
+
fieldvalues = [fieldvalues] if !fieldvalues.is_a?(Array)
|
|
206
|
+
fieldvalues.each do |value|
|
|
207
|
+
next if value.nil?
|
|
208
|
+
begin
|
|
209
|
+
epochmillis = nil
|
|
210
|
+
success = false
|
|
211
|
+
last_exception = RuntimeError.new "Unknown"
|
|
212
|
+
fieldparsers.each do |parserconfig|
|
|
213
|
+
parser = parserconfig[:parser]
|
|
214
|
+
begin
|
|
215
|
+
epochmillis = parser.call(value)
|
|
216
|
+
success = true
|
|
217
|
+
break # success
|
|
218
|
+
rescue StandardError, JavaException => e
|
|
219
|
+
last_exception = e
|
|
220
|
+
end
|
|
221
|
+
end # fieldparsers.each
|
|
222
|
+
|
|
223
|
+
raise last_exception unless success
|
|
224
|
+
|
|
225
|
+
# Convert joda DateTime to a ruby Time
|
|
226
|
+
event[@target] = Time.at(epochmillis / 1000, (epochmillis % 1000) * 1000)
|
|
227
|
+
#event[@target] = Time.at(epochmillis / 1000.0).utc
|
|
228
|
+
|
|
229
|
+
@logger.debug? && @logger.debug("Date parsing done", :value => value, :timestamp => event[@target])
|
|
230
|
+
rescue StandardError, JavaException => e
|
|
231
|
+
@logger.warn("Failed parsing date from field", :field => field,
|
|
232
|
+
:value => value, :exception => e)
|
|
233
|
+
# Raising here will bubble all the way up and cause an exit.
|
|
234
|
+
# TODO(sissel): Maybe we shouldn't raise?
|
|
235
|
+
# TODO(sissel): What do we do on a failure? Tag it like grok does?
|
|
236
|
+
#raise e
|
|
237
|
+
end # begin
|
|
238
|
+
end # fieldvalue.each
|
|
239
|
+
end # @parsers.each
|
|
240
|
+
|
|
241
|
+
filter_matched(event) if !event.cancelled?
|
|
242
|
+
return event
|
|
243
|
+
end # def filter
|
|
244
|
+
end # class LogStash::Filters::Date
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# DNS Filter
|
|
3
|
+
#
|
|
4
|
+
# This filter will resolve any IP addresses from a field of your choosing.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
require "logstash/filters/base"
|
|
8
|
+
require "logstash/namespace"
|
|
9
|
+
|
|
10
|
+
# The DNS filter performs a lookup (either an A record/CNAME record lookup
|
|
11
|
+
# or a reverse lookup at the PTR record) on records specified under the
|
|
12
|
+
# "reverse" and "resolve" arrays.
|
|
13
|
+
#
|
|
14
|
+
# The config should look like this:
|
|
15
|
+
#
|
|
16
|
+
# filter {
|
|
17
|
+
# dns {
|
|
18
|
+
# type => 'type'
|
|
19
|
+
# reverse => [ "source_host", "field_with_address" ]
|
|
20
|
+
# resolve => [ "field_with_fqdn" ]
|
|
21
|
+
# action => "replace"
|
|
22
|
+
# }
|
|
23
|
+
# }
|
|
24
|
+
#
|
|
25
|
+
# Caveats: at the moment, there's no way to tune the timeout with the 'resolv'
|
|
26
|
+
# core library. It does seem to be fixed in here:
|
|
27
|
+
#
|
|
28
|
+
# http://redmine.ruby-lang.org/issues/5100
|
|
29
|
+
#
|
|
30
|
+
# but isn't currently in JRuby.
|
|
31
|
+
class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
32
|
+
|
|
33
|
+
config_name "dns"
|
|
34
|
+
milestone 2
|
|
35
|
+
|
|
36
|
+
# Reverse resolve one or more fields.
|
|
37
|
+
config :reverse, :validate => :array
|
|
38
|
+
|
|
39
|
+
# Forward resolve one or more fields.
|
|
40
|
+
config :resolve, :validate => :array
|
|
41
|
+
|
|
42
|
+
# Determine what action to do: append or replace the values in the fields
|
|
43
|
+
# specified under "reverse" and "resolve."
|
|
44
|
+
config :action, :validate => [ "append", "replace" ], :default => "append"
|
|
45
|
+
|
|
46
|
+
# Use custom nameserver.
|
|
47
|
+
config :nameserver, :validate => :string
|
|
48
|
+
|
|
49
|
+
# TODO(sissel): make 'action' required? This was always the intent, but it
|
|
50
|
+
# due to a typo it was never enforced. Thus the default behavior in past
|
|
51
|
+
# versions was 'append' by accident.
|
|
52
|
+
|
|
53
|
+
# resolv calls will be wrapped in a timeout instance
|
|
54
|
+
config :timeout, :validate => :number, :default => 2
|
|
55
|
+
|
|
56
|
+
public
|
|
57
|
+
def register
|
|
58
|
+
require "resolv"
|
|
59
|
+
require "timeout"
|
|
60
|
+
if @nameserver.nil?
|
|
61
|
+
@resolv = Resolv.new
|
|
62
|
+
else
|
|
63
|
+
@resolv = Resolv.new(resolvers=[::Resolv::Hosts.new, ::Resolv::DNS.new(:nameserver => [@nameserver], :search => [], :ndots => 1)])
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
@ip_validator = Resolv::AddressRegex
|
|
67
|
+
end # def register
|
|
68
|
+
|
|
69
|
+
public
|
|
70
|
+
def filter(event)
|
|
71
|
+
return unless filter?(event)
|
|
72
|
+
|
|
73
|
+
if @resolve
|
|
74
|
+
begin
|
|
75
|
+
status = Timeout::timeout(@timeout) {
|
|
76
|
+
resolve(event)
|
|
77
|
+
}
|
|
78
|
+
rescue Timeout::Error
|
|
79
|
+
@logger.debug("DNS: resolve action timed out")
|
|
80
|
+
return
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
if @reverse
|
|
85
|
+
begin
|
|
86
|
+
status = Timeout::timeout(@timeout) {
|
|
87
|
+
reverse(event)
|
|
88
|
+
}
|
|
89
|
+
rescue Timeout::Error
|
|
90
|
+
@logger.debug("DNS: reverse action timed out")
|
|
91
|
+
return
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
filter_matched(event)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
private
|
|
99
|
+
def resolve(event)
|
|
100
|
+
@resolve.each do |field|
|
|
101
|
+
is_array = false
|
|
102
|
+
raw = event[field]
|
|
103
|
+
if raw.is_a?(Array)
|
|
104
|
+
is_array = true
|
|
105
|
+
if raw.length > 1
|
|
106
|
+
@logger.warn("DNS: skipping resolve, can't deal with multiple values", :field => field, :value => raw)
|
|
107
|
+
return
|
|
108
|
+
end
|
|
109
|
+
raw = raw.first
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
begin
|
|
113
|
+
address = @resolv.getaddress(raw)
|
|
114
|
+
rescue Resolv::ResolvError
|
|
115
|
+
@logger.debug("DNS: couldn't resolve the hostname.",
|
|
116
|
+
:field => field, :value => raw)
|
|
117
|
+
return
|
|
118
|
+
rescue Resolv::ResolvTimeout
|
|
119
|
+
@logger.debug("DNS: timeout on resolving the hostname.",
|
|
120
|
+
:field => field, :value => raw)
|
|
121
|
+
return
|
|
122
|
+
rescue SocketError => e
|
|
123
|
+
@logger.debug("DNS: Encountered SocketError.",
|
|
124
|
+
:field => field, :value => raw)
|
|
125
|
+
return
|
|
126
|
+
rescue NoMethodError => e
|
|
127
|
+
# see JRUBY-5647
|
|
128
|
+
@logger.debug("DNS: couldn't resolve the hostname.",
|
|
129
|
+
:field => field, :value => raw,
|
|
130
|
+
:extra => "NameError instead of ResolvError")
|
|
131
|
+
return
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
if @action == "replace"
|
|
135
|
+
if is_array
|
|
136
|
+
event[field] = [address]
|
|
137
|
+
else
|
|
138
|
+
event[field] = address
|
|
139
|
+
end
|
|
140
|
+
else
|
|
141
|
+
if !is_array
|
|
142
|
+
event[field] = [event[field], address]
|
|
143
|
+
else
|
|
144
|
+
event[field] << address
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
private
|
|
152
|
+
def reverse(event)
|
|
153
|
+
@reverse.each do |field|
|
|
154
|
+
raw = event[field]
|
|
155
|
+
is_array = false
|
|
156
|
+
if raw.is_a?(Array)
|
|
157
|
+
is_array = true
|
|
158
|
+
if raw.length > 1
|
|
159
|
+
@logger.warn("DNS: skipping reverse, can't deal with multiple values", :field => field, :value => raw)
|
|
160
|
+
return
|
|
161
|
+
end
|
|
162
|
+
raw = raw.first
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
if ! @ip_validator.match(raw)
|
|
166
|
+
@logger.debug("DNS: not an address",
|
|
167
|
+
:field => field, :value => event[field])
|
|
168
|
+
return
|
|
169
|
+
end
|
|
170
|
+
begin
|
|
171
|
+
hostname = @resolv.getname(raw)
|
|
172
|
+
rescue Resolv::ResolvError
|
|
173
|
+
@logger.debug("DNS: couldn't resolve the address.",
|
|
174
|
+
:field => field, :value => raw)
|
|
175
|
+
return
|
|
176
|
+
rescue Resolv::ResolvTimeout
|
|
177
|
+
@logger.debug("DNS: timeout on resolving address.",
|
|
178
|
+
:field => field, :value => raw)
|
|
179
|
+
return
|
|
180
|
+
rescue SocketError => e
|
|
181
|
+
@logger.debug("DNS: Encountered SocketError.",
|
|
182
|
+
:field => field, :value => raw)
|
|
183
|
+
return
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
if @action == "replace"
|
|
187
|
+
if is_array
|
|
188
|
+
event[field] = [hostname]
|
|
189
|
+
else
|
|
190
|
+
event[field] = hostname
|
|
191
|
+
end
|
|
192
|
+
else
|
|
193
|
+
if !is_array
|
|
194
|
+
event[field] = [event[field], hostname]
|
|
195
|
+
else
|
|
196
|
+
event[field] << hostname
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end # class LogStash::Filters::DNS
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Drop filter.
|
|
6
|
+
#
|
|
7
|
+
# Drops everything that gets to this filter.
|
|
8
|
+
#
|
|
9
|
+
# This is best used in combination with conditionals, for example:
|
|
10
|
+
#
|
|
11
|
+
# filter {
|
|
12
|
+
# if [loglevel] == "debug" {
|
|
13
|
+
# drop { }
|
|
14
|
+
# }
|
|
15
|
+
# }
|
|
16
|
+
#
|
|
17
|
+
# The above will only pass events to the drop filter if the loglevel field is
|
|
18
|
+
# "debug". This will cause all events matching to be dropped.
|
|
19
|
+
class LogStash::Filters::Drop < LogStash::Filters::Base
|
|
20
|
+
config_name "drop"
|
|
21
|
+
milestone 3
|
|
22
|
+
|
|
23
|
+
public
|
|
24
|
+
def register
|
|
25
|
+
# nothing to do.
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
public
|
|
29
|
+
def filter(event)
|
|
30
|
+
event.cancel
|
|
31
|
+
end # def filter
|
|
32
|
+
end # class LogStash::Filters::Drop
|