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,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "logstash/inputs/base"
|
|
4
|
+
|
|
5
|
+
# This is the threadable class for logstash inputs.
|
|
6
|
+
# Use this class in your inputs if it can support multiple threads
|
|
7
|
+
class LogStash::Inputs::Threadable < LogStash::Inputs::Base
|
|
8
|
+
|
|
9
|
+
# Set this to the number of threads you want this input to spawn.
|
|
10
|
+
# This is the same as declaring the input multiple times
|
|
11
|
+
config :threads, :validate => :number, :default => 1
|
|
12
|
+
|
|
13
|
+
def initialize(params)
|
|
14
|
+
super
|
|
15
|
+
@threadable = true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end # class LogStash::Inputs::Threadable
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
# Read events from the twitter streaming api.
|
|
7
|
+
class LogStash::Inputs::Twitter < LogStash::Inputs::Base
|
|
8
|
+
|
|
9
|
+
config_name "twitter"
|
|
10
|
+
milestone 1
|
|
11
|
+
|
|
12
|
+
# Your twitter app's consumer key
|
|
13
|
+
#
|
|
14
|
+
# Don't know what this is? You need to create an "application"
|
|
15
|
+
# on twitter, see this url: <https://dev.twitter.com/apps/new>
|
|
16
|
+
config :consumer_key, :validate => :string, :required => true
|
|
17
|
+
|
|
18
|
+
# Your twitter app's consumer secret
|
|
19
|
+
#
|
|
20
|
+
# If you don't have one of these, you can create one by
|
|
21
|
+
# registering a new application with twitter:
|
|
22
|
+
# <https://dev.twitter.com/apps/new>
|
|
23
|
+
config :consumer_secret, :validate => :password, :required => true
|
|
24
|
+
|
|
25
|
+
# Your oauth token.
|
|
26
|
+
#
|
|
27
|
+
# To get this, login to twitter with whatever account you want,
|
|
28
|
+
# then visit <https://dev.twitter.com/apps>
|
|
29
|
+
#
|
|
30
|
+
# Click on your app (used with the consumer_key and consumer_secret settings)
|
|
31
|
+
# Then at the bottom of the page, click 'Create my access token' which
|
|
32
|
+
# will create an oauth token and secret bound to your account and that
|
|
33
|
+
# application.
|
|
34
|
+
config :oauth_token, :validate => :string, :required => true
|
|
35
|
+
|
|
36
|
+
# Your oauth token secret.
|
|
37
|
+
#
|
|
38
|
+
# To get this, login to twitter with whatever account you want,
|
|
39
|
+
# then visit <https://dev.twitter.com/apps>
|
|
40
|
+
#
|
|
41
|
+
# Click on your app (used with the consumer_key and consumer_secret settings)
|
|
42
|
+
# Then at the bottom of the page, click 'Create my access token' which
|
|
43
|
+
# will create an oauth token and secret bound to your account and that
|
|
44
|
+
# application.
|
|
45
|
+
config :oauth_token_secret, :validate => :password, :required => true
|
|
46
|
+
|
|
47
|
+
# Any keywords to track in the twitter stream
|
|
48
|
+
config :keywords, :validate => :array, :required => true
|
|
49
|
+
|
|
50
|
+
public
|
|
51
|
+
def register
|
|
52
|
+
require "twitter"
|
|
53
|
+
@client = Twitter::Streaming::Client.new do |c|
|
|
54
|
+
c.consumer_key = @consumer_key
|
|
55
|
+
c.consumer_secret = @consumer_secret.value
|
|
56
|
+
c.access_token = @oauth_token
|
|
57
|
+
c.access_token_secret = @oauth_token_secret.value
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
public
|
|
62
|
+
def run(queue)
|
|
63
|
+
@logger.info("Starting twitter tracking", :keywords => @keywords)
|
|
64
|
+
@client.filter(:track => @keywords.join(",")) do |tweet|
|
|
65
|
+
@logger.info? && @logger.info("Got tweet", :user => tweet.user.screen_name, :text => tweet.text)
|
|
66
|
+
event = LogStash::Event.new(
|
|
67
|
+
"@timestamp" => tweet.created_at.gmtime,
|
|
68
|
+
"message" => tweet.full_text,
|
|
69
|
+
"user" => tweet.user.screen_name,
|
|
70
|
+
"client" => tweet.source,
|
|
71
|
+
"retweeted" => tweet.retweeted?,
|
|
72
|
+
"source" => "http://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id}"
|
|
73
|
+
)
|
|
74
|
+
decorate(event)
|
|
75
|
+
event["in-reply-to"] = tweet.in_reply_to_status_id if tweet.reply?
|
|
76
|
+
unless tweet.urls.empty?
|
|
77
|
+
event["urls"] = tweet.urls.map(&:expanded_url).map(&:to_s)
|
|
78
|
+
end
|
|
79
|
+
queue << event
|
|
80
|
+
end # client.filter
|
|
81
|
+
end # def run
|
|
82
|
+
end # class LogStash::Inputs::Twitter
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "date"
|
|
3
|
+
require "logstash/inputs/base"
|
|
4
|
+
require "logstash/namespace"
|
|
5
|
+
require "socket"
|
|
6
|
+
|
|
7
|
+
# Read messages as events over the network via udp.
|
|
8
|
+
#
|
|
9
|
+
class LogStash::Inputs::Udp < LogStash::Inputs::Base
|
|
10
|
+
config_name "udp"
|
|
11
|
+
milestone 2
|
|
12
|
+
|
|
13
|
+
default :codec, "plain"
|
|
14
|
+
|
|
15
|
+
# The address to listen on
|
|
16
|
+
config :host, :validate => :string, :default => "0.0.0.0"
|
|
17
|
+
|
|
18
|
+
# The port to listen on. Remember that ports less than 1024 (privileged
|
|
19
|
+
# ports) may require root or elevated privileges to use.
|
|
20
|
+
config :port, :validate => :number, :required => true
|
|
21
|
+
|
|
22
|
+
# Buffer size
|
|
23
|
+
config :buffer_size, :validate => :number, :default => 8192
|
|
24
|
+
|
|
25
|
+
public
|
|
26
|
+
def initialize(params)
|
|
27
|
+
super
|
|
28
|
+
BasicSocket.do_not_reverse_lookup = true
|
|
29
|
+
end # def initialize
|
|
30
|
+
|
|
31
|
+
public
|
|
32
|
+
def register
|
|
33
|
+
@udp = nil
|
|
34
|
+
end # def register
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def run(output_queue)
|
|
38
|
+
begin
|
|
39
|
+
# udp server
|
|
40
|
+
udp_listener(output_queue)
|
|
41
|
+
rescue LogStash::ShutdownSignal
|
|
42
|
+
# do nothing, shutdown was requested.
|
|
43
|
+
rescue => e
|
|
44
|
+
@logger.warn("UDP listener died", :exception => e, :backtrace => e.backtrace)
|
|
45
|
+
sleep(5)
|
|
46
|
+
retry
|
|
47
|
+
end # begin
|
|
48
|
+
end # def run
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
def udp_listener(output_queue)
|
|
52
|
+
@logger.info("Starting UDP listener", :address => "#{@host}:#{@port}")
|
|
53
|
+
|
|
54
|
+
if @udp && ! @udp.closed?
|
|
55
|
+
@udp.close
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
@udp = UDPSocket.new(Socket::AF_INET)
|
|
59
|
+
@udp.bind(@host, @port)
|
|
60
|
+
|
|
61
|
+
loop do
|
|
62
|
+
payload, client = @udp.recvfrom(@buffer_size)
|
|
63
|
+
@codec.decode(payload) do |event|
|
|
64
|
+
decorate(event)
|
|
65
|
+
event["host"] = client[3]
|
|
66
|
+
output_queue << event
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
ensure
|
|
70
|
+
if @udp
|
|
71
|
+
@udp.close_read rescue nil
|
|
72
|
+
@udp.close_write rescue nil
|
|
73
|
+
end
|
|
74
|
+
end # def udp_listener
|
|
75
|
+
|
|
76
|
+
public
|
|
77
|
+
def teardown
|
|
78
|
+
@udp.close if @udp && !@udp.closed?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end # class LogStash::Inputs::Udp
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Read events over a UNIX socket.
|
|
7
|
+
#
|
|
8
|
+
# Like stdin and file inputs, each event is assumed to be one line of text.
|
|
9
|
+
#
|
|
10
|
+
# Can either accept connections from clients or connect to a server,
|
|
11
|
+
# depending on `mode`.
|
|
12
|
+
class LogStash::Inputs::Unix < LogStash::Inputs::Base
|
|
13
|
+
class Interrupted < StandardError; end
|
|
14
|
+
config_name "unix"
|
|
15
|
+
milestone 2
|
|
16
|
+
|
|
17
|
+
default :codec, "line"
|
|
18
|
+
|
|
19
|
+
# When mode is `server`, the path to listen on.
|
|
20
|
+
# When mode is `client`, the path to connect to.
|
|
21
|
+
config :path, :validate => :string, :required => true
|
|
22
|
+
|
|
23
|
+
# Remove socket file in case of EADDRINUSE failure
|
|
24
|
+
config :force_unlink, :validate => :boolean, :default => false
|
|
25
|
+
|
|
26
|
+
# The 'read' timeout in seconds. If a particular connection is idle for
|
|
27
|
+
# more than this timeout period, we will assume it is dead and close it.
|
|
28
|
+
#
|
|
29
|
+
# If you never want to timeout, use -1.
|
|
30
|
+
config :data_timeout, :validate => :number, :default => -1
|
|
31
|
+
|
|
32
|
+
# Mode to operate in. `server` listens for client connections,
|
|
33
|
+
# `client` connects to a server.
|
|
34
|
+
config :mode, :validate => ["server", "client"], :default => "server"
|
|
35
|
+
|
|
36
|
+
def initialize(*args)
|
|
37
|
+
super(*args)
|
|
38
|
+
end # def initialize
|
|
39
|
+
|
|
40
|
+
public
|
|
41
|
+
def register
|
|
42
|
+
require "socket"
|
|
43
|
+
require "timeout"
|
|
44
|
+
|
|
45
|
+
if server?
|
|
46
|
+
@logger.info("Starting unix input listener", :address => "#{@path}", :force_unlink => "#{@force_unlink}")
|
|
47
|
+
begin
|
|
48
|
+
@server_socket = UNIXServer.new(@path)
|
|
49
|
+
rescue Errno::EADDRINUSE, IOError
|
|
50
|
+
if @force_unlink
|
|
51
|
+
File.unlink(@path)
|
|
52
|
+
begin
|
|
53
|
+
@server_socket = UNIXServer.new(@path)
|
|
54
|
+
return
|
|
55
|
+
rescue Errno::EADDRINUSE, IOError
|
|
56
|
+
@logger.error("!!!Could not start UNIX server: Address in use",
|
|
57
|
+
:path => @path)
|
|
58
|
+
raise
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
@logger.error("Could not start UNIX server: Address in use",
|
|
62
|
+
:path => @path)
|
|
63
|
+
raise
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end # def register
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
def handle_socket(socket, output_queue)
|
|
70
|
+
begin
|
|
71
|
+
hostname = Socket.gethostname
|
|
72
|
+
loop do
|
|
73
|
+
buf = nil
|
|
74
|
+
# NOTE(petef): the timeout only hits after the line is read
|
|
75
|
+
# or socket dies
|
|
76
|
+
# TODO(sissel): Why do we have a timeout here? What's the point?
|
|
77
|
+
if @data_timeout == -1
|
|
78
|
+
buf = socket.readpartial(16384)
|
|
79
|
+
else
|
|
80
|
+
Timeout::timeout(@data_timeout) do
|
|
81
|
+
buf = socket.readpartial(16384)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
@codec.decode(buf) do |event|
|
|
85
|
+
decorate(event)
|
|
86
|
+
event["host"] = hostname
|
|
87
|
+
event["path"] = @path
|
|
88
|
+
output_queue << event
|
|
89
|
+
end
|
|
90
|
+
end # loop do
|
|
91
|
+
rescue => e
|
|
92
|
+
@logger.debug("Closing connection", :path => @path,
|
|
93
|
+
:exception => e, :backtrace => e.backtrace)
|
|
94
|
+
rescue Timeout::Error
|
|
95
|
+
@logger.debug("Closing connection after read timeout",
|
|
96
|
+
:path => @path)
|
|
97
|
+
end # begin
|
|
98
|
+
|
|
99
|
+
ensure
|
|
100
|
+
begin
|
|
101
|
+
socket.close
|
|
102
|
+
rescue IOError
|
|
103
|
+
#pass
|
|
104
|
+
end # begin
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
def server?
|
|
109
|
+
@mode == "server"
|
|
110
|
+
end # def server?
|
|
111
|
+
|
|
112
|
+
public
|
|
113
|
+
def run(output_queue)
|
|
114
|
+
if server?
|
|
115
|
+
@thread = Thread.current
|
|
116
|
+
@client_threads = []
|
|
117
|
+
loop do
|
|
118
|
+
# Start a new thread for each connection.
|
|
119
|
+
begin
|
|
120
|
+
@client_threads << Thread.start(@server_socket.accept) do |s|
|
|
121
|
+
# TODO(sissel): put this block in its own method.
|
|
122
|
+
|
|
123
|
+
@logger.debug("Accepted connection",
|
|
124
|
+
:server => "#{@path}")
|
|
125
|
+
begin
|
|
126
|
+
handle_socket(s, output_queue)
|
|
127
|
+
rescue Interrupted
|
|
128
|
+
s.close rescue nil
|
|
129
|
+
end
|
|
130
|
+
end # Thread.start
|
|
131
|
+
rescue IOError, Interrupted
|
|
132
|
+
if @interrupted
|
|
133
|
+
# Intended shutdown, get out of the loop
|
|
134
|
+
@server_socket.close
|
|
135
|
+
@client_threads.each do |thread|
|
|
136
|
+
thread.raise(IOError.new)
|
|
137
|
+
end
|
|
138
|
+
break
|
|
139
|
+
else
|
|
140
|
+
# Else it was a genuine IOError caused by something else, so propagate it up..
|
|
141
|
+
raise
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end # loop
|
|
145
|
+
else
|
|
146
|
+
loop do
|
|
147
|
+
client_socket = UNIXSocket.new(@path)
|
|
148
|
+
client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
|
|
149
|
+
@logger.debug("Opened connection", :client => @path)
|
|
150
|
+
handle_socket(client_socket, output_queue)
|
|
151
|
+
end # loop
|
|
152
|
+
end
|
|
153
|
+
end # def run
|
|
154
|
+
|
|
155
|
+
public
|
|
156
|
+
def teardown
|
|
157
|
+
if server?
|
|
158
|
+
File.unlink(@path)
|
|
159
|
+
@interrupted = true
|
|
160
|
+
@thread.raise(Interrupted.new)
|
|
161
|
+
end
|
|
162
|
+
end # def teardown
|
|
163
|
+
end # class LogStash::Inputs::Unix
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/threadable"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket" # for Socket.gethostname
|
|
5
|
+
|
|
6
|
+
# Read from varnish cache's shared memory log
|
|
7
|
+
class LogStash::Inputs::Varnishlog < LogStash::Inputs::Threadable
|
|
8
|
+
config_name "varnishlog"
|
|
9
|
+
milestone 1
|
|
10
|
+
|
|
11
|
+
public
|
|
12
|
+
def register
|
|
13
|
+
require 'varnish'
|
|
14
|
+
@vd = Varnish::VSM.VSM_New
|
|
15
|
+
Varnish::VSL.VSL_Setup(@vd)
|
|
16
|
+
Varnish::VSL.VSL_Open(@vd, 1)
|
|
17
|
+
|
|
18
|
+
end # def register
|
|
19
|
+
|
|
20
|
+
def run(queue)
|
|
21
|
+
@q = queue
|
|
22
|
+
@hostname = Socket.gethostname
|
|
23
|
+
Varnish::VSL.VSL_Dispatch(@vd, self.method(:cb).to_proc, FFI::MemoryPointer.new(:pointer))
|
|
24
|
+
end # def run
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
def cb(priv, tag, fd, len, spec, ptr, bitmap)
|
|
28
|
+
begin
|
|
29
|
+
str = ptr.read_string(len)
|
|
30
|
+
event = LogStash::Event.new("message" => str, "host" => @host)
|
|
31
|
+
decorate(event)
|
|
32
|
+
event["varnish_tag"] = tag
|
|
33
|
+
event["varnish_fd"] = fd
|
|
34
|
+
event["varnish_spec"] = spec
|
|
35
|
+
event["varnish_bitmap"] = bitmap
|
|
36
|
+
@q << event
|
|
37
|
+
rescue => e
|
|
38
|
+
@logger.warn("varnishlog exception: #{e.inspect}")
|
|
39
|
+
ensure
|
|
40
|
+
return 0
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
public
|
|
45
|
+
def teardown
|
|
46
|
+
finished
|
|
47
|
+
end # def teardown
|
|
48
|
+
end # class LogStash::Inputs::Stdin
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Read events over the websocket protocol.
|
|
7
|
+
class LogStash::Inputs::Websocket < LogStash::Inputs::Base
|
|
8
|
+
config_name "websocket"
|
|
9
|
+
milestone 1
|
|
10
|
+
|
|
11
|
+
default :codec, "json"
|
|
12
|
+
|
|
13
|
+
# The url to connect to or serve from
|
|
14
|
+
config :url, :validate => :string, :default => "0.0.0.0"
|
|
15
|
+
|
|
16
|
+
# Operate as a client or a server.
|
|
17
|
+
#
|
|
18
|
+
# Client mode causes this plugin to connect as a websocket client
|
|
19
|
+
# to the URL given. It expects to receive events as websocket messages.
|
|
20
|
+
#
|
|
21
|
+
# (NOT IMPLEMENTED YET) Server mode causes this plugin to listen on
|
|
22
|
+
# the given URL for websocket clients. It expects to receive events
|
|
23
|
+
# as websocket messages from these clients.
|
|
24
|
+
config :mode, :validate => [ "server", "client" ], :default => "client"
|
|
25
|
+
|
|
26
|
+
def register
|
|
27
|
+
require "ftw"
|
|
28
|
+
end # def register
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def run(output_queue)
|
|
32
|
+
# TODO(sissel): Implement server mode.
|
|
33
|
+
agent = FTW::Agent.new
|
|
34
|
+
begin
|
|
35
|
+
websocket = agent.websocket!(@url)
|
|
36
|
+
websocket.each do |payload|
|
|
37
|
+
@codec.decode(payload) do |event|
|
|
38
|
+
decorate(event)
|
|
39
|
+
output_queue << event
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
rescue => e
|
|
43
|
+
@logger.warn("websocket input client threw exception, restarting",
|
|
44
|
+
:exception => e)
|
|
45
|
+
sleep(1)
|
|
46
|
+
retry
|
|
47
|
+
end # begin
|
|
48
|
+
end # def run
|
|
49
|
+
|
|
50
|
+
end # class LogStash::Inputs::Websocket
|