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,124 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/plugin_mixins/aws_config"
|
|
5
|
+
|
|
6
|
+
# SNS output.
|
|
7
|
+
#
|
|
8
|
+
# Send events to Amazon's Simple Notification Service, a hosted pub/sub
|
|
9
|
+
# framework. It supports subscribers of type email, HTTP/S, SMS, and SQS.
|
|
10
|
+
#
|
|
11
|
+
# For further documentation about the service see:
|
|
12
|
+
#
|
|
13
|
+
# http://docs.amazonwebservices.com/sns/latest/api/
|
|
14
|
+
#
|
|
15
|
+
# This plugin looks for the following fields on events it receives:
|
|
16
|
+
#
|
|
17
|
+
# * `sns` - If no ARN is found in the configuration file, this will be used as
|
|
18
|
+
# the ARN to publish.
|
|
19
|
+
# * `sns_subject` - The subject line that should be used.
|
|
20
|
+
# Optional. The "%{host}" will be used if not present and truncated at
|
|
21
|
+
# `MAX_SUBJECT_SIZE_IN_CHARACTERS`.
|
|
22
|
+
# * `sns_message` - The message that should be
|
|
23
|
+
# sent. Optional. The event serialzed as JSON will be used if not present and
|
|
24
|
+
# with the @message truncated so that the length of the JSON fits in
|
|
25
|
+
# `MAX_MESSAGE_SIZE_IN_BYTES`.
|
|
26
|
+
#
|
|
27
|
+
class LogStash::Outputs::Sns < LogStash::Outputs::Base
|
|
28
|
+
include LogStash::PluginMixins::AwsConfig
|
|
29
|
+
|
|
30
|
+
MAX_SUBJECT_SIZE_IN_CHARACTERS = 100
|
|
31
|
+
MAX_MESSAGE_SIZE_IN_BYTES = 32768
|
|
32
|
+
|
|
33
|
+
config_name "sns"
|
|
34
|
+
milestone 1
|
|
35
|
+
|
|
36
|
+
# Message format. Defaults to plain text.
|
|
37
|
+
config :format, :validate => [ "json", "plain" ], :default => "plain"
|
|
38
|
+
|
|
39
|
+
# SNS topic ARN.
|
|
40
|
+
config :arn, :validate => :string
|
|
41
|
+
|
|
42
|
+
# When an ARN for an SNS topic is specified here, the message
|
|
43
|
+
# "Logstash successfully booted" will be sent to it when this plugin
|
|
44
|
+
# is registered.
|
|
45
|
+
#
|
|
46
|
+
# Example: arn:aws:sns:us-east-1:770975001275:logstash-testing
|
|
47
|
+
#
|
|
48
|
+
config :publish_boot_message_arn, :validate => :string
|
|
49
|
+
|
|
50
|
+
public
|
|
51
|
+
def aws_service_endpoint(region)
|
|
52
|
+
return {
|
|
53
|
+
:sns_endpoint => "sns.#{region}.amazonaws.com"
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
public
|
|
58
|
+
def register
|
|
59
|
+
require "aws-sdk"
|
|
60
|
+
|
|
61
|
+
@sns = AWS::SNS.new(aws_options_hash)
|
|
62
|
+
|
|
63
|
+
# Try to publish a "Logstash booted" message to the ARN provided to
|
|
64
|
+
# cause an error ASAP if the credentials are bad.
|
|
65
|
+
if @publish_boot_message_arn
|
|
66
|
+
@sns.topics[@publish_boot_message_arn].publish("Logstash successfully booted", :subject => "Logstash booted")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
public
|
|
71
|
+
def receive(event)
|
|
72
|
+
return unless output?(event)
|
|
73
|
+
|
|
74
|
+
arn = Array(event["sns"]).first || @arn
|
|
75
|
+
|
|
76
|
+
raise "An SNS ARN required." unless arn
|
|
77
|
+
|
|
78
|
+
message = Array(event["sns_message"]).first
|
|
79
|
+
subject = Array(event["sns_subject"]).first || event.source
|
|
80
|
+
|
|
81
|
+
# Ensure message doesn't exceed the maximum size.
|
|
82
|
+
if message
|
|
83
|
+
# TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
|
|
84
|
+
message = message.slice(0, MAX_MESSAGE_SIZE_IN_BYTES)
|
|
85
|
+
else
|
|
86
|
+
if @format == "plain"
|
|
87
|
+
message = self.class.format_message(event)
|
|
88
|
+
else
|
|
89
|
+
message = self.class.json_message(event)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Log event.
|
|
94
|
+
@logger.debug("Sending event to SNS topic [#{arn}] with subject [#{subject}] and message:")
|
|
95
|
+
message.split("\n").each { |line| @logger.debug(line) }
|
|
96
|
+
|
|
97
|
+
# Publish the message.
|
|
98
|
+
@sns.topics[arn].publish(message, :subject => subject.slice(0, MAX_SUBJECT_SIZE_IN_CHARACTERS))
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.json_message(event)
|
|
102
|
+
json = event.to_json
|
|
103
|
+
json_size = json.bytesize
|
|
104
|
+
|
|
105
|
+
# Truncate only the message if the JSON structure is too large.
|
|
106
|
+
if json_size > MAX_MESSAGE_SIZE_IN_BYTES
|
|
107
|
+
# TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
|
|
108
|
+
event["message"] = event["message"].slice(0, (event["message"].bytesize - (json_size - MAX_MESSAGE_SIZE_IN_BYTES)))
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
event.to_json
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def self.format_message(event)
|
|
115
|
+
message = "Date: #{event["@timestamp"]}\n"
|
|
116
|
+
message << "Source: #{event["source"]}\n"
|
|
117
|
+
message << "Tags: #{event["tags"].join(', ')}\n"
|
|
118
|
+
message << "Fields: #{event.to_hash.inspect}\n"
|
|
119
|
+
message << "Message: #{event["message"]}"
|
|
120
|
+
|
|
121
|
+
# TODO: Utilize `byteslice` in JRuby 1.7: http://jira.codehaus.org/browse/JRUBY-5547
|
|
122
|
+
message.slice(0, MAX_MESSAGE_SIZE_IN_BYTES)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "stud/buffer"
|
|
5
|
+
require "rubygems"
|
|
6
|
+
require "uuidtools"
|
|
7
|
+
|
|
8
|
+
# This output lets you index&store your logs in Solr. If you want to get
|
|
9
|
+
# started quickly you should use version 4.4 or above in schemaless mode,
|
|
10
|
+
# which will try and guess your fields automatically. To turn that on,
|
|
11
|
+
# you can use the example included in the Solr archive:
|
|
12
|
+
#
|
|
13
|
+
# tar zxf solr-4.4.0.tgz
|
|
14
|
+
# cd example
|
|
15
|
+
# mv solr solr_ #back up the existing sample conf
|
|
16
|
+
# cp -r example-schemaless/solr/ . #put the schemaless conf in place
|
|
17
|
+
# java -jar start.jar #start Solr
|
|
18
|
+
#
|
|
19
|
+
# You can learn more about Solr at <https://lucene.apache.org/solr/>
|
|
20
|
+
|
|
21
|
+
class LogStash::Outputs::SolrHTTP < LogStash::Outputs::Base
|
|
22
|
+
include Stud::Buffer
|
|
23
|
+
|
|
24
|
+
config_name "solr_http"
|
|
25
|
+
|
|
26
|
+
milestone 1
|
|
27
|
+
|
|
28
|
+
# URL used to connect to Solr
|
|
29
|
+
config :solr_url, :validate => :string, :default => "http://localhost:8983/solr"
|
|
30
|
+
|
|
31
|
+
# Number of events to queue up before writing to Solr
|
|
32
|
+
config :flush_size, :validate => :number, :default => 100
|
|
33
|
+
|
|
34
|
+
# Amount of time since the last flush before a flush is done even if
|
|
35
|
+
# the number of buffered events is smaller than flush_size
|
|
36
|
+
config :idle_flush_time, :validate => :number, :default => 1
|
|
37
|
+
|
|
38
|
+
# Solr document ID for events. You'd typically have a variable here, like
|
|
39
|
+
# '%{foo}' so you can assign your own IDs
|
|
40
|
+
config :document_id, :validate => :string, :default => nil
|
|
41
|
+
|
|
42
|
+
public
|
|
43
|
+
def register
|
|
44
|
+
require "rsolr"
|
|
45
|
+
@solr = RSolr.connect :url => @solr_url
|
|
46
|
+
buffer_initialize(
|
|
47
|
+
:max_items => @flush_size,
|
|
48
|
+
:max_interval => @idle_flush_time,
|
|
49
|
+
:logger => @logger
|
|
50
|
+
)
|
|
51
|
+
end #def register
|
|
52
|
+
|
|
53
|
+
public
|
|
54
|
+
def receive(event)
|
|
55
|
+
return unless output?(event)
|
|
56
|
+
buffer_receive(event)
|
|
57
|
+
end #def receive
|
|
58
|
+
|
|
59
|
+
public
|
|
60
|
+
def flush(events, teardown=false)
|
|
61
|
+
documents = [] #this is the array of hashes that we push to Solr as documents
|
|
62
|
+
|
|
63
|
+
events.each do |event|
|
|
64
|
+
document = event.to_hash()
|
|
65
|
+
document["@timestamp"] = document["@timestamp"].iso8601 #make the timestamp ISO
|
|
66
|
+
if @document_id.nil?
|
|
67
|
+
document ["id"] = UUIDTools::UUID.random_create #add a unique ID
|
|
68
|
+
else
|
|
69
|
+
document ["id"] = event.sprintf(@document_id) #or use the one provided
|
|
70
|
+
end
|
|
71
|
+
documents.push(document)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
@solr.add(documents)
|
|
75
|
+
rescue Exception => e
|
|
76
|
+
@logger.warn("An error occurred while indexing: #{e.message}")
|
|
77
|
+
end #def flush
|
|
78
|
+
end #class LogStash::Outputs::SolrHTTP
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/plugin_mixins/aws_config"
|
|
5
|
+
require "stud/buffer"
|
|
6
|
+
require "digest/sha2"
|
|
7
|
+
|
|
8
|
+
# Push events to an Amazon Web Services Simple Queue Service (SQS) queue.
|
|
9
|
+
#
|
|
10
|
+
# SQS is a simple, scalable queue system that is part of the
|
|
11
|
+
# Amazon Web Services suite of tools.
|
|
12
|
+
#
|
|
13
|
+
# Although SQS is similar to other queuing systems like AMQP, it
|
|
14
|
+
# uses a custom API and requires that you have an AWS account.
|
|
15
|
+
# See http://aws.amazon.com/sqs/ for more details on how SQS works,
|
|
16
|
+
# what the pricing schedule looks like and how to setup a queue.
|
|
17
|
+
#
|
|
18
|
+
# To use this plugin, you *must*:
|
|
19
|
+
#
|
|
20
|
+
# * Have an AWS account
|
|
21
|
+
# * Setup an SQS queue
|
|
22
|
+
# * Create an identify that has access to publish messages to the queue.
|
|
23
|
+
#
|
|
24
|
+
# The "consumer" identity must have the following permissions on the queue:
|
|
25
|
+
#
|
|
26
|
+
# * sqs:ChangeMessageVisibility
|
|
27
|
+
# * sqs:ChangeMessageVisibilityBatch
|
|
28
|
+
# * sqs:GetQueueAttributes
|
|
29
|
+
# * sqs:GetQueueUrl
|
|
30
|
+
# * sqs:ListQueues
|
|
31
|
+
# * sqs:SendMessage
|
|
32
|
+
# * sqs:SendMessageBatch
|
|
33
|
+
#
|
|
34
|
+
# Typically, you should setup an IAM policy, create a user and apply the IAM policy to the user.
|
|
35
|
+
# A sample policy is as follows:
|
|
36
|
+
#
|
|
37
|
+
# {
|
|
38
|
+
# "Statement": [
|
|
39
|
+
# {
|
|
40
|
+
# "Sid": "Stmt1347986764948",
|
|
41
|
+
# "Action": [
|
|
42
|
+
# "sqs:ChangeMessageVisibility",
|
|
43
|
+
# "sqs:ChangeMessageVisibilityBatch",
|
|
44
|
+
# "sqs:DeleteMessage",
|
|
45
|
+
# "sqs:DeleteMessageBatch",
|
|
46
|
+
# "sqs:GetQueueAttributes",
|
|
47
|
+
# "sqs:GetQueueUrl",
|
|
48
|
+
# "sqs:ListQueues",
|
|
49
|
+
# "sqs:ReceiveMessage"
|
|
50
|
+
# ],
|
|
51
|
+
# "Effect": "Allow",
|
|
52
|
+
# "Resource": [
|
|
53
|
+
# "arn:aws:sqs:us-east-1:200850199751:Logstash"
|
|
54
|
+
# ]
|
|
55
|
+
# }
|
|
56
|
+
# ]
|
|
57
|
+
# }
|
|
58
|
+
#
|
|
59
|
+
# See http://aws.amazon.com/iam/ for more details on setting up AWS identities.
|
|
60
|
+
#
|
|
61
|
+
class LogStash::Outputs::SQS < LogStash::Outputs::Base
|
|
62
|
+
include LogStash::PluginMixins::AwsConfig
|
|
63
|
+
include Stud::Buffer
|
|
64
|
+
|
|
65
|
+
config_name "sqs"
|
|
66
|
+
milestone 1
|
|
67
|
+
|
|
68
|
+
# Name of SQS queue to push messages into. Note that this is just the name of the queue, not the URL or ARN.
|
|
69
|
+
config :queue, :validate => :string, :required => true
|
|
70
|
+
|
|
71
|
+
# Set to true if you want send messages to SQS in batches with batch_send
|
|
72
|
+
# from the amazon sdk
|
|
73
|
+
config :batch, :validate => :boolean, :default => true
|
|
74
|
+
|
|
75
|
+
# If batch is set to true, the number of events we queue up for a batch_send.
|
|
76
|
+
config :batch_events, :validate => :number, :default => 10
|
|
77
|
+
|
|
78
|
+
# If batch is set to true, the maximum amount of time between batch_send commands when there are pending events to flush.
|
|
79
|
+
config :batch_timeout, :validate => :number, :default => 5
|
|
80
|
+
|
|
81
|
+
public
|
|
82
|
+
def aws_service_endpoint(region)
|
|
83
|
+
return {
|
|
84
|
+
:sqs_endpoint => "sqs.#{region}.amazonaws.com"
|
|
85
|
+
}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
public
|
|
89
|
+
def register
|
|
90
|
+
require "aws-sdk"
|
|
91
|
+
|
|
92
|
+
@sqs = AWS::SQS.new(aws_options_hash)
|
|
93
|
+
|
|
94
|
+
if @batch
|
|
95
|
+
if @batch_events > 10
|
|
96
|
+
raise RuntimeError.new(
|
|
97
|
+
"AWS only allows a batch_events parameter of 10 or less"
|
|
98
|
+
)
|
|
99
|
+
elsif @batch_events <= 1
|
|
100
|
+
raise RuntimeError.new(
|
|
101
|
+
"batch_events parameter must be greater than 1 (or its not a batch)"
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
buffer_initialize(
|
|
105
|
+
:max_items => @batch_events,
|
|
106
|
+
:max_interval => @batch_timeout,
|
|
107
|
+
:logger => @logger
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
begin
|
|
112
|
+
@logger.debug("Connecting to AWS SQS queue '#{@queue}'...")
|
|
113
|
+
@sqs_queue = @sqs.queues.named(@queue)
|
|
114
|
+
rescue Exception => e
|
|
115
|
+
@logger.error("Unable to access SQS queue '#{@queue}': #{e.to_s}")
|
|
116
|
+
end # begin/rescue
|
|
117
|
+
|
|
118
|
+
@logger.info("Connected to AWS SQS queue '#{@queue}' successfully.")
|
|
119
|
+
end # def register
|
|
120
|
+
|
|
121
|
+
public
|
|
122
|
+
def receive(event)
|
|
123
|
+
if @batch
|
|
124
|
+
buffer_receive(event.to_json)
|
|
125
|
+
return
|
|
126
|
+
end
|
|
127
|
+
@sqs_queue.send_message(event.to_json)
|
|
128
|
+
end # def receive
|
|
129
|
+
|
|
130
|
+
# called from Stud::Buffer#buffer_flush when there are events to flush
|
|
131
|
+
def flush(events, teardown=false)
|
|
132
|
+
@sqs_queue.batch_send(events)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
public
|
|
136
|
+
def teardown
|
|
137
|
+
buffer_flush(:final => true)
|
|
138
|
+
@sqs_queue = nil
|
|
139
|
+
finished
|
|
140
|
+
end # def teardown
|
|
141
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# statsd is a server for aggregating counters and other metrics to ship to
|
|
6
|
+
# graphite.
|
|
7
|
+
#
|
|
8
|
+
# The most basic coverage of this plugin is that the 'namespace', 'sender', and
|
|
9
|
+
# 'metric' names are combined into the full metric path like so:
|
|
10
|
+
#
|
|
11
|
+
# namespace.sender.metric
|
|
12
|
+
#
|
|
13
|
+
# The general idea is that you send statsd count or latency data and every few
|
|
14
|
+
# seconds it will emit the aggregated values to graphite (aggregates like
|
|
15
|
+
# average, max, stddev, etc)
|
|
16
|
+
#
|
|
17
|
+
# You can learn about statsd here:
|
|
18
|
+
#
|
|
19
|
+
# * <http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/>
|
|
20
|
+
# * <https://github.com/etsy/statsd>
|
|
21
|
+
#
|
|
22
|
+
# A simple example usage of this is to count HTTP hits by response code; to learn
|
|
23
|
+
# more about that, check out the
|
|
24
|
+
# [log metrics tutorial](../tutorials/metrics-from-logs)
|
|
25
|
+
class LogStash::Outputs::Statsd < LogStash::Outputs::Base
|
|
26
|
+
## Regex stolen from statsd code
|
|
27
|
+
RESERVED_CHARACTERS_REGEX = /[\:\|\@]/
|
|
28
|
+
config_name "statsd"
|
|
29
|
+
milestone 2
|
|
30
|
+
|
|
31
|
+
# The address of the Statsd server.
|
|
32
|
+
config :host, :validate => :string, :default => "localhost"
|
|
33
|
+
|
|
34
|
+
# The port to connect to on your statsd server.
|
|
35
|
+
config :port, :validate => :number, :default => 8125
|
|
36
|
+
|
|
37
|
+
# The statsd namespace to use for this metric
|
|
38
|
+
config :namespace, :validate => :string, :default => "logstash"
|
|
39
|
+
|
|
40
|
+
# The name of the sender.
|
|
41
|
+
# Dots will be replaced with underscores
|
|
42
|
+
config :sender, :validate => :string, :default => "%{host}"
|
|
43
|
+
|
|
44
|
+
# An increment metric. metric names as array.
|
|
45
|
+
config :increment, :validate => :array, :default => []
|
|
46
|
+
|
|
47
|
+
# A decrement metric. metric names as array.
|
|
48
|
+
config :decrement, :validate => :array, :default => []
|
|
49
|
+
|
|
50
|
+
# A timing metric. metric_name => duration as hash
|
|
51
|
+
config :timing, :validate => :hash, :default => {}
|
|
52
|
+
|
|
53
|
+
# A count metric. metric_name => count as hash
|
|
54
|
+
config :count, :validate => :hash, :default => {}
|
|
55
|
+
|
|
56
|
+
# A set metric. metric_name => string to append as hash
|
|
57
|
+
config :set, :validate => :hash, :default => {}
|
|
58
|
+
|
|
59
|
+
# A gauge metric. metric_name => gauge as hash
|
|
60
|
+
config :gauge, :validate => :hash, :default => {}
|
|
61
|
+
|
|
62
|
+
# The sample rate for the metric
|
|
63
|
+
config :sample_rate, :validate => :number, :default => 1
|
|
64
|
+
|
|
65
|
+
# The final metric sent to statsd will look like the following (assuming defaults)
|
|
66
|
+
# logstash.sender.file_name
|
|
67
|
+
#
|
|
68
|
+
# Enable debugging output?
|
|
69
|
+
config :debug, :validate => :boolean, :default => false
|
|
70
|
+
|
|
71
|
+
public
|
|
72
|
+
def register
|
|
73
|
+
require "statsd"
|
|
74
|
+
@client = Statsd.new(@host, @port)
|
|
75
|
+
end # def register
|
|
76
|
+
|
|
77
|
+
public
|
|
78
|
+
def receive(event)
|
|
79
|
+
return unless output?(event)
|
|
80
|
+
|
|
81
|
+
@client.namespace = event.sprintf(@namespace) if not @namespace.empty?
|
|
82
|
+
@logger.debug? and @logger.debug("Original sender: #{@sender}")
|
|
83
|
+
sender = event.sprintf(@sender)
|
|
84
|
+
@logger.debug? and @logger.debug("Munged sender: #{sender}")
|
|
85
|
+
@logger.debug? and @logger.debug("Event: #{event}")
|
|
86
|
+
@increment.each do |metric|
|
|
87
|
+
@client.increment(build_stat(event.sprintf(metric), sender), @sample_rate)
|
|
88
|
+
end
|
|
89
|
+
@decrement.each do |metric|
|
|
90
|
+
@client.decrement(build_stat(event.sprintf(metric), sender), @sample_rate)
|
|
91
|
+
end
|
|
92
|
+
@count.each do |metric, val|
|
|
93
|
+
@client.count(build_stat(event.sprintf(metric), sender),
|
|
94
|
+
event.sprintf(val).to_f, @sample_rate)
|
|
95
|
+
end
|
|
96
|
+
@timing.each do |metric, val|
|
|
97
|
+
@client.timing(build_stat(event.sprintf(metric), sender),
|
|
98
|
+
event.sprintf(val).to_f, @sample_rate)
|
|
99
|
+
end
|
|
100
|
+
@set.each do |metric, val|
|
|
101
|
+
@client.set(build_stat(event.sprintf(metric), sender),
|
|
102
|
+
event.sprintf(val), @sample_rate)
|
|
103
|
+
end
|
|
104
|
+
@gauge.each do |metric, val|
|
|
105
|
+
@client.gauge(build_stat(event.sprintf(metric), sender),
|
|
106
|
+
event.sprintf(val).to_f, @sample_rate)
|
|
107
|
+
end
|
|
108
|
+
end # def receive
|
|
109
|
+
|
|
110
|
+
def build_stat(metric, sender=@sender)
|
|
111
|
+
sender = sender.gsub('::','.').gsub(RESERVED_CHARACTERS_REGEX, '_').gsub(".", "_")
|
|
112
|
+
metric = metric.gsub('::','.').gsub(RESERVED_CHARACTERS_REGEX, '_')
|
|
113
|
+
@logger.debug? and @logger.debug("Formatted value", :sender => sender, :metric => metric)
|
|
114
|
+
return "#{sender}.#{metric}"
|
|
115
|
+
end
|
|
116
|
+
end # class LogStash::Outputs::Statsd
|