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,72 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Collect data from WMI query
|
|
7
|
+
#
|
|
8
|
+
# This is useful for collecting performance metrics and other data
|
|
9
|
+
# which is accessible via WMI on a Windows host
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
#
|
|
13
|
+
# input {
|
|
14
|
+
# wmi {
|
|
15
|
+
# query => "select * from Win32_Process"
|
|
16
|
+
# interval => 10
|
|
17
|
+
# }
|
|
18
|
+
# wmi {
|
|
19
|
+
# query => "select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor where name = '_Total'"
|
|
20
|
+
# }
|
|
21
|
+
# }
|
|
22
|
+
class LogStash::Inputs::WMI < LogStash::Inputs::Base
|
|
23
|
+
|
|
24
|
+
config_name "wmi"
|
|
25
|
+
milestone 1
|
|
26
|
+
|
|
27
|
+
# WMI query
|
|
28
|
+
config :query, :validate => :string, :required => true
|
|
29
|
+
# Polling interval
|
|
30
|
+
config :interval, :validate => :number, :default => 10
|
|
31
|
+
|
|
32
|
+
public
|
|
33
|
+
def register
|
|
34
|
+
|
|
35
|
+
@host = Socket.gethostname
|
|
36
|
+
@logger.info("Registering wmi input", :query => @query)
|
|
37
|
+
|
|
38
|
+
if RUBY_PLATFORM == "java"
|
|
39
|
+
# make use of the same fix used for the eventlog input
|
|
40
|
+
require "logstash/inputs/eventlog/racob_fix"
|
|
41
|
+
require "jruby-win32ole"
|
|
42
|
+
else
|
|
43
|
+
require "win32ole"
|
|
44
|
+
end
|
|
45
|
+
end # def register
|
|
46
|
+
|
|
47
|
+
public
|
|
48
|
+
def run(queue)
|
|
49
|
+
@wmi = WIN32OLE.connect("winmgmts://")
|
|
50
|
+
|
|
51
|
+
begin
|
|
52
|
+
@logger.debug("Executing WMI query '#{@query}'")
|
|
53
|
+
loop do
|
|
54
|
+
@wmi.ExecQuery(@query).each do |wmiobj|
|
|
55
|
+
# create a single event for all properties in the collection
|
|
56
|
+
event = LogStash::Event.new
|
|
57
|
+
event["host"] = @host
|
|
58
|
+
decorate(event)
|
|
59
|
+
wmiobj.Properties_.each do |prop|
|
|
60
|
+
event[prop.name] = prop.value
|
|
61
|
+
end
|
|
62
|
+
queue << event
|
|
63
|
+
end
|
|
64
|
+
sleep @interval
|
|
65
|
+
end # loop
|
|
66
|
+
rescue Exception => ex
|
|
67
|
+
@logger.error("WMI query error: #{ex}\n#{ex.backtrace}")
|
|
68
|
+
sleep @interval
|
|
69
|
+
retry
|
|
70
|
+
end # begin/rescue
|
|
71
|
+
end # def run
|
|
72
|
+
end # class LogStash::Inputs::WMI
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# This input allows you to receive events over XMPP/Jabber.
|
|
6
|
+
#
|
|
7
|
+
# This plugin can be used for accepting events from humans or applications
|
|
8
|
+
# XMPP, or you can use it for PubSub or general message passing for logstash to
|
|
9
|
+
# logstash.
|
|
10
|
+
class LogStash::Inputs::Xmpp < LogStash::Inputs::Base
|
|
11
|
+
|
|
12
|
+
config_name "xmpp"
|
|
13
|
+
milestone 2
|
|
14
|
+
|
|
15
|
+
default :codec, "plain"
|
|
16
|
+
|
|
17
|
+
# The user or resource ID, like foo@example.com.
|
|
18
|
+
config :user, :validate => :string, :required => :true
|
|
19
|
+
|
|
20
|
+
# The xmpp password for the user/identity.
|
|
21
|
+
config :password, :validate => :password, :required => :true
|
|
22
|
+
|
|
23
|
+
# if muc/multi-user-chat required, give the name of the room that
|
|
24
|
+
# you want to join: room@conference.domain/nick
|
|
25
|
+
config :rooms, :validate => :array
|
|
26
|
+
|
|
27
|
+
# The xmpp server to connect to. This is optional. If you omit this setting,
|
|
28
|
+
# the host on the user/identity is used. (foo.com for user@foo.com)
|
|
29
|
+
config :host, :validate => :string
|
|
30
|
+
|
|
31
|
+
# Set to true to enable greater debugging in XMPP. Useful for debugging
|
|
32
|
+
# network/authentication erros.
|
|
33
|
+
config :debug, :validate => :boolean, :default => false
|
|
34
|
+
|
|
35
|
+
public
|
|
36
|
+
def register
|
|
37
|
+
require 'xmpp4r' # xmpp4r gem
|
|
38
|
+
Jabber::debug = true if @debug
|
|
39
|
+
|
|
40
|
+
@client = Jabber::Client.new(Jabber::JID.new(@user))
|
|
41
|
+
@client.connect(@host) # it is ok if host is nil
|
|
42
|
+
@client.auth(@password.value)
|
|
43
|
+
@client.send(Jabber::Presence.new.set_type(:available))
|
|
44
|
+
|
|
45
|
+
# load the MUC Client if we are joining rooms.
|
|
46
|
+
require 'xmpp4r/muc/helper/simplemucclient' if @rooms && !@rooms.empty?
|
|
47
|
+
end # def register
|
|
48
|
+
|
|
49
|
+
public
|
|
50
|
+
def run(queue)
|
|
51
|
+
if @rooms
|
|
52
|
+
@rooms.each do |room| # handle muc messages in different rooms
|
|
53
|
+
@muc = Jabber::MUC::SimpleMUCClient.new(@client)
|
|
54
|
+
@muc.join(room)
|
|
55
|
+
@muc.on_message do |time,from,body|
|
|
56
|
+
@codec.decode(body) do |event|
|
|
57
|
+
decorate(event)
|
|
58
|
+
event["room"] = room
|
|
59
|
+
event["from"] = from
|
|
60
|
+
queue << event
|
|
61
|
+
end
|
|
62
|
+
end # @muc.on_message
|
|
63
|
+
end # @rooms.each
|
|
64
|
+
end # if @rooms
|
|
65
|
+
|
|
66
|
+
@client.add_message_callback do |msg| # handle direct/private messages
|
|
67
|
+
# accept normal msgs (skip presence updates, etc)
|
|
68
|
+
if msg.body != nil
|
|
69
|
+
@codec.decode(msg.body) do |event|
|
|
70
|
+
decorate(event)
|
|
71
|
+
# Maybe "from" should just be a hash:
|
|
72
|
+
# { "node" => ..., "domain" => ..., "resource" => ... }
|
|
73
|
+
event["from"] = "#{msg.from.node}@#{msg.from.domain}/#{msg.from.resource}"
|
|
74
|
+
queue << event
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end # @client.add_message_callback
|
|
78
|
+
sleep
|
|
79
|
+
end # def run
|
|
80
|
+
|
|
81
|
+
end # class LogStash::Inputs::Xmpp
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "date"
|
|
3
|
+
require "logstash/inputs/rabbitmq"
|
|
4
|
+
require "zlib"
|
|
5
|
+
|
|
6
|
+
# Read Zenoss events from the zenoss.zenevents fanout exchange.
|
|
7
|
+
#
|
|
8
|
+
class LogStash::Inputs::Zenoss < LogStash::Inputs::RabbitMQ
|
|
9
|
+
|
|
10
|
+
config_name "zenoss"
|
|
11
|
+
milestone 1
|
|
12
|
+
|
|
13
|
+
# Your rabbitmq server address
|
|
14
|
+
config :host, :validate => :string, :default => "localhost"
|
|
15
|
+
|
|
16
|
+
# Your rabbitmq username
|
|
17
|
+
config :user, :validate => :string, :default => "zenoss"
|
|
18
|
+
|
|
19
|
+
# Your rabbitmq password
|
|
20
|
+
config :password, :validate => :password, :default => "zenoss"
|
|
21
|
+
|
|
22
|
+
# The name of the exchange to bind the queue. This is analogous to the 'rabbitmq
|
|
23
|
+
# output' [config 'name'](../outputs/rabbitmq)
|
|
24
|
+
config :exchange, :validate => :string, :default => "zenoss.zenevents"
|
|
25
|
+
|
|
26
|
+
# The routing key to use. This is only valid for direct or fanout exchanges
|
|
27
|
+
#
|
|
28
|
+
# * Routing keys are ignored on topic exchanges.
|
|
29
|
+
# * Wildcards are not valid on direct exchanges.
|
|
30
|
+
config :key, :validate => :string, :default => "zenoss.zenevent.#"
|
|
31
|
+
|
|
32
|
+
# The vhost to use. If you don't know what this is, leave the default.
|
|
33
|
+
config :vhost, :validate => :string, :default => "/zenoss"
|
|
34
|
+
|
|
35
|
+
def register
|
|
36
|
+
super
|
|
37
|
+
require "logstash/util/zenoss"
|
|
38
|
+
require "bunny"
|
|
39
|
+
end # def register
|
|
40
|
+
|
|
41
|
+
def run(queue)
|
|
42
|
+
begin
|
|
43
|
+
zep = Org::Zenoss::Protobufs::Zep
|
|
44
|
+
|
|
45
|
+
@logger.debug("Connecting with RabbitMQ settings #{@rabbitmq_settings.inspect}")
|
|
46
|
+
@bunny = Bunny.new(@rabbitmq_settings)
|
|
47
|
+
return if terminating?
|
|
48
|
+
@bunny.start
|
|
49
|
+
@bunny.qos({:prefetch_count => @prefetch_count})
|
|
50
|
+
|
|
51
|
+
@arguments_hash = Hash[*@arguments]
|
|
52
|
+
|
|
53
|
+
@logger.debug("Setting up queue #{@name.inspect}")
|
|
54
|
+
@queue = @bunny.queue(@name, {
|
|
55
|
+
:durable => @durable,
|
|
56
|
+
:auto_delete => @auto_delete,
|
|
57
|
+
:exclusive => @exclusive,
|
|
58
|
+
:arguments => @arguments_hash
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
@queue.bind(@exchange, :key => @key)
|
|
62
|
+
|
|
63
|
+
@queue.subscribe({:ack => @ack}) do |data|
|
|
64
|
+
|
|
65
|
+
# Zenoss can optionally compress message payloads.
|
|
66
|
+
if data[:header].content_encoding == "deflate"
|
|
67
|
+
data[:payload] = Zlib::Inflate.inflate(data[:payload])
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Decode the payload into an EventSummary.
|
|
71
|
+
summary = zep::EventSummary.decode(data[:payload])
|
|
72
|
+
|
|
73
|
+
# This should never happen, but skip it if it does.
|
|
74
|
+
next unless summary.occurrence.length > 0
|
|
75
|
+
|
|
76
|
+
occurrence = summary.occurrence[0]
|
|
77
|
+
#timestamp = DateTime.strptime(occurrence.created_time.to_s, "%Q").to_s
|
|
78
|
+
timestamp = Time.at(occurrence.created_time / 1000.0)
|
|
79
|
+
|
|
80
|
+
# LogStash event properties.
|
|
81
|
+
event = LogStash::Event.new(
|
|
82
|
+
"@timestamp" => timestamp,
|
|
83
|
+
"type" => @type,
|
|
84
|
+
"host" => occurrence.actor.element_title,
|
|
85
|
+
"message" => occurrence.message,
|
|
86
|
+
)
|
|
87
|
+
decorate(event)
|
|
88
|
+
|
|
89
|
+
# Direct mappings from summary.
|
|
90
|
+
%w{uuid}.each do |property|
|
|
91
|
+
property_value = occurrence.send property
|
|
92
|
+
if !property_value.nil?
|
|
93
|
+
event[property] = property_value
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Direct mappings from occurrence.
|
|
98
|
+
%w{
|
|
99
|
+
fingerprint event_class event_class_key event_key event_group agent
|
|
100
|
+
syslog_facility nt_event_code monitor
|
|
101
|
+
}.each do |property|
|
|
102
|
+
property_value = occurrence.send property
|
|
103
|
+
if !property_value.nil?
|
|
104
|
+
event[property] = property_value
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Enum Mappings.
|
|
109
|
+
event["severity"] = zep::EventSeverity.constants[occurrence.severity]
|
|
110
|
+
|
|
111
|
+
if !occurrence.status.nil?
|
|
112
|
+
event["status"] = zep::EventStatus.constants[occurrence.status]
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
if !occurrence.syslog_priority.nil?
|
|
116
|
+
event["syslog_priority"] = zep::SyslogPriority.constants[
|
|
117
|
+
occurrence.syslog_priority]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Extra Details.
|
|
121
|
+
if !occurrence.details.nil?
|
|
122
|
+
occurrence.details.each do |detail|
|
|
123
|
+
if detail.value.length == 1
|
|
124
|
+
event[detail.name] = detail.value[0]
|
|
125
|
+
else
|
|
126
|
+
event[detail.name] = detail.value
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
queue << event
|
|
132
|
+
end # @queue.subscribe
|
|
133
|
+
|
|
134
|
+
rescue *[Bunny::ConnectionError, Bunny::ServerDownError] => e
|
|
135
|
+
@logger.error("RabbitMQ connection error, will reconnect: #{e}")
|
|
136
|
+
# Sleep for a bit before retrying.
|
|
137
|
+
# TODO(sissel): Write 'backoff' method?
|
|
138
|
+
sleep(1)
|
|
139
|
+
retry
|
|
140
|
+
end # begin/rescue
|
|
141
|
+
end # def run
|
|
142
|
+
|
|
143
|
+
end # class LogStash::Inputs::Zenoss
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Read events over a 0MQ SUB socket.
|
|
7
|
+
#
|
|
8
|
+
# You need to have the 0mq 2.1.x library installed to be able to use
|
|
9
|
+
# this input plugin.
|
|
10
|
+
#
|
|
11
|
+
# The default settings will create a subscriber binding to tcp://127.0.0.1:2120
|
|
12
|
+
# waiting for connecting publishers.
|
|
13
|
+
#
|
|
14
|
+
class LogStash::Inputs::ZeroMQ < LogStash::Inputs::Base
|
|
15
|
+
|
|
16
|
+
config_name "zeromq"
|
|
17
|
+
milestone 2
|
|
18
|
+
|
|
19
|
+
default :codec, "json"
|
|
20
|
+
|
|
21
|
+
# 0mq socket address to connect or bind
|
|
22
|
+
# Please note that `inproc://` will not work with logstash
|
|
23
|
+
# as each we use a context per thread.
|
|
24
|
+
# By default, inputs bind/listen
|
|
25
|
+
# and outputs connect
|
|
26
|
+
config :address, :validate => :array, :default => ["tcp://*:2120"]
|
|
27
|
+
|
|
28
|
+
# 0mq topology
|
|
29
|
+
# The default logstash topologies work as follows:
|
|
30
|
+
# * pushpull - inputs are pull, outputs are push
|
|
31
|
+
# * pubsub - inputs are subscribers, outputs are publishers
|
|
32
|
+
# * pair - inputs are clients, inputs are servers
|
|
33
|
+
#
|
|
34
|
+
# If the predefined topology flows don't work for you,
|
|
35
|
+
# you can change the 'mode' setting
|
|
36
|
+
# TODO (lusis) add req/rep MAYBE
|
|
37
|
+
# TODO (lusis) add router/dealer
|
|
38
|
+
config :topology, :validate => ["pushpull", "pubsub", "pair"], :required => true
|
|
39
|
+
|
|
40
|
+
# 0mq topic
|
|
41
|
+
# This is used for the 'pubsub' topology only
|
|
42
|
+
# On inputs, this allows you to filter messages by topic
|
|
43
|
+
# On outputs, this allows you to tag a message for routing
|
|
44
|
+
# NOTE: ZeroMQ does subscriber side filtering.
|
|
45
|
+
# NOTE: All topics have an implicit wildcard at the end
|
|
46
|
+
# You can specify multiple topics here
|
|
47
|
+
config :topic, :validate => :array
|
|
48
|
+
|
|
49
|
+
# mode
|
|
50
|
+
# server mode binds/listens
|
|
51
|
+
# client mode connects
|
|
52
|
+
config :mode, :validate => ["server", "client"], :default => "server"
|
|
53
|
+
|
|
54
|
+
# sender
|
|
55
|
+
# overrides the sender to
|
|
56
|
+
# set the source of the event
|
|
57
|
+
# default is "zmq+topology://type/"
|
|
58
|
+
config :sender, :validate => :string
|
|
59
|
+
|
|
60
|
+
# 0mq socket options
|
|
61
|
+
# This exposes zmq_setsockopt
|
|
62
|
+
# for advanced tuning
|
|
63
|
+
# see http://api.zeromq.org/2-1:zmq-setsockopt for details
|
|
64
|
+
#
|
|
65
|
+
# This is where you would set values like:
|
|
66
|
+
# ZMQ::HWM - high water mark
|
|
67
|
+
# ZMQ::IDENTITY - named queues
|
|
68
|
+
# ZMQ::SWAP_SIZE - space for disk overflow
|
|
69
|
+
#
|
|
70
|
+
# example: sockopt => ["ZMQ::HWM", 50, "ZMQ::IDENTITY", "my_named_queue"]
|
|
71
|
+
config :sockopt, :validate => :hash
|
|
72
|
+
|
|
73
|
+
public
|
|
74
|
+
def register
|
|
75
|
+
require "ffi-rzmq"
|
|
76
|
+
require "logstash/util/zeromq"
|
|
77
|
+
self.class.send(:include, LogStash::Util::ZeroMQ)
|
|
78
|
+
|
|
79
|
+
case @topology
|
|
80
|
+
when "pair"
|
|
81
|
+
zmq_const = ZMQ::PAIR
|
|
82
|
+
when "pushpull"
|
|
83
|
+
zmq_const = ZMQ::PULL
|
|
84
|
+
when "pubsub"
|
|
85
|
+
zmq_const = ZMQ::SUB
|
|
86
|
+
end # case socket_type
|
|
87
|
+
@zsocket = context.socket(zmq_const)
|
|
88
|
+
error_check(@zsocket.setsockopt(ZMQ::LINGER, 1),
|
|
89
|
+
"while setting ZMQ::LINGER == 1)")
|
|
90
|
+
|
|
91
|
+
if @sockopt
|
|
92
|
+
setopts(@zsocket, @sockopt)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
@address.each do |addr|
|
|
96
|
+
setup(@zsocket, addr)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
if @topology == "pubsub"
|
|
100
|
+
if @topic.nil?
|
|
101
|
+
@logger.debug("ZMQ - No topic provided. Subscribing to all messages")
|
|
102
|
+
error_check(@zsocket.setsockopt(ZMQ::SUBSCRIBE, ""),
|
|
103
|
+
"while setting ZMQ::SUBSCRIBE")
|
|
104
|
+
else
|
|
105
|
+
@topic.each do |t|
|
|
106
|
+
@logger.debug("ZMQ subscribing to topic: #{t}")
|
|
107
|
+
error_check(@zsocket.setsockopt(ZMQ::SUBSCRIBE, t),
|
|
108
|
+
"while setting ZMQ::SUBSCRIBE == #{t}")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end # def register
|
|
114
|
+
|
|
115
|
+
def teardown
|
|
116
|
+
error_check(@zsocket.close, "while closing the zmq socket")
|
|
117
|
+
end # def teardown
|
|
118
|
+
|
|
119
|
+
def server?
|
|
120
|
+
@mode == "server"
|
|
121
|
+
end # def server?
|
|
122
|
+
|
|
123
|
+
def run(output_queue)
|
|
124
|
+
host = Socket.gethostname
|
|
125
|
+
begin
|
|
126
|
+
loop do
|
|
127
|
+
# Here's the unified receiver
|
|
128
|
+
# Get the first part as the msg
|
|
129
|
+
m1 = ""
|
|
130
|
+
rc = @zsocket.recv_string(m1)
|
|
131
|
+
error_check(rc, "in recv_string")
|
|
132
|
+
@logger.debug("ZMQ receiving", :event => m1)
|
|
133
|
+
msg = m1
|
|
134
|
+
# If we have more parts, we'll eat the first as the topic
|
|
135
|
+
# and set the message to the second part
|
|
136
|
+
if @zsocket.more_parts?
|
|
137
|
+
@logger.debug("Multipart message detected. Setting @message to second part. First part was: #{m1}")
|
|
138
|
+
m2 = ''
|
|
139
|
+
rc2 = @zsocket.recv_string(m2)
|
|
140
|
+
error_check(rc2, "in recv_string")
|
|
141
|
+
@logger.debug("ZMQ receiving", :event => m2)
|
|
142
|
+
msg = m2
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
@codec.decode(msg) do |event|
|
|
146
|
+
event["host"] ||= host
|
|
147
|
+
decorate(event)
|
|
148
|
+
output_queue << event
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
rescue LogStash::ShutdownSignal
|
|
152
|
+
# shutdown
|
|
153
|
+
return
|
|
154
|
+
rescue => e
|
|
155
|
+
@logger.debug("ZMQ Error", :subscriber => @zsocket,
|
|
156
|
+
:exception => e)
|
|
157
|
+
retry
|
|
158
|
+
end # begin
|
|
159
|
+
end # def run
|
|
160
|
+
|
|
161
|
+
private
|
|
162
|
+
def build_source_string
|
|
163
|
+
id = @address.first.clone
|
|
164
|
+
end
|
|
165
|
+
end # class LogStash::Inputs::ZeroMQ
|