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,138 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "date"
|
|
3
|
+
require "logstash/inputs/base"
|
|
4
|
+
require "logstash/namespace"
|
|
5
|
+
require "socket"
|
|
6
|
+
|
|
7
|
+
# Read gelf messages as events over the network.
|
|
8
|
+
#
|
|
9
|
+
# This input is a good choice if you already use graylog2 today.
|
|
10
|
+
#
|
|
11
|
+
# The main reasoning for this input is to leverage existing GELF
|
|
12
|
+
# logging libraries such as the gelf log4j appender
|
|
13
|
+
#
|
|
14
|
+
class LogStash::Inputs::Gelf < LogStash::Inputs::Base
|
|
15
|
+
config_name "gelf"
|
|
16
|
+
milestone 2
|
|
17
|
+
|
|
18
|
+
default :codec, "plain"
|
|
19
|
+
|
|
20
|
+
# The address to listen on
|
|
21
|
+
config :host, :validate => :string, :default => "0.0.0.0"
|
|
22
|
+
|
|
23
|
+
# The port to listen on. Remember that ports less than 1024 (privileged
|
|
24
|
+
# ports) may require root to use.
|
|
25
|
+
config :port, :validate => :number, :default => 12201
|
|
26
|
+
|
|
27
|
+
# Whether or not to remap the gelf message fields to logstash event fields or
|
|
28
|
+
# leave them intact.
|
|
29
|
+
#
|
|
30
|
+
# Default is true
|
|
31
|
+
#
|
|
32
|
+
# Remapping converts the following gelf fields to logstash equivalents:
|
|
33
|
+
#
|
|
34
|
+
# * event["message"] becomes full_message
|
|
35
|
+
# if no full_message, use event["message"] becomes short_message
|
|
36
|
+
# if no short_message, event["message"] is the raw json input
|
|
37
|
+
config :remap, :validate => :boolean, :default => true
|
|
38
|
+
|
|
39
|
+
# Whether or not to remove the leading '_' in GELF fields or leave them
|
|
40
|
+
# in place. (Logstash < 1.2 did not remove them by default.)
|
|
41
|
+
#
|
|
42
|
+
# _foo becomes foo
|
|
43
|
+
#
|
|
44
|
+
# Default is true
|
|
45
|
+
config :strip_leading_underscore, :validate => :boolean, :default => true
|
|
46
|
+
|
|
47
|
+
public
|
|
48
|
+
def initialize(params)
|
|
49
|
+
super
|
|
50
|
+
BasicSocket.do_not_reverse_lookup = true
|
|
51
|
+
end # def initialize
|
|
52
|
+
|
|
53
|
+
public
|
|
54
|
+
def register
|
|
55
|
+
require 'gelfd'
|
|
56
|
+
@udp = nil
|
|
57
|
+
end # def register
|
|
58
|
+
|
|
59
|
+
public
|
|
60
|
+
def run(output_queue)
|
|
61
|
+
begin
|
|
62
|
+
# udp server
|
|
63
|
+
udp_listener(output_queue)
|
|
64
|
+
rescue => e
|
|
65
|
+
@logger.warn("gelf listener died", :exception => e, :backtrace => e.backtrace)
|
|
66
|
+
sleep(5)
|
|
67
|
+
retry
|
|
68
|
+
end # begin
|
|
69
|
+
end # def run
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
def udp_listener(output_queue)
|
|
73
|
+
@logger.info("Starting gelf listener", :address => "#{@host}:#{@port}")
|
|
74
|
+
|
|
75
|
+
if @udp
|
|
76
|
+
@udp.close_read rescue nil
|
|
77
|
+
@udp.close_write rescue nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
@udp = UDPSocket.new(Socket::AF_INET)
|
|
81
|
+
@udp.bind(@host, @port)
|
|
82
|
+
|
|
83
|
+
while true
|
|
84
|
+
line, client = @udp.recvfrom(8192)
|
|
85
|
+
begin
|
|
86
|
+
data = Gelfd::Parser.parse(line)
|
|
87
|
+
rescue => ex
|
|
88
|
+
@logger.warn("Gelfd failed to parse a message skipping", :exception => ex, :backtrace => ex.backtrace)
|
|
89
|
+
next
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Gelfd parser outputs null if it received and cached a non-final chunk
|
|
93
|
+
next if data.nil?
|
|
94
|
+
|
|
95
|
+
event = LogStash::Event.new(JSON.parse(data))
|
|
96
|
+
event["source_host"] = client[3]
|
|
97
|
+
if event["timestamp"].is_a?(Numeric)
|
|
98
|
+
event["@timestamp"] = Time.at(event["timestamp"]).gmtime
|
|
99
|
+
event.remove("timestamp")
|
|
100
|
+
end
|
|
101
|
+
remap_gelf(event) if @remap
|
|
102
|
+
strip_leading_underscore(event) if @strip_leading_underscore
|
|
103
|
+
decorate(event)
|
|
104
|
+
output_queue << event
|
|
105
|
+
end
|
|
106
|
+
rescue LogStash::ShutdownSignal
|
|
107
|
+
# Do nothing, shutdown.
|
|
108
|
+
ensure
|
|
109
|
+
if @udp
|
|
110
|
+
@udp.close_read rescue nil
|
|
111
|
+
@udp.close_write rescue nil
|
|
112
|
+
end
|
|
113
|
+
end # def udp_listener
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
def remap_gelf(event)
|
|
117
|
+
if event["full_message"]
|
|
118
|
+
event["message"] = event["full_message"].dup
|
|
119
|
+
event.remove("full_message")
|
|
120
|
+
if event["short_message"] == event["message"]
|
|
121
|
+
event.remove("short_message")
|
|
122
|
+
end
|
|
123
|
+
elsif event["short_message"]
|
|
124
|
+
event["message"] = event["short_message"].dup
|
|
125
|
+
event.remove("short_message")
|
|
126
|
+
end
|
|
127
|
+
end # def remap_gelf
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
def strip_leading_underscore(event)
|
|
131
|
+
# Map all '_foo' fields to simply 'foo'
|
|
132
|
+
event.to_hash.keys.each do |key|
|
|
133
|
+
next unless key[0,1] == "_"
|
|
134
|
+
event[key[1..-1]] = event[key]
|
|
135
|
+
event.remove(key)
|
|
136
|
+
end
|
|
137
|
+
end # deef removing_leading_underscores
|
|
138
|
+
end # class LogStash::Inputs::Gelf
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/threadable"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Push events to a GemFire region.
|
|
6
|
+
#
|
|
7
|
+
# GemFire is an object database.
|
|
8
|
+
#
|
|
9
|
+
# To use this plugin you need to add gemfire.jar to your CLASSPATH.
|
|
10
|
+
# Using format=json requires jackson.jar too; use of continuous
|
|
11
|
+
# queries requires antlr.jar.
|
|
12
|
+
#
|
|
13
|
+
# Note: this plugin has only been tested with GemFire 7.0.
|
|
14
|
+
#
|
|
15
|
+
class LogStash::Inputs::Gemfire < LogStash::Inputs::Threadable
|
|
16
|
+
|
|
17
|
+
config_name "gemfire"
|
|
18
|
+
milestone 1
|
|
19
|
+
|
|
20
|
+
default :codec, "plain"
|
|
21
|
+
|
|
22
|
+
# Your client cache name
|
|
23
|
+
config :cache_name, :validate => :string, :default => "logstash"
|
|
24
|
+
|
|
25
|
+
# The path to a GemFire client cache XML file.
|
|
26
|
+
#
|
|
27
|
+
# Example:
|
|
28
|
+
#
|
|
29
|
+
# <client-cache>
|
|
30
|
+
# <pool name="client-pool" subscription-enabled="true" subscription-redundancy="1">
|
|
31
|
+
# <locator host="localhost" port="31331"/>
|
|
32
|
+
# </pool>
|
|
33
|
+
# <region name="Logstash">
|
|
34
|
+
# <region-attributes refid="CACHING_PROXY" pool-name="client-pool" >
|
|
35
|
+
# </region-attributes>
|
|
36
|
+
# </region>
|
|
37
|
+
# </client-cache>
|
|
38
|
+
#
|
|
39
|
+
config :cache_xml_file, :validate => :string, :default => nil
|
|
40
|
+
|
|
41
|
+
# The region name
|
|
42
|
+
config :region_name, :validate => :string, :default => "Logstash"
|
|
43
|
+
|
|
44
|
+
# A regexp to use when registering interest for cache events.
|
|
45
|
+
# Ignored if a :query is specified.
|
|
46
|
+
config :interest_regexp, :validate => :string, :default => ".*"
|
|
47
|
+
|
|
48
|
+
# A query to run as a GemFire "continuous query"; if specified it takes
|
|
49
|
+
# precedence over :interest_regexp which will be ignore.
|
|
50
|
+
#
|
|
51
|
+
# Important: use of continuous queries requires subscriptions to be enabled on the client pool.
|
|
52
|
+
config :query, :validate => :string, :default => nil
|
|
53
|
+
|
|
54
|
+
# How the message is serialized in the cache. Can be one of "json" or "plain"; default is plain
|
|
55
|
+
config :serialization, :validate => :string, :default => nil
|
|
56
|
+
|
|
57
|
+
public
|
|
58
|
+
def register
|
|
59
|
+
import com.gemstone.gemfire.cache.AttributesMutator
|
|
60
|
+
import com.gemstone.gemfire.cache.InterestResultPolicy
|
|
61
|
+
import com.gemstone.gemfire.cache.client.ClientCacheFactory
|
|
62
|
+
import com.gemstone.gemfire.cache.client.ClientRegionShortcut
|
|
63
|
+
import com.gemstone.gemfire.cache.query.CqQuery
|
|
64
|
+
import com.gemstone.gemfire.cache.query.CqAttributes
|
|
65
|
+
import com.gemstone.gemfire.cache.query.CqAttributesFactory
|
|
66
|
+
import com.gemstone.gemfire.cache.query.QueryService
|
|
67
|
+
import com.gemstone.gemfire.cache.query.SelectResults
|
|
68
|
+
import com.gemstone.gemfire.pdx.JSONFormatter
|
|
69
|
+
|
|
70
|
+
@logger.info("Registering input", :plugin => self)
|
|
71
|
+
end # def register
|
|
72
|
+
|
|
73
|
+
def run(queue)
|
|
74
|
+
return if terminating?
|
|
75
|
+
connect
|
|
76
|
+
|
|
77
|
+
@logstash_queue = queue
|
|
78
|
+
|
|
79
|
+
if @query
|
|
80
|
+
continuous_query(@query)
|
|
81
|
+
else
|
|
82
|
+
register_interest(@interest_regexp)
|
|
83
|
+
end
|
|
84
|
+
end # def run
|
|
85
|
+
|
|
86
|
+
def teardown
|
|
87
|
+
@cache.close if @cache
|
|
88
|
+
@cache = nil
|
|
89
|
+
finished
|
|
90
|
+
end # def teardown
|
|
91
|
+
|
|
92
|
+
protected
|
|
93
|
+
def connect
|
|
94
|
+
begin
|
|
95
|
+
@logger.debug("Connecting to GemFire #{@cache_name}")
|
|
96
|
+
|
|
97
|
+
@cache = ClientCacheFactory.new.
|
|
98
|
+
set("name", @cache_name).
|
|
99
|
+
set("cache-xml-file", @cache_xml_file).create
|
|
100
|
+
@logger.debug("Created cache #{@cache.inspect}")
|
|
101
|
+
|
|
102
|
+
rescue => e
|
|
103
|
+
if terminating?
|
|
104
|
+
return
|
|
105
|
+
else
|
|
106
|
+
@logger.error("Gemfire connection error (during connect), will reconnect",
|
|
107
|
+
:exception => e, :backtrace => e.backtrace)
|
|
108
|
+
sleep(1)
|
|
109
|
+
retry
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
@region = @cache.getRegion(@region_name);
|
|
114
|
+
@logger.debug("Created region #{@region.inspect}")
|
|
115
|
+
end # def connect
|
|
116
|
+
|
|
117
|
+
protected
|
|
118
|
+
def continuous_query(query)
|
|
119
|
+
qs = @cache.getQueryService
|
|
120
|
+
|
|
121
|
+
cqAf = CqAttributesFactory.new
|
|
122
|
+
cqAf.addCqListener(self)
|
|
123
|
+
cqa = cqAf.create
|
|
124
|
+
|
|
125
|
+
@logger.debug("Running continuous query #{query}")
|
|
126
|
+
cq = qs.newCq("logstashCQ" + self.object_id.to_s, query, cqa)
|
|
127
|
+
|
|
128
|
+
cq.executeWithInitialResults
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def register_interest(interest)
|
|
132
|
+
@region.getAttributesMutator.addCacheListener(self)
|
|
133
|
+
@region.registerInterestRegex(interest, InterestResultPolicy::NONE, false, true)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def deserialize_message(message)
|
|
137
|
+
if @serialization == "json"
|
|
138
|
+
message ? JSONFormatter.toJSON(message) : "{}"
|
|
139
|
+
else
|
|
140
|
+
message
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def process_event(event, event_name)
|
|
145
|
+
message = deserialize_message(event)
|
|
146
|
+
@codec.decode(message) do |event|
|
|
147
|
+
decorate(event)
|
|
148
|
+
@logstash_queue << event
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# multiple interfaces
|
|
153
|
+
def close
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
#
|
|
157
|
+
# CqListener interface
|
|
158
|
+
#
|
|
159
|
+
def onEvent(event)
|
|
160
|
+
key = event.getKey
|
|
161
|
+
newValue = event.getNewValue
|
|
162
|
+
@logger.debug("onEvent #{event.getQueryOperation} #{key} #{newValue}")
|
|
163
|
+
|
|
164
|
+
process_event(event.getNewValue, "onEvent", "gemfire://query/#{key}/#{event.getQueryOperation}")
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def onError(event)
|
|
168
|
+
@logger.debug("onError #{event}")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
#
|
|
172
|
+
# CacheListener interface
|
|
173
|
+
#
|
|
174
|
+
protected
|
|
175
|
+
def afterCreate(event)
|
|
176
|
+
regionName = event.getRegion.getName
|
|
177
|
+
key = event.getKey
|
|
178
|
+
newValue = event.getNewValue
|
|
179
|
+
@logger.debug("afterCreate #{regionName} #{key} #{newValue}")
|
|
180
|
+
|
|
181
|
+
process_event(event.getNewValue, "afterCreate", "gemfire://#{regionName}/#{key}/afterCreate")
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def afterDestroy(event)
|
|
185
|
+
regionName = event.getRegion.getName
|
|
186
|
+
key = event.getKey
|
|
187
|
+
newValue = event.getNewValue
|
|
188
|
+
@logger.debug("afterDestroy #{regionName} #{key} #{newValue}")
|
|
189
|
+
|
|
190
|
+
process_event(nil, "afterDestroy", "gemfire://#{regionName}/#{key}/afterDestroy")
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def afterUpdate(event)
|
|
194
|
+
regionName = event.getRegion.getName
|
|
195
|
+
key = event.getKey
|
|
196
|
+
oldValue = event.getOldValue
|
|
197
|
+
newValue = event.getNewValue
|
|
198
|
+
@logger.debug("afterUpdate #{regionName} #{key} #{oldValue} -> #{newValue}")
|
|
199
|
+
|
|
200
|
+
process_event(event.getNewValue, "afterUpdate", "gemfire://#{regionName}/#{key}/afterUpdate")
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def afterRegionLive(event)
|
|
204
|
+
@logger.debug("afterRegionLive #{event}")
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def afterRegionCreate(event)
|
|
208
|
+
@logger.debug("afterRegionCreate #{event}")
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def afterRegionClear(event)
|
|
212
|
+
@logger.debug("afterRegionClear #{event}")
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def afterRegionDestroy(event)
|
|
216
|
+
@logger.debug("afterRegionDestroy #{event}")
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def afterRegionInvalidate(event)
|
|
220
|
+
@logger.debug("afterRegionInvalidate #{event}")
|
|
221
|
+
end
|
|
222
|
+
end # class LogStash::Inputs::Gemfire
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/threadable"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "socket" # for Socket.gethostname
|
|
5
|
+
|
|
6
|
+
# Generate random log events.
|
|
7
|
+
#
|
|
8
|
+
# The general intention of this is to test performance of plugins.
|
|
9
|
+
#
|
|
10
|
+
# An event is generated first
|
|
11
|
+
class LogStash::Inputs::Generator < LogStash::Inputs::Threadable
|
|
12
|
+
config_name "generator"
|
|
13
|
+
milestone 3
|
|
14
|
+
|
|
15
|
+
default :codec, "plain"
|
|
16
|
+
|
|
17
|
+
# The message string to use in the event.
|
|
18
|
+
#
|
|
19
|
+
# If you set this to 'stdin' then this plugin will read a single line from
|
|
20
|
+
# stdin and use that as the message string for every event.
|
|
21
|
+
#
|
|
22
|
+
# Otherwise, this value will be used verbatim as the event message.
|
|
23
|
+
config :message, :validate => :string, :default => "Hello world!"
|
|
24
|
+
|
|
25
|
+
# The lines to emit, in order. This option cannot be used with the 'message'
|
|
26
|
+
# setting.
|
|
27
|
+
#
|
|
28
|
+
# Example:
|
|
29
|
+
#
|
|
30
|
+
# input {
|
|
31
|
+
# generator {
|
|
32
|
+
# lines => [
|
|
33
|
+
# "line 1",
|
|
34
|
+
# "line 2",
|
|
35
|
+
# "line 3"
|
|
36
|
+
# ]
|
|
37
|
+
# }
|
|
38
|
+
#
|
|
39
|
+
# # Emit all lines 3 times.
|
|
40
|
+
# count => 3
|
|
41
|
+
# }
|
|
42
|
+
#
|
|
43
|
+
# The above will emit "line 1" then "line 2" then "line", then "line 1", etc...
|
|
44
|
+
config :lines, :validate => :array
|
|
45
|
+
|
|
46
|
+
# Set how many messages should be generated.
|
|
47
|
+
#
|
|
48
|
+
# The default, 0, means generate an unlimited number of events.
|
|
49
|
+
config :count, :validate => :number, :default => 0
|
|
50
|
+
|
|
51
|
+
public
|
|
52
|
+
def register
|
|
53
|
+
@host = Socket.gethostname
|
|
54
|
+
@count = @count.first if @count.is_a?(Array)
|
|
55
|
+
@lines = [@message] if @lines.nil?
|
|
56
|
+
end # def register
|
|
57
|
+
|
|
58
|
+
def run(queue)
|
|
59
|
+
number = 0
|
|
60
|
+
|
|
61
|
+
if @message == "stdin"
|
|
62
|
+
@logger.info("Generator plugin reading a line from stdin")
|
|
63
|
+
@message = $stdin.readline
|
|
64
|
+
@logger.debug("Generator line read complete", :message => @message)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
while !finished? && (@count <= 0 || number < @count)
|
|
68
|
+
@lines.each do |line|
|
|
69
|
+
@codec.decode(line.clone) do |event|
|
|
70
|
+
decorate(event)
|
|
71
|
+
event["host"] = @host
|
|
72
|
+
event["sequence"] = number
|
|
73
|
+
queue << event
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
number += 1
|
|
77
|
+
end # loop
|
|
78
|
+
|
|
79
|
+
if @codec.respond_to?(:flush)
|
|
80
|
+
@codec.flush do |event|
|
|
81
|
+
decorate(event)
|
|
82
|
+
event["host"] = @host
|
|
83
|
+
queue << event
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end # def run
|
|
87
|
+
|
|
88
|
+
public
|
|
89
|
+
def teardown
|
|
90
|
+
@codec.flush do |event|
|
|
91
|
+
decorate(event)
|
|
92
|
+
event["host"] = @host
|
|
93
|
+
queue << event
|
|
94
|
+
end
|
|
95
|
+
finished
|
|
96
|
+
end # def teardown
|
|
97
|
+
end # class LogStash::Inputs::Generator
|