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,66 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "java"
|
|
3
|
+
require "rubygems"
|
|
4
|
+
require "jdbc/mysql"
|
|
5
|
+
|
|
6
|
+
java_import "com.mysql.jdbc.Driver"
|
|
7
|
+
|
|
8
|
+
# A JDBC mysql connection class.
|
|
9
|
+
# The interface is compatible with the mysql2 API.
|
|
10
|
+
class LogStash::DrupalDblogJavaMysqlConnection
|
|
11
|
+
|
|
12
|
+
def initialize(host, username, password, database, port = nil)
|
|
13
|
+
port ||= 3306
|
|
14
|
+
|
|
15
|
+
address = "jdbc:mysql://#{host}:#{port}/#{database}"
|
|
16
|
+
@connection = java.sql.DriverManager.getConnection(address, username, password)
|
|
17
|
+
end # def initialize
|
|
18
|
+
|
|
19
|
+
def query(sql)
|
|
20
|
+
if sql =~ /select/i
|
|
21
|
+
return select(sql)
|
|
22
|
+
else
|
|
23
|
+
return update(sql)
|
|
24
|
+
end
|
|
25
|
+
end # def query
|
|
26
|
+
|
|
27
|
+
def select(sql)
|
|
28
|
+
stmt = @connection.createStatement
|
|
29
|
+
resultSet = stmt.executeQuery(sql)
|
|
30
|
+
|
|
31
|
+
meta = resultSet.getMetaData
|
|
32
|
+
column_count = meta.getColumnCount
|
|
33
|
+
|
|
34
|
+
rows = []
|
|
35
|
+
|
|
36
|
+
while resultSet.next
|
|
37
|
+
res = {}
|
|
38
|
+
|
|
39
|
+
(1..column_count).each do |i|
|
|
40
|
+
name = meta.getColumnName(i)
|
|
41
|
+
case meta.getColumnType(i)
|
|
42
|
+
when java.sql.Types::INTEGER
|
|
43
|
+
res[name] = resultSet.getInt(name)
|
|
44
|
+
else
|
|
45
|
+
res[name] = resultSet.getString(name)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
rows << res
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
stmt.close
|
|
53
|
+
return rows
|
|
54
|
+
end # def select
|
|
55
|
+
|
|
56
|
+
def update(sql)
|
|
57
|
+
stmt = @connection.createStatement
|
|
58
|
+
stmt.execute_update(sql)
|
|
59
|
+
stmt.close
|
|
60
|
+
end # def update
|
|
61
|
+
|
|
62
|
+
def close
|
|
63
|
+
@connection.close
|
|
64
|
+
end # def close
|
|
65
|
+
|
|
66
|
+
end # class LogStash::DrupalDblogJavaMysqlConnection
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/util/socket_peer"
|
|
5
|
+
|
|
6
|
+
# Read from elasticsearch.
|
|
7
|
+
#
|
|
8
|
+
# This is useful for replay testing logs, reindexing, etc.
|
|
9
|
+
#
|
|
10
|
+
# Example:
|
|
11
|
+
#
|
|
12
|
+
# input {
|
|
13
|
+
# # Read all documents from elasticsearch matching the given query
|
|
14
|
+
# elasticsearch {
|
|
15
|
+
# host => "localhost"
|
|
16
|
+
# query => "ERROR"
|
|
17
|
+
# }
|
|
18
|
+
# }
|
|
19
|
+
#
|
|
20
|
+
# * TODO(sissel): configurable scroll timeout
|
|
21
|
+
# * TODO(sissel): Option to keep the index, type, and doc id so we can do reindexing?
|
|
22
|
+
class LogStash::Inputs::Elasticsearch < LogStash::Inputs::Base
|
|
23
|
+
config_name "elasticsearch"
|
|
24
|
+
milestone 1
|
|
25
|
+
|
|
26
|
+
default :codec, "json"
|
|
27
|
+
|
|
28
|
+
# The address of your elasticsearch server
|
|
29
|
+
config :host, :validate => :string, :required => true
|
|
30
|
+
|
|
31
|
+
# The http port of your elasticsearch server's REST interface
|
|
32
|
+
config :port, :validate => :number, :default => 9200
|
|
33
|
+
|
|
34
|
+
# The index to search
|
|
35
|
+
config :index, :validate => :string, :default => "logstash-*"
|
|
36
|
+
|
|
37
|
+
# The query to use
|
|
38
|
+
config :query, :validate => :string, :default => "*"
|
|
39
|
+
|
|
40
|
+
# Enable the scan search_type.
|
|
41
|
+
# This will disable sorting but increase speed and performance.
|
|
42
|
+
config :scan, :validate => :boolean, :default => true
|
|
43
|
+
|
|
44
|
+
# This allows you to set the number of items you get back per scroll
|
|
45
|
+
config :size, :validate => :number, :default => 1000
|
|
46
|
+
|
|
47
|
+
# this parameter controls the keep alive time of the scrolling request and initiates the scrolling process.
|
|
48
|
+
# The timeout applies per round trip (i.e. between the previous scan scroll request, to the next).
|
|
49
|
+
config :scroll, :validate => :string, :default => "1m"
|
|
50
|
+
|
|
51
|
+
public
|
|
52
|
+
def register
|
|
53
|
+
require "ftw"
|
|
54
|
+
@agent = FTW::Agent.new
|
|
55
|
+
params = {
|
|
56
|
+
"q" => @query,
|
|
57
|
+
"scroll" => @scroll,
|
|
58
|
+
"size" => "#{@size}",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
params['search_type'] = "scan" if @scan
|
|
62
|
+
|
|
63
|
+
@url = "http://#{@host}:#{@port}/#{@index}/_search?#{encode(params)}"
|
|
64
|
+
end # def register
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
def encode(hash)
|
|
68
|
+
return hash.collect do |key, value|
|
|
69
|
+
CGI.escape(key) + "=" + CGI.escape(value)
|
|
70
|
+
end.join("&")
|
|
71
|
+
end # def encode
|
|
72
|
+
|
|
73
|
+
public
|
|
74
|
+
def run(output_queue)
|
|
75
|
+
|
|
76
|
+
# Execute the search request
|
|
77
|
+
response = @agent.get!(@url)
|
|
78
|
+
json = ""
|
|
79
|
+
response.read_body { |c| json << c }
|
|
80
|
+
result = JSON.parse(json)
|
|
81
|
+
scroll_id = result["_scroll_id"]
|
|
82
|
+
|
|
83
|
+
# When using the search_type=scan we don't get an initial result set.
|
|
84
|
+
# So we do it here.
|
|
85
|
+
if @scan
|
|
86
|
+
|
|
87
|
+
scroll_params = {
|
|
88
|
+
"scroll_id" => scroll_id,
|
|
89
|
+
"scroll" => @scroll
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
scroll_url = "http://#{@host}:#{@port}/_search/scroll?#{encode(scroll_params)}"
|
|
93
|
+
response = @agent.get!(scroll_url)
|
|
94
|
+
json = ""
|
|
95
|
+
response.read_body { |c| json << c }
|
|
96
|
+
result = JSON.parse(json)
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
while true
|
|
101
|
+
break if result.nil?
|
|
102
|
+
hits = result["hits"]["hits"]
|
|
103
|
+
break if hits.empty?
|
|
104
|
+
|
|
105
|
+
hits.each do |hit|
|
|
106
|
+
event = hit["_source"]
|
|
107
|
+
|
|
108
|
+
# Hack to make codecs work
|
|
109
|
+
@codec.decode(event.to_json) do |event|
|
|
110
|
+
decorate(event)
|
|
111
|
+
output_queue << event
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Get the scroll id from the previous result set and use it for getting the next data set
|
|
116
|
+
scroll_id = result["_scroll_id"]
|
|
117
|
+
|
|
118
|
+
# Fetch the next result set
|
|
119
|
+
scroll_params = {
|
|
120
|
+
"scroll_id" => scroll_id,
|
|
121
|
+
"scroll" => @scroll
|
|
122
|
+
}
|
|
123
|
+
scroll_url = "http://#{@host}:#{@port}/_search/scroll?#{encode(scroll_params)}"
|
|
124
|
+
|
|
125
|
+
response = @agent.get!(scroll_url)
|
|
126
|
+
json = ""
|
|
127
|
+
response.read_body { |c| json << c }
|
|
128
|
+
result = JSON.parse(json)
|
|
129
|
+
|
|
130
|
+
if result["error"]
|
|
131
|
+
@logger.warn(result["error"], :request => scroll_url)
|
|
132
|
+
# TODO(sissel): raise an error instead of breaking
|
|
133
|
+
break
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
rescue LogStash::ShutdownSignal
|
|
138
|
+
# Do nothing, let us quit.
|
|
139
|
+
end # def run
|
|
140
|
+
end # class LogStash::Inputs::Elasticsearch
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket"
|
|
5
|
+
|
|
6
|
+
# Pull events from a Windows Event Log
|
|
7
|
+
#
|
|
8
|
+
# To collect Events from the System Event Log, use a config like:
|
|
9
|
+
#
|
|
10
|
+
# input {
|
|
11
|
+
# eventlog {
|
|
12
|
+
# type => 'Win32-EventLog'
|
|
13
|
+
# logfile => 'System'
|
|
14
|
+
# }
|
|
15
|
+
# }
|
|
16
|
+
class LogStash::Inputs::EventLog < LogStash::Inputs::Base
|
|
17
|
+
|
|
18
|
+
config_name "eventlog"
|
|
19
|
+
milestone 2
|
|
20
|
+
|
|
21
|
+
default :codec, "plain"
|
|
22
|
+
|
|
23
|
+
# Event Log Name
|
|
24
|
+
config :logfile, :validate => :array, :default => [ "Application", "Security", "System" ]
|
|
25
|
+
|
|
26
|
+
public
|
|
27
|
+
def register
|
|
28
|
+
|
|
29
|
+
# wrap specified logfiles in suitable OR statements
|
|
30
|
+
@logfiles = @logfile.join("' OR TargetInstance.LogFile = '")
|
|
31
|
+
|
|
32
|
+
@hostname = Socket.gethostname
|
|
33
|
+
@logger.info("Registering input eventlog://#{@hostname}/#{@logfile}")
|
|
34
|
+
|
|
35
|
+
if RUBY_PLATFORM == "java"
|
|
36
|
+
require "logstash/inputs/eventlog/racob_fix"
|
|
37
|
+
require "jruby-win32ole"
|
|
38
|
+
else
|
|
39
|
+
require "win32ole"
|
|
40
|
+
end
|
|
41
|
+
end # def register
|
|
42
|
+
|
|
43
|
+
public
|
|
44
|
+
def run(queue)
|
|
45
|
+
@wmi = WIN32OLE.connect("winmgmts://")
|
|
46
|
+
|
|
47
|
+
wmi_query = "Select * from __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent' And (TargetInstance.LogFile = '#{@logfiles}')"
|
|
48
|
+
|
|
49
|
+
begin
|
|
50
|
+
@logger.debug("Tailing Windows Event Log '#{@logfile}'")
|
|
51
|
+
|
|
52
|
+
events = @wmi.ExecNotificationQuery(wmi_query)
|
|
53
|
+
|
|
54
|
+
while
|
|
55
|
+
notification = events.NextEvent
|
|
56
|
+
event = notification.TargetInstance
|
|
57
|
+
|
|
58
|
+
timestamp = to_timestamp(event.TimeGenerated)
|
|
59
|
+
|
|
60
|
+
e = LogStash::Event.new(
|
|
61
|
+
"host" => @hostname,
|
|
62
|
+
"path" => @logfile,
|
|
63
|
+
"type" => @type,
|
|
64
|
+
"@timestamp" => timestamp
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
%w{Category CategoryString ComputerName EventCode EventIdentifier
|
|
68
|
+
EventType Logfile Message RecordNumber SourceName
|
|
69
|
+
TimeGenerated TimeWritten Type User
|
|
70
|
+
}.each{
|
|
71
|
+
|property| e[property] = event.send property
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if RUBY_PLATFORM == "java"
|
|
75
|
+
# unwrap jruby-win32ole racob data
|
|
76
|
+
e["InsertionStrings"] = unwrap_racob_variant_array(event.InsertionStrings)
|
|
77
|
+
data = unwrap_racob_variant_array(event.Data)
|
|
78
|
+
# Data is an array of signed shorts, so convert to bytes and pack a string
|
|
79
|
+
e["Data"] = data.map{|byte| (byte > 0) ? byte : 256 + byte}.pack("c*")
|
|
80
|
+
else
|
|
81
|
+
# win32-ole data does not need to be unwrapped
|
|
82
|
+
e["InsertionStrings"] = event.InsertionStrings
|
|
83
|
+
e["Data"] = event.Data
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
e["message"] = event.Message
|
|
87
|
+
|
|
88
|
+
decorate(e)
|
|
89
|
+
queue << e
|
|
90
|
+
|
|
91
|
+
end # while
|
|
92
|
+
|
|
93
|
+
rescue Exception => ex
|
|
94
|
+
@logger.error("Windows Event Log error: #{ex}\n#{ex.backtrace}")
|
|
95
|
+
sleep 1
|
|
96
|
+
retry
|
|
97
|
+
end # rescue
|
|
98
|
+
|
|
99
|
+
end # def run
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
def unwrap_racob_variant_array(variants)
|
|
103
|
+
variants ||= []
|
|
104
|
+
variants.map {|v| (v.respond_to? :getValue) ? v.getValue : v}
|
|
105
|
+
end # def unwrap_racob_variant_array
|
|
106
|
+
|
|
107
|
+
# the event log timestamp is a utc string in the following format: yyyymmddHHMMSS.xxxxxx±UUU
|
|
108
|
+
# http://technet.microsoft.com/en-us/library/ee198928.aspx
|
|
109
|
+
private
|
|
110
|
+
def to_timestamp(wmi_time)
|
|
111
|
+
result = ""
|
|
112
|
+
# parse the utc date string
|
|
113
|
+
/(?<w_date>\d{8})(?<w_time>\d{6})\.\d{6}(?<w_sign>[\+-])(?<w_diff>\d{3})/ =~ wmi_time
|
|
114
|
+
result = "#{w_date}T#{w_time}#{w_sign}"
|
|
115
|
+
# the offset is represented by the difference, in minutes,
|
|
116
|
+
# between the local time zone and Greenwich Mean Time (GMT).
|
|
117
|
+
if w_diff.to_i > 0
|
|
118
|
+
# calculate the timezone offset in hours and minutes
|
|
119
|
+
h_offset = w_diff.to_i / 60
|
|
120
|
+
m_offset = w_diff.to_i - (h_offset * 60)
|
|
121
|
+
result.concat("%02d%02d" % [h_offset, m_offset])
|
|
122
|
+
else
|
|
123
|
+
result.concat("0000")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
return DateTime.strptime(result, "%Y%m%dT%H%M%S%z").iso8601
|
|
127
|
+
end
|
|
128
|
+
end # class LogStash::Inputs::EventLog
|
|
129
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# The jruby-win32ole gem uses 'java.lang.System.set_property' to
|
|
3
|
+
# tell java(?) where to find the racob dll.
|
|
4
|
+
#
|
|
5
|
+
# However, it fails when it tries to load the racob dll from the jar
|
|
6
|
+
# (UnsatisfiedLinkError).
|
|
7
|
+
#
|
|
8
|
+
# So easy fix, right? Monkeypatch the set_property to do two things:
|
|
9
|
+
# - extract the racob dll somewhere
|
|
10
|
+
# - set the property to the extracted path
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
require "fileutils"
|
|
14
|
+
require "tmpdir"
|
|
15
|
+
|
|
16
|
+
class << java.lang.System
|
|
17
|
+
alias_method :set_property_seriously, :set_property
|
|
18
|
+
def set_property(key, value)
|
|
19
|
+
if key == "racob.dll.path" && value =~ /file:.*\.jar!\//
|
|
20
|
+
# Path is set in a jar, we'll need to extract it to a
|
|
21
|
+
# temporary location, then load it.
|
|
22
|
+
filename = File.basename(value)
|
|
23
|
+
extracted_path = File.join(Dir.tmpdir, filename)
|
|
24
|
+
# FileUtils.cp (and copy, and copy_file) are broken
|
|
25
|
+
# when copying this file. I have not debugged it other
|
|
26
|
+
# than to see it doesn't work. racob_x86.dll is 105kb,
|
|
27
|
+
# but FileUtils.cp only copies 4kb of it.
|
|
28
|
+
|
|
29
|
+
# open both files in 'binary' mode (sets encoding to BINARY aka
|
|
30
|
+
# ASCII-8BIT).
|
|
31
|
+
input = File.new(value, "rb")
|
|
32
|
+
output = File.new(extracted_path, "wb")
|
|
33
|
+
while chunk = input.read(16384)
|
|
34
|
+
output.write(chunk)
|
|
35
|
+
end
|
|
36
|
+
input.close
|
|
37
|
+
output.close
|
|
38
|
+
|
|
39
|
+
return set_property_seriously(key, extracted_path)
|
|
40
|
+
else
|
|
41
|
+
return set_property_seriously(key, value)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket" # for Socket.gethostname
|
|
5
|
+
|
|
6
|
+
# Run command line tools and capture the whole output as an event.
|
|
7
|
+
#
|
|
8
|
+
# Notes:
|
|
9
|
+
#
|
|
10
|
+
# * The '@source' of this event will be the command run.
|
|
11
|
+
# * The '@message' of this event will be the entire stdout of the command
|
|
12
|
+
# as one event.
|
|
13
|
+
#
|
|
14
|
+
class LogStash::Inputs::Exec < LogStash::Inputs::Base
|
|
15
|
+
|
|
16
|
+
config_name "exec"
|
|
17
|
+
milestone 2
|
|
18
|
+
|
|
19
|
+
default :codec, "plain"
|
|
20
|
+
|
|
21
|
+
# Set this to true to enable debugging on an input.
|
|
22
|
+
config :debug, :validate => :boolean, :default => false
|
|
23
|
+
|
|
24
|
+
# Command to run. For example, "uptime"
|
|
25
|
+
config :command, :validate => :string, :required => true
|
|
26
|
+
|
|
27
|
+
# Interval to run the command. Value is in seconds.
|
|
28
|
+
config :interval, :validate => :number, :required => true
|
|
29
|
+
|
|
30
|
+
public
|
|
31
|
+
def register
|
|
32
|
+
@logger.info("Registering Exec Input", :type => @type,
|
|
33
|
+
:command => @command, :interval => @interval)
|
|
34
|
+
end # def register
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def run(queue)
|
|
38
|
+
hostname = Socket.gethostname
|
|
39
|
+
loop do
|
|
40
|
+
start = Time.now
|
|
41
|
+
@logger.info("Running exec", :command => @command) if @debug
|
|
42
|
+
out = IO.popen(@command)
|
|
43
|
+
# out.read will block until the process finishes.
|
|
44
|
+
@codec.decode(out.read) do |event|
|
|
45
|
+
decorate(event)
|
|
46
|
+
event["host"] = hostname
|
|
47
|
+
event["command"] = @command
|
|
48
|
+
queue << event
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
duration = Time.now - start
|
|
52
|
+
if @debug
|
|
53
|
+
@logger.info("Command completed", :command => @command,
|
|
54
|
+
:duration => duration)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Sleep for the remainder of the interval, or 0 if the duration ran
|
|
58
|
+
# longer than the interval.
|
|
59
|
+
sleeptime = [0, @interval - duration].max
|
|
60
|
+
if sleeptime == 0
|
|
61
|
+
@logger.warn("Execution ran longer than the interval. Skipping sleep.",
|
|
62
|
+
:command => @command, :duration => duration,
|
|
63
|
+
:interval => @interval)
|
|
64
|
+
else
|
|
65
|
+
sleep(sleeptime)
|
|
66
|
+
end
|
|
67
|
+
end # loop
|
|
68
|
+
end # def run
|
|
69
|
+
end # class LogStash::Inputs::Exec
|