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,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Strip everything but punctuation from a field and store the remainder in the
|
|
6
|
+
# a separate field. This is often used for fingerprinting log events.
|
|
7
|
+
class LogStash::Filters::Punct < LogStash::Filters::Base
|
|
8
|
+
config_name "punct"
|
|
9
|
+
milestone 1
|
|
10
|
+
|
|
11
|
+
# The field reference to use for punctuation stripping
|
|
12
|
+
config :source, :validate => :string, :default => "message"
|
|
13
|
+
|
|
14
|
+
# The field to store the result.
|
|
15
|
+
config :target, :validate => :string, :default => "punct"
|
|
16
|
+
|
|
17
|
+
public
|
|
18
|
+
def register
|
|
19
|
+
# Nothing to do
|
|
20
|
+
end # def register
|
|
21
|
+
|
|
22
|
+
public
|
|
23
|
+
def filter(event)
|
|
24
|
+
return unless filter?(event)
|
|
25
|
+
|
|
26
|
+
original_value = event[@source]
|
|
27
|
+
|
|
28
|
+
# If for some reason the field is an array of values, take the first only.
|
|
29
|
+
original_value = original_value.first if original_value.is_a?(Array)
|
|
30
|
+
event[@target] = original_value.tr('A-Za-z0-9 \t','')
|
|
31
|
+
end # def filter
|
|
32
|
+
end # class LogStash::Filters::Punct
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# parallel request filter
|
|
3
|
+
#
|
|
4
|
+
# This filter will separate out the parallel requests into separate events.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
require "logstash/filters/base"
|
|
8
|
+
require "logstash/namespace"
|
|
9
|
+
require "set"
|
|
10
|
+
|
|
11
|
+
class LogStash::Filters::Railsparallelrequest < LogStash::Filters::Base
|
|
12
|
+
|
|
13
|
+
config_name "railsparallelrequest"
|
|
14
|
+
milestone 1
|
|
15
|
+
|
|
16
|
+
public
|
|
17
|
+
def initialize(config = {})
|
|
18
|
+
super
|
|
19
|
+
@threadsafe = false
|
|
20
|
+
@pending = Hash.new
|
|
21
|
+
@last_event = nil
|
|
22
|
+
@recently_error = nil
|
|
23
|
+
@last_uuid = nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def register ;end
|
|
27
|
+
|
|
28
|
+
def filter(event)
|
|
29
|
+
return unless filter?(event)
|
|
30
|
+
return if event["tags"].include? self.class.config_name
|
|
31
|
+
|
|
32
|
+
event["tags"] << self.class.config_name
|
|
33
|
+
|
|
34
|
+
line = event["message"]
|
|
35
|
+
|
|
36
|
+
if line =~ /^\[(.*?)\]/
|
|
37
|
+
uuid = $1
|
|
38
|
+
event["uuid"] = uuid
|
|
39
|
+
if @recently_error
|
|
40
|
+
if @last_uuid == uuid
|
|
41
|
+
merge_events(@recently_error, event, uuid)
|
|
42
|
+
event.cancel
|
|
43
|
+
return
|
|
44
|
+
else
|
|
45
|
+
@recently_error.uncancel
|
|
46
|
+
yield @recently_error
|
|
47
|
+
@recently_error = nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
@last_uuid = uuid
|
|
52
|
+
if @pending[uuid]
|
|
53
|
+
merge_events(@pending[uuid], event, uuid)
|
|
54
|
+
else
|
|
55
|
+
@pending[uuid] = event
|
|
56
|
+
end
|
|
57
|
+
@last_event = @pending[uuid]
|
|
58
|
+
|
|
59
|
+
if line =~ /Error/
|
|
60
|
+
event.overwrite(@pending[uuid].to_hash)
|
|
61
|
+
@pending.delete uuid
|
|
62
|
+
@recently_error = event
|
|
63
|
+
elsif line =~ /Completed/
|
|
64
|
+
event.overwrite(@pending[uuid])
|
|
65
|
+
@pending.delete uuid
|
|
66
|
+
return
|
|
67
|
+
end
|
|
68
|
+
event.cancel
|
|
69
|
+
elsif @last_event
|
|
70
|
+
@last_event.append(event)
|
|
71
|
+
event.cancel
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def flush
|
|
76
|
+
events = @pending.values.each { |event| event.uncancel }
|
|
77
|
+
@pending.clear
|
|
78
|
+
events
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
def merge_events(dest, source, uuid)
|
|
83
|
+
source["message"].gsub!("[#{uuid}]", "")
|
|
84
|
+
dest.append(source)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# This filter is used to check that certain fields are within expected size/length ranges.
|
|
6
|
+
# Supported types are numbers and strings.
|
|
7
|
+
# Numbers are checked to be within numeric value range.
|
|
8
|
+
# Strings are checked to be within string length range.
|
|
9
|
+
# More than one range can be specified for same fieldname, actions will be applied incrementally.
|
|
10
|
+
# When field value is within a specified range an action will be taken.
|
|
11
|
+
# Supported actions are drop event, add tag, or add field with specified value.
|
|
12
|
+
#
|
|
13
|
+
# Example use cases are for histogram-like tagging of events
|
|
14
|
+
# or for finding anomaly values in fields or too big events that should be dropped.
|
|
15
|
+
|
|
16
|
+
class LogStash::Filters::Range < LogStash::Filters::Base
|
|
17
|
+
config_name "range"
|
|
18
|
+
milestone 1
|
|
19
|
+
|
|
20
|
+
# An array of field, min, max, action tuples.
|
|
21
|
+
# Example:
|
|
22
|
+
#
|
|
23
|
+
# filter {
|
|
24
|
+
# %PLUGIN% {
|
|
25
|
+
# ranges => [ "message", 0, 10, "tag:short",
|
|
26
|
+
# "message", 11, 100, "tag:medium",
|
|
27
|
+
# "message", 101, 1000, "tag:long",
|
|
28
|
+
# "message", 1001, 1e1000, "drop",
|
|
29
|
+
# "duration", 0, 100, "field:latency:fast",
|
|
30
|
+
# "duration", 101, 200, "field:latency:normal",
|
|
31
|
+
# "duration", 201, 1000, "field:latency:slow",
|
|
32
|
+
# "duration", 1001, 1e1000, "field:latency:outlier",
|
|
33
|
+
# "requests", 0, 10, "tag:too_few_%{host}_requests" ]
|
|
34
|
+
# }
|
|
35
|
+
# }
|
|
36
|
+
#
|
|
37
|
+
# Supported actions are drop tag or field with specified value.
|
|
38
|
+
# Added tag names and field names and field values can have %{dynamic} values.
|
|
39
|
+
#
|
|
40
|
+
# TODO(piavlo): The action syntax is ugly at the moment due to logstash grammar limitations - arrays grammar should support
|
|
41
|
+
# TODO(piavlo): simple not nested hashses as values in addition to numaric and string values to prettify the syntax.
|
|
42
|
+
config :ranges, :validate => :array, :default => []
|
|
43
|
+
|
|
44
|
+
# Negate the range match logic, events should be outsize of the specified range to match.
|
|
45
|
+
config :negate, :validate => :boolean, :default => false
|
|
46
|
+
|
|
47
|
+
public
|
|
48
|
+
def register
|
|
49
|
+
if @ranges.length % 4 != 0
|
|
50
|
+
raise "#{self.class.name}: ranges array should consist of 4 field tuples (field,min,max,action)"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
@range_tuples = {}
|
|
54
|
+
|
|
55
|
+
while !@ranges.empty?
|
|
56
|
+
fieldname, min, max, action = @ranges.shift(4)
|
|
57
|
+
|
|
58
|
+
raise "#{self.class.name}: range field name value should be a string" if !fieldname.is_a?(String)
|
|
59
|
+
raise "#{self.class.name}: range min value should be a number" if !min.is_a?(Integer) and !min.is_a?(Float)
|
|
60
|
+
raise "#{self.class.name}: range max value should be a number" if !max.is_a?(Integer) and !max.is_a?(Float)
|
|
61
|
+
raise "#{self.class.name}: range action value should be a string" if !action.is_a?(String)
|
|
62
|
+
|
|
63
|
+
action = action.split(':')
|
|
64
|
+
|
|
65
|
+
case action.first
|
|
66
|
+
when "drop"
|
|
67
|
+
raise "#{self.class.name}: drop action does not accept any parameters" unless action.length == 1
|
|
68
|
+
action = { :name => :drop }
|
|
69
|
+
when "tag"
|
|
70
|
+
raise "#{self.class.name}: tag action accepts exactly one arg which is a tag name" unless action.length == 2
|
|
71
|
+
action = { :name => :add_tag, :tag => action.last }
|
|
72
|
+
when "field"
|
|
73
|
+
raise "#{self.class.name}: field action accepts exactly 2 args which are a field name and field value" unless action.length == 3
|
|
74
|
+
if action.last == action.last.to_i.to_s
|
|
75
|
+
value = action.last.to_i
|
|
76
|
+
elsif action.last == action.last.to_f.to_s
|
|
77
|
+
value = action.last.to_f
|
|
78
|
+
else
|
|
79
|
+
value = action.last
|
|
80
|
+
end
|
|
81
|
+
action = { :name => :add_field, :field => action[1], :value => value }
|
|
82
|
+
else
|
|
83
|
+
raise "#{self.class.name}: unsupported action #{action}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
@range_tuples[fieldname] ||= []
|
|
87
|
+
@range_tuples[fieldname] << { :min => min, :max => max, :action => action }
|
|
88
|
+
end
|
|
89
|
+
end # def register
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
public
|
|
93
|
+
def filter(event)
|
|
94
|
+
return unless filter?(event)
|
|
95
|
+
|
|
96
|
+
@range_tuples.each_key do |fieldname|
|
|
97
|
+
if event.include?(fieldname)
|
|
98
|
+
@range_tuples[fieldname].each do |range|
|
|
99
|
+
matched = false
|
|
100
|
+
|
|
101
|
+
field = event[fieldname]
|
|
102
|
+
case field
|
|
103
|
+
when Integer
|
|
104
|
+
matched = field.between?(range[:min], range[:max])
|
|
105
|
+
when Float
|
|
106
|
+
matched = field.between?(range[:min], range[:max])
|
|
107
|
+
when String
|
|
108
|
+
matched = field.length.between?(range[:min], range[:max])
|
|
109
|
+
else
|
|
110
|
+
@logger.warn("#{self.class.name}: action field value has unsupported type")
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
matched = !matched if @negate
|
|
114
|
+
next unless matched
|
|
115
|
+
|
|
116
|
+
case range[:action][:name]
|
|
117
|
+
when :drop
|
|
118
|
+
@logger.debug? and @logger.debug("#{self.class.name}: dropping event due to range match", :event => event)
|
|
119
|
+
event.cancel
|
|
120
|
+
return
|
|
121
|
+
when :add_tag
|
|
122
|
+
@logger.debug? and @logger.debug("#{self.class.name}: adding tag due to range match",
|
|
123
|
+
:event => event, :tag => range[:action][:tag] )
|
|
124
|
+
event.tag(event.sprintf(range[:action][:tag]))
|
|
125
|
+
when :add_field
|
|
126
|
+
@logger.debug? and @logger.debug("#{self.class.name}: adding field due to range match",
|
|
127
|
+
:event => event, :field => range[:action][:field], :value => range[:action][:value])
|
|
128
|
+
new_field = event.sprintf(range[:action][:field])
|
|
129
|
+
if event[new_field]
|
|
130
|
+
event[new_field] = [event[new_field]] if !event[new_field].is_a?(Array)
|
|
131
|
+
event[new_field] << event.sprintf(range[:action][:value])
|
|
132
|
+
else
|
|
133
|
+
event[new_field] = range[:action][:value].is_a?(String) ? event.sprintf(range[:action][:value]) : range[:action][:value]
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
filter_matched(event)
|
|
141
|
+
end # def filter
|
|
142
|
+
end # class LogStash::Filters::Range
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Execute ruby code.
|
|
6
|
+
#
|
|
7
|
+
# For example, to cancel 90% of events, you can do this:
|
|
8
|
+
#
|
|
9
|
+
# filter {
|
|
10
|
+
# ruby {
|
|
11
|
+
# # Cancel 90% of events
|
|
12
|
+
# code => "event.cancel if rand <= 0.90"
|
|
13
|
+
# }
|
|
14
|
+
# }
|
|
15
|
+
#
|
|
16
|
+
class LogStash::Filters::Ruby < LogStash::Filters::Base
|
|
17
|
+
config_name "ruby"
|
|
18
|
+
milestone 1
|
|
19
|
+
|
|
20
|
+
# Any code to execute at logstash startup-time
|
|
21
|
+
config :init, :validate => :string
|
|
22
|
+
|
|
23
|
+
# The code to execute for every event.
|
|
24
|
+
# You will have an 'event' variable available that is the event itself.
|
|
25
|
+
config :code, :validate => :string, :required => true
|
|
26
|
+
|
|
27
|
+
public
|
|
28
|
+
def register
|
|
29
|
+
# TODO(sissel): Compile the ruby code
|
|
30
|
+
eval(@init, binding, "(ruby filter init)") if @init
|
|
31
|
+
eval("@codeblock = lambda { |event| #{@code} }", binding, "(ruby filter code)")
|
|
32
|
+
end # def register
|
|
33
|
+
|
|
34
|
+
public
|
|
35
|
+
def filter(event)
|
|
36
|
+
return unless filter?(event)
|
|
37
|
+
|
|
38
|
+
@codeblock.call(event)
|
|
39
|
+
|
|
40
|
+
filter_matched(event)
|
|
41
|
+
end # def filter
|
|
42
|
+
end # class LogStash::Filters::Ruby
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Sleep a given amount of time. This will cause logstash
|
|
6
|
+
# to stall for the given amount of time. This is useful
|
|
7
|
+
# for rate limiting, etc.
|
|
8
|
+
#
|
|
9
|
+
class LogStash::Filters::Sleep < LogStash::Filters::Base
|
|
10
|
+
config_name "sleep"
|
|
11
|
+
milestone 1
|
|
12
|
+
|
|
13
|
+
# The length of time to sleep, in seconds, for every event.
|
|
14
|
+
#
|
|
15
|
+
# This can be a number (eg, 0.5), or a string (eg, "%{foo}")
|
|
16
|
+
# The second form (string with a field value) is useful if
|
|
17
|
+
# you have an attribute of your event that you want to use
|
|
18
|
+
# to indicate the amount of time to sleep.
|
|
19
|
+
#
|
|
20
|
+
# Example:
|
|
21
|
+
#
|
|
22
|
+
# filter {
|
|
23
|
+
# sleep {
|
|
24
|
+
# # Sleep 1 second for every event.
|
|
25
|
+
# time => "1"
|
|
26
|
+
# }
|
|
27
|
+
# }
|
|
28
|
+
config :time, :validate => :string
|
|
29
|
+
|
|
30
|
+
# Sleep on every N'th. This option is ignored in replay mode.
|
|
31
|
+
#
|
|
32
|
+
# Example:
|
|
33
|
+
#
|
|
34
|
+
# filter {
|
|
35
|
+
# sleep {
|
|
36
|
+
# time => "1" # Sleep 1 second
|
|
37
|
+
# every => 10 # on every 10th event
|
|
38
|
+
# }
|
|
39
|
+
# }
|
|
40
|
+
config :every, :validate => :string, :default => 1
|
|
41
|
+
|
|
42
|
+
# Enable replay mode.
|
|
43
|
+
#
|
|
44
|
+
# Replay mode tries to sleep based on timestamps in each event.
|
|
45
|
+
#
|
|
46
|
+
# The amount of time to sleep is computed by subtracting the
|
|
47
|
+
# previous event's timestamp from the current event's timestamp.
|
|
48
|
+
# This helps you replay events in the same timeline as original.
|
|
49
|
+
#
|
|
50
|
+
# If you specify a `time` setting as well, this filter will
|
|
51
|
+
# use the `time` value as a speed modifier. For example,
|
|
52
|
+
# a `time` value of 2 will replay at double speed, while a
|
|
53
|
+
# value of 0.25 will replay at 1/4th speed.
|
|
54
|
+
#
|
|
55
|
+
# For example:
|
|
56
|
+
#
|
|
57
|
+
# filter {
|
|
58
|
+
# sleep {
|
|
59
|
+
# time => 2
|
|
60
|
+
# replay => true
|
|
61
|
+
# }
|
|
62
|
+
# }
|
|
63
|
+
#
|
|
64
|
+
# The above will sleep in such a way that it will perform
|
|
65
|
+
# replay 2-times faster than the original time speed.
|
|
66
|
+
config :replay, :validate => :boolean, :default => false
|
|
67
|
+
|
|
68
|
+
public
|
|
69
|
+
def register
|
|
70
|
+
if @replay && @time.nil?
|
|
71
|
+
# Default time multiplier is 1 when replay is set.
|
|
72
|
+
@time = 1
|
|
73
|
+
end
|
|
74
|
+
if @time.nil?
|
|
75
|
+
raise ArgumentError, "Missing required parameter 'time' for input/eventlog"
|
|
76
|
+
end
|
|
77
|
+
@count = 0
|
|
78
|
+
end # def register
|
|
79
|
+
|
|
80
|
+
public
|
|
81
|
+
def filter(event)
|
|
82
|
+
return unless filter?(event)
|
|
83
|
+
@count += 1
|
|
84
|
+
|
|
85
|
+
case @time
|
|
86
|
+
when Fixnum, Float; time = @time
|
|
87
|
+
when nil; # nothing
|
|
88
|
+
else; time = event.sprintf(@time).to_f
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
if @replay
|
|
92
|
+
clock = event["@timestamp"].to_f
|
|
93
|
+
if @last_clock
|
|
94
|
+
delay = clock - @last_clock
|
|
95
|
+
time = delay/time
|
|
96
|
+
if time > 0
|
|
97
|
+
@logger.debug? && @logger.debug("Sleeping", :delay => time)
|
|
98
|
+
sleep(time)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
@last_clock = clock
|
|
102
|
+
else
|
|
103
|
+
if @count >= @every
|
|
104
|
+
@count = 0
|
|
105
|
+
@logger.debug? && @logger.debug("Sleeping", :delay => time)
|
|
106
|
+
sleep(time)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
filter_matched(event)
|
|
110
|
+
end # def filter
|
|
111
|
+
end # class LogStash::Filters::Sleep
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# The split filter is for splitting multiline messages into separate events.
|
|
6
|
+
#
|
|
7
|
+
# An example use case of this filter is for taking output from the 'exec' input
|
|
8
|
+
# which emits one event for the whole output of a command and splitting that
|
|
9
|
+
# output by newline - making each line an event.
|
|
10
|
+
#
|
|
11
|
+
# The end result of each split is a complete copy of the event
|
|
12
|
+
# with only the current split section of the given field changed.
|
|
13
|
+
class LogStash::Filters::Split < LogStash::Filters::Base
|
|
14
|
+
|
|
15
|
+
config_name "split"
|
|
16
|
+
milestone 2
|
|
17
|
+
|
|
18
|
+
# The string to split on. This is usually a line terminator, but can be any
|
|
19
|
+
# string.
|
|
20
|
+
config :terminator, :validate => :string, :default => "\n"
|
|
21
|
+
|
|
22
|
+
# The field which value is split by the terminator
|
|
23
|
+
config :field, :validate => :string, :default => "message"
|
|
24
|
+
|
|
25
|
+
public
|
|
26
|
+
def register
|
|
27
|
+
# Nothing to do
|
|
28
|
+
end # def register
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def filter(event)
|
|
32
|
+
return unless filter?(event)
|
|
33
|
+
|
|
34
|
+
events = []
|
|
35
|
+
|
|
36
|
+
original_value = event[@field]
|
|
37
|
+
|
|
38
|
+
# If for some reason the field is an array of values, take the first only.
|
|
39
|
+
original_value = original_value.first if original_value.is_a?(Array)
|
|
40
|
+
|
|
41
|
+
# Using -1 for 'limit' on String#split makes ruby not drop trailing empty
|
|
42
|
+
# splits.
|
|
43
|
+
splits = original_value.split(@terminator, -1)
|
|
44
|
+
|
|
45
|
+
# Skip filtering if splitting this event resulted in only one thing found.
|
|
46
|
+
return if splits.length == 1
|
|
47
|
+
#or splits[1].empty?
|
|
48
|
+
|
|
49
|
+
splits.each do |value|
|
|
50
|
+
next if value.empty?
|
|
51
|
+
|
|
52
|
+
event_split = event.clone
|
|
53
|
+
@logger.debug("Split event", :value => value, :field => @field)
|
|
54
|
+
event_split[@field] = value
|
|
55
|
+
filter_matched(event_split)
|
|
56
|
+
|
|
57
|
+
# Push this new event onto the stack at the LogStash::FilterWorker
|
|
58
|
+
yield event_split
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Cancel this event, we'll use the newly generated ones above.
|
|
62
|
+
event.cancel
|
|
63
|
+
end # def filter
|
|
64
|
+
end # class LogStash::Filters::Split
|