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,87 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Read snmp trap messages as events
|
|
6
|
+
#
|
|
7
|
+
# Resulting @message looks like :
|
|
8
|
+
# #<SNMP::SNMPv1_Trap:0x6f1a7a4 @varbind_list=[#<SNMP::VarBind:0x2d7bcd8f @value="teststring",
|
|
9
|
+
# @name=[1.11.12.13.14.15]>], @timestamp=#<SNMP::TimeTicks:0x1af47e9d @value=55>, @generic_trap=6,
|
|
10
|
+
# @enterprise=[1.2.3.4.5.6], @source_ip="127.0.0.1", @agent_addr=#<SNMP::IpAddress:0x29a4833e @value="\xC0\xC1\xC2\xC3">,
|
|
11
|
+
# @specific_trap=99>
|
|
12
|
+
#
|
|
13
|
+
|
|
14
|
+
class LogStash::Inputs::Snmptrap < LogStash::Inputs::Base
|
|
15
|
+
config_name "snmptrap"
|
|
16
|
+
milestone 1
|
|
17
|
+
|
|
18
|
+
# The address to listen on
|
|
19
|
+
config :host, :validate => :string, :default => "0.0.0.0"
|
|
20
|
+
|
|
21
|
+
# The port to listen on. Remember that ports less than 1024 (privileged
|
|
22
|
+
# ports) may require root to use. hence the default of 1062.
|
|
23
|
+
config :port, :validate => :number, :default => 1062
|
|
24
|
+
|
|
25
|
+
# SNMP Community String to listen for.
|
|
26
|
+
config :community, :validate => :string, :default => "public"
|
|
27
|
+
|
|
28
|
+
# directory of YAML MIB maps (same format ruby-snmp uses)
|
|
29
|
+
config :yamlmibdir, :validate => :string
|
|
30
|
+
|
|
31
|
+
def initialize(*args)
|
|
32
|
+
super(*args)
|
|
33
|
+
end # def initialize
|
|
34
|
+
|
|
35
|
+
public
|
|
36
|
+
def register
|
|
37
|
+
require "snmp"
|
|
38
|
+
@snmptrap = nil
|
|
39
|
+
if @yamlmibdir
|
|
40
|
+
@logger.info("checking #{@yamlmibdir} for MIBs")
|
|
41
|
+
Dir["#{@yamlmibdir}/*.yaml"].each do |yamlfile|
|
|
42
|
+
mib_name = File.basename(yamlfile, ".*")
|
|
43
|
+
@yaml_mibs ||= []
|
|
44
|
+
@yaml_mibs << mib_name
|
|
45
|
+
end
|
|
46
|
+
@logger.info("found MIBs: #{@yaml_mibs.join(',')}") if @yaml_mibs
|
|
47
|
+
end
|
|
48
|
+
end # def register
|
|
49
|
+
|
|
50
|
+
public
|
|
51
|
+
def run(output_queue)
|
|
52
|
+
begin
|
|
53
|
+
# snmp trap server
|
|
54
|
+
snmptrap_listener(output_queue)
|
|
55
|
+
rescue => e
|
|
56
|
+
@logger.warn("SNMP Trap listener died", :exception => e, :backtrace => e.backtrace)
|
|
57
|
+
sleep(5)
|
|
58
|
+
retry
|
|
59
|
+
end # begin
|
|
60
|
+
end # def run
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
def snmptrap_listener(output_queue)
|
|
64
|
+
traplistener_opts = {:Port => @port, :Community => @community, :Host => @host}
|
|
65
|
+
if !@yaml_mibs.empty?
|
|
66
|
+
traplistener_opts.merge!({:MibDir => @yamlmibdir, :MibModules => @yaml_mibs})
|
|
67
|
+
end
|
|
68
|
+
@logger.info("It's a Trap!", traplistener_opts.dup)
|
|
69
|
+
@snmptrap = SNMP::TrapListener.new(traplistener_opts)
|
|
70
|
+
|
|
71
|
+
@snmptrap.on_trap_default do |trap|
|
|
72
|
+
begin
|
|
73
|
+
event = LogStash::Event.new("message" => trap.inspect, "host" => trap.source_ip)
|
|
74
|
+
decorate(event)
|
|
75
|
+
trap.each_varbind do |vb|
|
|
76
|
+
event[vb.name.to_s] = vb.value.to_s
|
|
77
|
+
end
|
|
78
|
+
@logger.debug("SNMP Trap received: ", :trap_object => trap.inspect)
|
|
79
|
+
output_queue << event
|
|
80
|
+
rescue => event
|
|
81
|
+
@logger.error("Failed to create event", :trap_object => trap.inspect)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
@snmptrap.join
|
|
85
|
+
end # def snmptrap_listener
|
|
86
|
+
|
|
87
|
+
end # class LogStash::Inputs::Snmptrap
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Read rows from an sqlite database.
|
|
7
|
+
#
|
|
8
|
+
# This is most useful in cases where you are logging directly to a table.
|
|
9
|
+
# Any tables being watched must have an 'id' column that is monotonically
|
|
10
|
+
# increasing.
|
|
11
|
+
#
|
|
12
|
+
# All tables are read by default except:
|
|
13
|
+
# * ones matching 'sqlite_%' - these are internal/adminstrative tables for sqlite
|
|
14
|
+
# * 'since_table' - this is used by this plugin to track state.
|
|
15
|
+
#
|
|
16
|
+
# ## Example
|
|
17
|
+
#
|
|
18
|
+
# % sqlite /tmp/example.db
|
|
19
|
+
# sqlite> CREATE TABLE weblogs (
|
|
20
|
+
# id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
+
# ip STRING,
|
|
22
|
+
# request STRING,
|
|
23
|
+
# response INTEGER);
|
|
24
|
+
# sqlite> INSERT INTO weblogs (ip, request, response)
|
|
25
|
+
# VALUES ("1.2.3.4", "/index.html", 200);
|
|
26
|
+
#
|
|
27
|
+
# Then with this logstash config:
|
|
28
|
+
#
|
|
29
|
+
# input {
|
|
30
|
+
# sqlite {
|
|
31
|
+
# path => "/tmp/example.db"
|
|
32
|
+
# type => weblogs
|
|
33
|
+
# }
|
|
34
|
+
# }
|
|
35
|
+
# output {
|
|
36
|
+
# stdout {
|
|
37
|
+
# debug => true
|
|
38
|
+
# }
|
|
39
|
+
# }
|
|
40
|
+
#
|
|
41
|
+
# Sample output:
|
|
42
|
+
#
|
|
43
|
+
# {
|
|
44
|
+
# "@source" => "sqlite://sadness/tmp/x.db",
|
|
45
|
+
# "@tags" => [],
|
|
46
|
+
# "@fields" => {
|
|
47
|
+
# "ip" => "1.2.3.4",
|
|
48
|
+
# "request" => "/index.html",
|
|
49
|
+
# "response" => 200
|
|
50
|
+
# },
|
|
51
|
+
# "@timestamp" => "2013-05-29T06:16:30.850Z",
|
|
52
|
+
# "@source_host" => "sadness",
|
|
53
|
+
# "@source_path" => "/tmp/x.db",
|
|
54
|
+
# "@message" => "",
|
|
55
|
+
# "@type" => "foo"
|
|
56
|
+
# }
|
|
57
|
+
#
|
|
58
|
+
class LogStash::Inputs::Sqlite < LogStash::Inputs::Base
|
|
59
|
+
config_name "sqlite"
|
|
60
|
+
milestone 1
|
|
61
|
+
|
|
62
|
+
# The path to the sqlite database file.
|
|
63
|
+
config :path, :validate => :string, :required => true
|
|
64
|
+
|
|
65
|
+
# Any tables to exclude by name.
|
|
66
|
+
# By default all tables are followed.
|
|
67
|
+
config :exclude_tables, :validate => :array, :default => []
|
|
68
|
+
|
|
69
|
+
# How many rows to fetch at a time from each SELECT call.
|
|
70
|
+
config :batch, :validate => :number, :default => 5
|
|
71
|
+
|
|
72
|
+
SINCE_TABLE = :since_table
|
|
73
|
+
|
|
74
|
+
public
|
|
75
|
+
def init_placeholder_table(db)
|
|
76
|
+
begin
|
|
77
|
+
db.create_table SINCE_TABLE do
|
|
78
|
+
String :table
|
|
79
|
+
Int :place
|
|
80
|
+
end
|
|
81
|
+
rescue
|
|
82
|
+
@logger.debug("since tables already exists")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
public
|
|
87
|
+
def get_placeholder(db, table)
|
|
88
|
+
since = db[SINCE_TABLE]
|
|
89
|
+
x = since.where(:table => "#{table}")
|
|
90
|
+
if x[:place].nil?
|
|
91
|
+
init_placeholder(db, table)
|
|
92
|
+
return 0
|
|
93
|
+
else
|
|
94
|
+
@logger.debug("placeholder already exists, it is #{x[:place]}")
|
|
95
|
+
return x[:place][:place]
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
public
|
|
100
|
+
def init_placeholder(db, table)
|
|
101
|
+
@logger.debug("init placeholder for #{table}")
|
|
102
|
+
since = db[SINCE_TABLE]
|
|
103
|
+
since.insert(:table => table, :place => 0)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
public
|
|
107
|
+
def update_placeholder(db, table, place)
|
|
108
|
+
@logger.debug("set placeholder to #{place}")
|
|
109
|
+
since = db[SINCE_TABLE]
|
|
110
|
+
since.where(:table => table).update(:place => place)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
public
|
|
114
|
+
def get_all_tables(db)
|
|
115
|
+
return db["SELECT * FROM sqlite_master WHERE type = 'table' AND tbl_name != '#{SINCE_TABLE}' AND tbl_name NOT LIKE 'sqlite_%'"].map { |t| t[:name] }.select { |n| !@exclude_tables.include?(n) }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
public
|
|
119
|
+
def get_n_rows_from_table(db, table, offset, limit)
|
|
120
|
+
dataset = db["SELECT * FROM #{table}"]
|
|
121
|
+
return db["SELECT * FROM #{table} WHERE (id > #{offset}) ORDER BY 'id' LIMIT #{limit}"].map { |row| row }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
public
|
|
125
|
+
def register
|
|
126
|
+
require "sequel"
|
|
127
|
+
require "jdbc/sqlite3"
|
|
128
|
+
@host = Socket.gethostname
|
|
129
|
+
@logger.info("Registering sqlite input", :database => @path)
|
|
130
|
+
@db = Sequel.connect("jdbc:sqlite:#{@path}")
|
|
131
|
+
@tables = get_all_tables(@db)
|
|
132
|
+
@table_data = {}
|
|
133
|
+
@tables.each do |table|
|
|
134
|
+
init_placeholder_table(@db)
|
|
135
|
+
last_place = get_placeholder(@db, table)
|
|
136
|
+
@table_data[table] = { :name => table, :place => last_place }
|
|
137
|
+
end
|
|
138
|
+
end # def register
|
|
139
|
+
|
|
140
|
+
public
|
|
141
|
+
def run(queue)
|
|
142
|
+
sleep_min = 0.01
|
|
143
|
+
sleep_max = 5
|
|
144
|
+
sleeptime = sleep_min
|
|
145
|
+
|
|
146
|
+
begin
|
|
147
|
+
@logger.debug("Tailing sqlite db", :path => @path)
|
|
148
|
+
loop do
|
|
149
|
+
count = 0
|
|
150
|
+
@table_data.each do |k, table|
|
|
151
|
+
table_name = table[:name]
|
|
152
|
+
offset = table[:place]
|
|
153
|
+
@logger.debug("offset is #{offset}", :k => k, :table => table_name)
|
|
154
|
+
rows = get_n_rows_from_table(@db, table_name, offset, @batch)
|
|
155
|
+
count += rows.count
|
|
156
|
+
rows.each do |row|
|
|
157
|
+
event = LogStash::Event.new("host" => @host, "db" => @db)
|
|
158
|
+
decorate(event)
|
|
159
|
+
# store each column as a field in the event.
|
|
160
|
+
row.each do |column, element|
|
|
161
|
+
next if column == :id
|
|
162
|
+
event[column.to_s] = element
|
|
163
|
+
end
|
|
164
|
+
queue << event
|
|
165
|
+
@table_data[k][:place] = row[:id]
|
|
166
|
+
end
|
|
167
|
+
# Store the last-seen row in the database
|
|
168
|
+
update_placeholder(@db, table_name, @table_data[k][:place])
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
if count == 0
|
|
172
|
+
# nothing found in that iteration
|
|
173
|
+
# sleep a bit
|
|
174
|
+
@logger.debug("No new rows. Sleeping.", :time => sleeptime)
|
|
175
|
+
sleeptime = [sleeptime * 2, sleep_max].min
|
|
176
|
+
sleep(sleeptime)
|
|
177
|
+
else
|
|
178
|
+
sleeptime = sleep_min
|
|
179
|
+
end
|
|
180
|
+
end # loop
|
|
181
|
+
end # begin/rescue
|
|
182
|
+
end #run
|
|
183
|
+
|
|
184
|
+
end # class Logtstash::Inputs::EventLog
|
|
185
|
+
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/threadable"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/plugin_mixins/aws_config"
|
|
5
|
+
require "digest/sha2"
|
|
6
|
+
|
|
7
|
+
# Pull events from an Amazon Web Services Simple Queue Service (SQS) queue.
|
|
8
|
+
#
|
|
9
|
+
# SQS is a simple, scalable queue system that is part of the
|
|
10
|
+
# Amazon Web Services suite of tools.
|
|
11
|
+
#
|
|
12
|
+
# Although SQS is similar to other queuing systems like AMQP, it
|
|
13
|
+
# uses a custom API and requires that you have an AWS account.
|
|
14
|
+
# See http://aws.amazon.com/sqs/ for more details on how SQS works,
|
|
15
|
+
# what the pricing schedule looks like and how to setup a queue.
|
|
16
|
+
#
|
|
17
|
+
# To use this plugin, you *must*:
|
|
18
|
+
#
|
|
19
|
+
# * Have an AWS account
|
|
20
|
+
# * Setup an SQS queue
|
|
21
|
+
# * Create an identify that has access to consume messages from the queue.
|
|
22
|
+
#
|
|
23
|
+
# The "consumer" identity must have the following permissions on the queue:
|
|
24
|
+
#
|
|
25
|
+
# * sqs:ChangeMessageVisibility
|
|
26
|
+
# * sqs:ChangeMessageVisibilityBatch
|
|
27
|
+
# * sqs:DeleteMessage
|
|
28
|
+
# * sqs:DeleteMessageBatch
|
|
29
|
+
# * sqs:GetQueueAttributes
|
|
30
|
+
# * sqs:GetQueueUrl
|
|
31
|
+
# * sqs:ListQueues
|
|
32
|
+
# * sqs:ReceiveMessage
|
|
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
|
+
# "Action": [
|
|
41
|
+
# "sqs:ChangeMessageVisibility",
|
|
42
|
+
# "sqs:ChangeMessageVisibilityBatch",
|
|
43
|
+
# "sqs:GetQueueAttributes",
|
|
44
|
+
# "sqs:GetQueueUrl",
|
|
45
|
+
# "sqs:ListQueues",
|
|
46
|
+
# "sqs:SendMessage",
|
|
47
|
+
# "sqs:SendMessageBatch"
|
|
48
|
+
# ],
|
|
49
|
+
# "Effect": "Allow",
|
|
50
|
+
# "Resource": [
|
|
51
|
+
# "arn:aws:sqs:us-east-1:123456789012:Logstash"
|
|
52
|
+
# ]
|
|
53
|
+
# }
|
|
54
|
+
# ]
|
|
55
|
+
# }
|
|
56
|
+
#
|
|
57
|
+
# See http://aws.amazon.com/iam/ for more details on setting up AWS identities.
|
|
58
|
+
#
|
|
59
|
+
class LogStash::Inputs::SQS < LogStash::Inputs::Threadable
|
|
60
|
+
include LogStash::PluginMixins::AwsConfig
|
|
61
|
+
|
|
62
|
+
config_name "sqs"
|
|
63
|
+
milestone 1
|
|
64
|
+
|
|
65
|
+
default :codec, "json"
|
|
66
|
+
|
|
67
|
+
# Name of the SQS Queue name to pull messages from. Note that this is just the name of the queue, not the URL or ARN.
|
|
68
|
+
config :queue, :validate => :string, :required => true
|
|
69
|
+
|
|
70
|
+
# Name of the event field in which to store the SQS message ID
|
|
71
|
+
config :id_field, :validate => :string
|
|
72
|
+
|
|
73
|
+
# Name of the event field in which to store the SQS message MD5 checksum
|
|
74
|
+
config :md5_field, :validate => :string
|
|
75
|
+
|
|
76
|
+
# Name of the event field in which to store the SQS message Sent Timestamp
|
|
77
|
+
config :sent_timestamp_field, :validate => :string
|
|
78
|
+
|
|
79
|
+
public
|
|
80
|
+
def aws_service_endpoint(region)
|
|
81
|
+
return {
|
|
82
|
+
:sqs_endpoint => "sqs.#{region}.amazonaws.com"
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
public
|
|
87
|
+
def register
|
|
88
|
+
@logger.info("Registering SQS input", :queue => @queue)
|
|
89
|
+
require "aws-sdk"
|
|
90
|
+
|
|
91
|
+
@sqs = AWS::SQS.new(aws_options_hash)
|
|
92
|
+
|
|
93
|
+
begin
|
|
94
|
+
@logger.debug("Connecting to AWS SQS queue", :queue => @queue)
|
|
95
|
+
@sqs_queue = @sqs.queues.named(@queue)
|
|
96
|
+
@logger.info("Connected to AWS SQS queue successfully.", :queue => @queue)
|
|
97
|
+
rescue Exception => e
|
|
98
|
+
@logger.error("Unable to access SQS queue.", :error => e.to_s, :queue => @queue)
|
|
99
|
+
throw e
|
|
100
|
+
end # begin/rescue
|
|
101
|
+
end # def register
|
|
102
|
+
|
|
103
|
+
public
|
|
104
|
+
def run(output_queue)
|
|
105
|
+
@logger.debug("Polling SQS queue", :queue => @queue)
|
|
106
|
+
|
|
107
|
+
receive_opts = {
|
|
108
|
+
:limit => 10,
|
|
109
|
+
:visibility_timeout => 30,
|
|
110
|
+
:attributes => [:sent_at]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
continue_polling = true
|
|
114
|
+
while running? && continue_polling
|
|
115
|
+
continue_polling = run_with_backoff(60, 1) do
|
|
116
|
+
@sqs_queue.receive_message(receive_opts) do |message|
|
|
117
|
+
if message
|
|
118
|
+
@codec.decode(message.body) do |event|
|
|
119
|
+
decorate(event)
|
|
120
|
+
if @id_field
|
|
121
|
+
event[@id_field] = message.id
|
|
122
|
+
end
|
|
123
|
+
if @md5_field
|
|
124
|
+
event[@md5_field] = message.md5
|
|
125
|
+
end
|
|
126
|
+
if @sent_timestamp_field
|
|
127
|
+
event[@sent_timestamp_field] = message.sent_timestamp.utc
|
|
128
|
+
end
|
|
129
|
+
@logger.debug? && @logger.debug("Processed SQS message", :message_id => message.id, :message_md5 => message.md5, :sent_timestamp => message.sent_timestamp, :queue => @queue)
|
|
130
|
+
output_queue << event
|
|
131
|
+
message.delete
|
|
132
|
+
end # codec.decode
|
|
133
|
+
end # valid SQS message
|
|
134
|
+
end # receive_message
|
|
135
|
+
end # run_with_backoff
|
|
136
|
+
end # polling loop
|
|
137
|
+
end # def run
|
|
138
|
+
|
|
139
|
+
def teardown
|
|
140
|
+
@sqs_queue = nil
|
|
141
|
+
finished
|
|
142
|
+
end # def teardown
|
|
143
|
+
|
|
144
|
+
private
|
|
145
|
+
# Runs an AWS request inside a Ruby block with an exponential backoff in case
|
|
146
|
+
# we exceed the allowed AWS RequestLimit.
|
|
147
|
+
#
|
|
148
|
+
# @param [Integer] max_time maximum amount of time to sleep before giving up.
|
|
149
|
+
# @param [Integer] sleep_time the initial amount of time to sleep before retrying.
|
|
150
|
+
# @param [Block] block Ruby code block to execute.
|
|
151
|
+
def run_with_backoff(max_time, sleep_time, &block)
|
|
152
|
+
if sleep_time > max_time
|
|
153
|
+
@logger.error("AWS::EC2::Errors::RequestLimitExceeded ... failed.", :queue => @queue)
|
|
154
|
+
return false
|
|
155
|
+
end # retry limit exceeded
|
|
156
|
+
|
|
157
|
+
begin
|
|
158
|
+
block.call
|
|
159
|
+
rescue AWS::EC2::Errors::RequestLimitExceeded
|
|
160
|
+
@logger.info("AWS::EC2::Errors::RequestLimitExceeded ... retrying SQS request", :queue => @queue, :sleep_time => sleep_time)
|
|
161
|
+
sleep sleep_time
|
|
162
|
+
run_with_backoff(max_time, sleep_time * 2, &block)
|
|
163
|
+
rescue AWS::EC2::Errors::InstanceLimitExceeded
|
|
164
|
+
@logger.warn("AWS::EC2::Errors::InstanceLimitExceeded ... aborting SQS message retreival.")
|
|
165
|
+
return false
|
|
166
|
+
rescue Exception => bang
|
|
167
|
+
@logger.error("Error reading SQS queue.", :error => bang, :queue => @queue)
|
|
168
|
+
return false
|
|
169
|
+
end # begin/rescue
|
|
170
|
+
return true
|
|
171
|
+
end # def run_with_backoff
|
|
172
|
+
end # class LogStash::Inputs::SQS
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket" # for Socket.gethostname
|
|
5
|
+
|
|
6
|
+
# Read events from standard input.
|
|
7
|
+
#
|
|
8
|
+
# By default, each event is assumed to be one line. If you
|
|
9
|
+
# want to join lines, you'll want to use the multiline filter.
|
|
10
|
+
class LogStash::Inputs::Stdin < LogStash::Inputs::Base
|
|
11
|
+
config_name "stdin"
|
|
12
|
+
milestone 3
|
|
13
|
+
|
|
14
|
+
default :codec, "line"
|
|
15
|
+
|
|
16
|
+
public
|
|
17
|
+
def register
|
|
18
|
+
@host = Socket.gethostname
|
|
19
|
+
end # def register
|
|
20
|
+
|
|
21
|
+
def run(queue)
|
|
22
|
+
while true
|
|
23
|
+
begin
|
|
24
|
+
# Based on some testing, there is no way to interrupt an IO.sysread nor
|
|
25
|
+
# IO.select call in JRuby. Bummer :(
|
|
26
|
+
data = $stdin.sysread(16384)
|
|
27
|
+
@codec.decode(data) do |event|
|
|
28
|
+
decorate(event)
|
|
29
|
+
event["host"] = @host
|
|
30
|
+
queue << event
|
|
31
|
+
end
|
|
32
|
+
rescue EOFError, LogStash::ShutdownSignal
|
|
33
|
+
# stdin closed or a requested shutdown
|
|
34
|
+
break
|
|
35
|
+
end
|
|
36
|
+
end # while true
|
|
37
|
+
finished
|
|
38
|
+
end # def run
|
|
39
|
+
|
|
40
|
+
public
|
|
41
|
+
def teardown
|
|
42
|
+
@logger.debug("stdin shutting down.")
|
|
43
|
+
$stdin.close rescue nil
|
|
44
|
+
finished
|
|
45
|
+
end # def teardown
|
|
46
|
+
end # class LogStash::Inputs::Stdin
|