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,49 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "logstash/event"
|
|
4
|
+
require "logstash/plugin"
|
|
5
|
+
require "logstash/logging"
|
|
6
|
+
|
|
7
|
+
# This is the base class for logstash codecs.
|
|
8
|
+
module LogStash::Codecs; class Base < LogStash::Plugin
|
|
9
|
+
include LogStash::Config::Mixin
|
|
10
|
+
config_name "codec"
|
|
11
|
+
|
|
12
|
+
def initialize(params={})
|
|
13
|
+
super
|
|
14
|
+
config_init(params)
|
|
15
|
+
register if respond_to?(:register)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
public
|
|
19
|
+
def decode(data)
|
|
20
|
+
raise "#{self.class}#decode must be overidden"
|
|
21
|
+
end # def decode
|
|
22
|
+
|
|
23
|
+
alias_method :<<, :decode
|
|
24
|
+
|
|
25
|
+
public
|
|
26
|
+
def encode(data)
|
|
27
|
+
raise "#{self.class}#encode must be overidden"
|
|
28
|
+
end # def encode
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def teardown; end;
|
|
32
|
+
|
|
33
|
+
public
|
|
34
|
+
def on_event(&block)
|
|
35
|
+
@on_event = block
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
public
|
|
39
|
+
def flush(&block)
|
|
40
|
+
# does nothing by default.
|
|
41
|
+
# if your codec needs a flush method (like you are spooling things)
|
|
42
|
+
# you must implement this.
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
public
|
|
46
|
+
def clone
|
|
47
|
+
return self.class.new(params)
|
|
48
|
+
end
|
|
49
|
+
end; end # class LogStash::Codecs::Base
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
|
|
4
|
+
class LogStash::Codecs::CompressSpooler < LogStash::Codecs::Base
|
|
5
|
+
config_name 'compress_spooler'
|
|
6
|
+
milestone 1
|
|
7
|
+
config :spool_size, :validate => :number, :default => 50
|
|
8
|
+
config :compress_level, :validate => :number, :default => 6
|
|
9
|
+
|
|
10
|
+
public
|
|
11
|
+
def register
|
|
12
|
+
require "msgpack"
|
|
13
|
+
require "zlib"
|
|
14
|
+
@buffer = []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
public
|
|
18
|
+
def decode(data)
|
|
19
|
+
z = Zlib::Inflate.new
|
|
20
|
+
data = MessagePack.unpack(z.inflate(data))
|
|
21
|
+
z.finish
|
|
22
|
+
z.close
|
|
23
|
+
data.each do |event|
|
|
24
|
+
event = LogStash::Event.new(event)
|
|
25
|
+
event["@timestamp"] = Time.at(event["@timestamp"]).utc if event["@timestamp"].is_a? Float
|
|
26
|
+
yield event
|
|
27
|
+
end
|
|
28
|
+
end # def decode
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def encode(data)
|
|
32
|
+
if @buffer.length >= @spool_size
|
|
33
|
+
z = Zlib::Deflate.new(@compress_level)
|
|
34
|
+
@on_event.call z.deflate(MessagePack.pack(@buffer), Zlib::FINISH)
|
|
35
|
+
z.close
|
|
36
|
+
@buffer.clear
|
|
37
|
+
else
|
|
38
|
+
data["@timestamp"] = data["@timestamp"].to_f
|
|
39
|
+
@buffer << data.to_hash
|
|
40
|
+
end
|
|
41
|
+
end # def encode
|
|
42
|
+
|
|
43
|
+
public
|
|
44
|
+
def teardown
|
|
45
|
+
if !@buffer.nil? and @buffer.length > 0
|
|
46
|
+
@on_event.call @buffer
|
|
47
|
+
end
|
|
48
|
+
@buffer.clear
|
|
49
|
+
end
|
|
50
|
+
end # class LogStash::Codecs::CompressSpooler
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
|
|
4
|
+
class LogStash::Codecs::Dots < LogStash::Codecs::Base
|
|
5
|
+
config_name "dots"
|
|
6
|
+
milestone 1
|
|
7
|
+
|
|
8
|
+
public
|
|
9
|
+
def decode(data)
|
|
10
|
+
raise "Not implemented"
|
|
11
|
+
end # def decode
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
def encode(data)
|
|
15
|
+
@on_event.call(".")
|
|
16
|
+
end # def encode
|
|
17
|
+
|
|
18
|
+
end # class LogStash::Codecs::Dots
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "logstash/codecs/base"
|
|
2
|
+
require "logstash/codecs/line"
|
|
3
|
+
|
|
4
|
+
class LogStash::Codecs::EDN < LogStash::Codecs::Base
|
|
5
|
+
config_name "edn"
|
|
6
|
+
|
|
7
|
+
milestone 1
|
|
8
|
+
|
|
9
|
+
def register
|
|
10
|
+
require "edn"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
def decode(data)
|
|
15
|
+
begin
|
|
16
|
+
yield LogStash::Event.new(EDN.read(data))
|
|
17
|
+
rescue
|
|
18
|
+
@logger.info("EDN parse failure. Falling back to plain-text", :error => e, :data => data)
|
|
19
|
+
yield LogStash::Event.new("message" => data)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
public
|
|
24
|
+
def encode(data)
|
|
25
|
+
@on_event.call(data.to_hash.to_edn)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require "logstash/codecs/base"
|
|
2
|
+
require "logstash/codecs/line"
|
|
3
|
+
|
|
4
|
+
class LogStash::Codecs::EDNLines < LogStash::Codecs::Base
|
|
5
|
+
config_name "edn_lines"
|
|
6
|
+
|
|
7
|
+
milestone 1
|
|
8
|
+
|
|
9
|
+
def register
|
|
10
|
+
require "edn"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
def initialize(params={})
|
|
15
|
+
super(params)
|
|
16
|
+
@lines = LogStash::Codecs::Line.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
public
|
|
20
|
+
def decode(data)
|
|
21
|
+
@lines.decode(data) do |event|
|
|
22
|
+
begin
|
|
23
|
+
yield LogStash::Event.new(EDN.read(event["message"]))
|
|
24
|
+
rescue => e
|
|
25
|
+
@logger.info("EDN parse failure. Falling back to plain-text", :error => e, :data => data)
|
|
26
|
+
yield LogStash::Event.new("message" => data)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
public
|
|
32
|
+
def encode(data)
|
|
33
|
+
@on_event.call(data.to_hash.to_edn + "\n")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
require "logstash/util/charset"
|
|
4
|
+
|
|
5
|
+
# This codec handles fluentd's msgpack schema.
|
|
6
|
+
#
|
|
7
|
+
# For example, you can receive logs from fluent-logger-ruby with:
|
|
8
|
+
#
|
|
9
|
+
# input {
|
|
10
|
+
# tcp {
|
|
11
|
+
# codec => fluent
|
|
12
|
+
# port => 4000
|
|
13
|
+
# }
|
|
14
|
+
# }
|
|
15
|
+
#
|
|
16
|
+
# And from your ruby code in your own application:
|
|
17
|
+
#
|
|
18
|
+
# logger = Fluent::Logger::FluentLogger.new(nil, :host => "example.log", :port => 4000)
|
|
19
|
+
# logger.post("some_tag", { "your" => "data", "here" => "yay!" })
|
|
20
|
+
#
|
|
21
|
+
# Notes:
|
|
22
|
+
#
|
|
23
|
+
# * the fluent uses a second-precision time for events, so you will never see
|
|
24
|
+
# subsecond precision on events processed by this codec.
|
|
25
|
+
#
|
|
26
|
+
class LogStash::Codecs::Fluent < LogStash::Codecs::Base
|
|
27
|
+
config_name "fluent"
|
|
28
|
+
milestone 1
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def register
|
|
32
|
+
require "msgpack"
|
|
33
|
+
@decoder = MessagePack::Unpacker.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def decode(data)
|
|
38
|
+
@decoder.feed(data)
|
|
39
|
+
@decoder.each do |tag, epochtime, map|
|
|
40
|
+
event = LogStash::Event.new(map.merge(
|
|
41
|
+
"@timestamp" => Time.at(epochtime),
|
|
42
|
+
"tags" => tag
|
|
43
|
+
))
|
|
44
|
+
yield event
|
|
45
|
+
end
|
|
46
|
+
end # def decode
|
|
47
|
+
|
|
48
|
+
public
|
|
49
|
+
def encode(event)
|
|
50
|
+
tag = event["tags"] || "log"
|
|
51
|
+
epochtime = event["@timestamp"].to_i
|
|
52
|
+
@on_event.call(MessagePack.pack([ tag, epochtime, event.to_hash ]))
|
|
53
|
+
end # def encode
|
|
54
|
+
|
|
55
|
+
end # class LogStash::Codecs::Fluent
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
require "logstash/codecs/line"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
# This codec will encode and decode Graphite formated lines.
|
|
7
|
+
class LogStash::Codecs::Graphite < LogStash::Codecs::Base
|
|
8
|
+
config_name "graphite"
|
|
9
|
+
|
|
10
|
+
milestone 2
|
|
11
|
+
|
|
12
|
+
# The character encoding used in this codec. Examples include "UTF-8" and
|
|
13
|
+
# "CP1252"
|
|
14
|
+
#
|
|
15
|
+
# JSON requires valid UTF-8 strings, but in some cases, software that
|
|
16
|
+
# emits JSON does so in another encoding (nxlog, for example). In
|
|
17
|
+
# weird cases like this, you can set the charset setting to the
|
|
18
|
+
# actual encoding of the text and logstash will convert it for you.
|
|
19
|
+
#
|
|
20
|
+
# For nxlog users, you'll want to set this to "CP1252"
|
|
21
|
+
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
|
22
|
+
|
|
23
|
+
EXCLUDE_ALWAYS = [ "@timestamp", "@version" ]
|
|
24
|
+
|
|
25
|
+
DEFAULT_METRICS_FORMAT = "*"
|
|
26
|
+
METRIC_PLACEHOLDER = "*"
|
|
27
|
+
|
|
28
|
+
# The metric(s) to use. This supports dynamic strings like %{host}
|
|
29
|
+
# for metric names and also for values. This is a hash field with key
|
|
30
|
+
# of the metric name, value of the metric value. Example:
|
|
31
|
+
#
|
|
32
|
+
# [ "%{host}/uptime", "%{uptime_1m}" ]
|
|
33
|
+
#
|
|
34
|
+
# The value will be coerced to a floating point value. Values which cannot be
|
|
35
|
+
# coerced will zero (0)
|
|
36
|
+
config :metrics, :validate => :hash, :default => {}
|
|
37
|
+
|
|
38
|
+
# Indicate that the event @fields should be treated as metrics and will be sent as is to graphite
|
|
39
|
+
config :fields_are_metrics, :validate => :boolean, :default => false
|
|
40
|
+
|
|
41
|
+
# Include only regex matched metric names
|
|
42
|
+
config :include_metrics, :validate => :array, :default => [ ".*" ]
|
|
43
|
+
|
|
44
|
+
# Exclude regex matched metric names, by default exclude unresolved %{field} strings
|
|
45
|
+
config :exclude_metrics, :validate => :array, :default => [ "%\{[^}]+\}" ]
|
|
46
|
+
|
|
47
|
+
# Defines format of the metric string. The placeholder '*' will be
|
|
48
|
+
# replaced with the name of the actual metric.
|
|
49
|
+
#
|
|
50
|
+
# metrics_format => "foo.bar.*.sum"
|
|
51
|
+
#
|
|
52
|
+
# NOTE: If no metrics_format is defined the name of the metric will be used as fallback.
|
|
53
|
+
config :metrics_format, :validate => :string, :default => DEFAULT_METRICS_FORMAT
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
public
|
|
57
|
+
def initialize(params={})
|
|
58
|
+
super(params)
|
|
59
|
+
@lines = LogStash::Codecs::Line.new
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
public
|
|
63
|
+
def decode(data)
|
|
64
|
+
@lines.decode(data) do |event|
|
|
65
|
+
name, value, time = event["message"].split(" ")
|
|
66
|
+
yield LogStash::Event.new(name => value.to_f, "@timestamp" => Time.at(time.to_i).gmtime)
|
|
67
|
+
end # @lines.decode
|
|
68
|
+
end # def decode
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
def construct_metric_name(metric)
|
|
72
|
+
if @metrics_format
|
|
73
|
+
return @metrics_format.gsub(METRIC_PLACEHOLDER, metric)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
return metric
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
public
|
|
80
|
+
def encode(event)
|
|
81
|
+
# Graphite message format: metric value timestamp\n
|
|
82
|
+
|
|
83
|
+
messages = []
|
|
84
|
+
timestamp = event.sprintf("%{+%s}")
|
|
85
|
+
|
|
86
|
+
if @fields_are_metrics
|
|
87
|
+
@logger.debug("got metrics event", :metrics => event.to_hash)
|
|
88
|
+
event.to_hash.each do |metric,value|
|
|
89
|
+
next if EXCLUDE_ALWAYS.include?(metric)
|
|
90
|
+
next unless @include_metrics.empty? || @include_metrics.any? { |regexp| metric.match(regexp) }
|
|
91
|
+
next if @exclude_metrics.any? {|regexp| metric.match(regexp)}
|
|
92
|
+
messages << "#{construct_metric_name(metric)} #{event.sprintf(value.to_s).to_f} #{timestamp}"
|
|
93
|
+
end # data.to_hash.each
|
|
94
|
+
else
|
|
95
|
+
@metrics.each do |metric, value|
|
|
96
|
+
@logger.debug("processing", :metric => metric, :value => value)
|
|
97
|
+
metric = event.sprintf(metric)
|
|
98
|
+
next unless @include_metrics.any? {|regexp| metric.match(regexp)}
|
|
99
|
+
next if @exclude_metrics.any? {|regexp| metric.match(regexp)}
|
|
100
|
+
messages << "#{construct_metric_name(event.sprintf(metric))} #{event.sprintf(value).to_f} #{timestamp}"
|
|
101
|
+
end # @metrics.each
|
|
102
|
+
end # if @fields_are_metrics
|
|
103
|
+
|
|
104
|
+
if messages.empty?
|
|
105
|
+
@logger.debug("Message is empty, not emiting anything.", :messages => messages)
|
|
106
|
+
else
|
|
107
|
+
message = messages.join("\n") + "\n"
|
|
108
|
+
@logger.debug("Emiting carbon messages", :messages => messages)
|
|
109
|
+
|
|
110
|
+
@on_event.call(message)
|
|
111
|
+
end # if messages.empty?
|
|
112
|
+
end # def encode
|
|
113
|
+
|
|
114
|
+
end # class LogStash::Codecs::JSON
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
require "logstash/codecs/line"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
# The codec should be used to decode full json messages.
|
|
7
|
+
# If you are streaming JSON messages delimited by '\n' then
|
|
8
|
+
# see the json_lines codec.
|
|
9
|
+
# Encoding will result in a single json string.
|
|
10
|
+
class LogStash::Codecs::JSON < LogStash::Codecs::Base
|
|
11
|
+
config_name "json"
|
|
12
|
+
|
|
13
|
+
milestone 3
|
|
14
|
+
|
|
15
|
+
# The character encoding used in this codec. Examples include "UTF-8" and
|
|
16
|
+
# "CP1252"
|
|
17
|
+
#
|
|
18
|
+
# JSON requires valid UTF-8 strings, but in some cases, software that
|
|
19
|
+
# emits JSON does so in another encoding (nxlog, for example). In
|
|
20
|
+
# weird cases like this, you can set the charset setting to the
|
|
21
|
+
# actual encoding of the text and logstash will convert it for you.
|
|
22
|
+
#
|
|
23
|
+
# For nxlog users, you'll want to set this to "CP1252"
|
|
24
|
+
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
|
25
|
+
|
|
26
|
+
public
|
|
27
|
+
def decode(data)
|
|
28
|
+
begin
|
|
29
|
+
yield LogStash::Event.new(JSON.parse(data))
|
|
30
|
+
rescue JSON::ParserError => e
|
|
31
|
+
@logger.info("JSON parse failure. Falling back to plain-text", :error => e, :data => data)
|
|
32
|
+
yield LogStash::Event.new("message" => data)
|
|
33
|
+
end
|
|
34
|
+
end # def decode
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def encode(data)
|
|
38
|
+
@on_event.call(data.to_json)
|
|
39
|
+
end # def encode
|
|
40
|
+
|
|
41
|
+
end # class LogStash::Codecs::JSON
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/codecs/base"
|
|
3
|
+
require "logstash/codecs/line"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
# This codec will decode streamed JSON that is newline delimited.
|
|
7
|
+
# For decoding JSON payload in the redis input for example, use the json codec instead.
|
|
8
|
+
# Encoding will emit a single JSON string ending in a '\n'
|
|
9
|
+
class LogStash::Codecs::JSONLines < LogStash::Codecs::Base
|
|
10
|
+
config_name "json_lines"
|
|
11
|
+
|
|
12
|
+
milestone 3
|
|
13
|
+
|
|
14
|
+
# The character encoding used in this codec. Examples include "UTF-8" and
|
|
15
|
+
# "CP1252"
|
|
16
|
+
#
|
|
17
|
+
# JSON requires valid UTF-8 strings, but in some cases, software that
|
|
18
|
+
# emits JSON does so in another encoding (nxlog, for example). In
|
|
19
|
+
# weird cases like this, you can set the charset setting to the
|
|
20
|
+
# actual encoding of the text and logstash will convert it for you.
|
|
21
|
+
#
|
|
22
|
+
# For nxlog users, you'll want to set this to "CP1252"
|
|
23
|
+
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
|
24
|
+
|
|
25
|
+
public
|
|
26
|
+
def initialize(params={})
|
|
27
|
+
super(params)
|
|
28
|
+
@lines = LogStash::Codecs::Line.new
|
|
29
|
+
@lines.charset = @charset
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
public
|
|
33
|
+
def decode(data)
|
|
34
|
+
|
|
35
|
+
@lines.decode(data) do |event|
|
|
36
|
+
begin
|
|
37
|
+
yield LogStash::Event.new(JSON.parse(event["message"]))
|
|
38
|
+
rescue JSON::ParserError => e
|
|
39
|
+
@logger.info("JSON parse failure. Falling back to plain-text", :error => e, :data => data)
|
|
40
|
+
yield LogStash::Event.new("message" => data)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end # def decode
|
|
44
|
+
|
|
45
|
+
public
|
|
46
|
+
def encode(data)
|
|
47
|
+
# Tack on a \n for now because previously most of logstash's JSON
|
|
48
|
+
# outputs emitted one per line, and whitespace is OK in json.
|
|
49
|
+
@on_event.call(data.to_json + "\n")
|
|
50
|
+
end # def encode
|
|
51
|
+
|
|
52
|
+
end # class LogStash::Codecs::JSON
|