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,41 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/tcp"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Receive graphite metrics. This plugin understands the text-based graphite
|
|
6
|
+
# carbon protocol. Both 'N' and specific-timestamp forms are supported, example:
|
|
7
|
+
#
|
|
8
|
+
# mysql.slow_query.count 204 N
|
|
9
|
+
# haproxy.live_backends 7 1364608909
|
|
10
|
+
#
|
|
11
|
+
# 'N' means 'now' for a timestamp. This plugin also supports having the time
|
|
12
|
+
# specified in the metric payload:
|
|
13
|
+
#
|
|
14
|
+
# For every metric received from a client, a single event will be emitted with
|
|
15
|
+
# the metric name as the field (like 'mysql.slow_query.count') and the metric
|
|
16
|
+
# value as the field's value.
|
|
17
|
+
class LogStash::Inputs::Graphite < LogStash::Inputs::Tcp
|
|
18
|
+
config_name "graphite"
|
|
19
|
+
milestone 1
|
|
20
|
+
|
|
21
|
+
ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
|
|
22
|
+
|
|
23
|
+
public
|
|
24
|
+
def run(output_queue)
|
|
25
|
+
@queue = output_queue
|
|
26
|
+
super(self)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# This is a silly hack to make the superclass (Tcp) give us a finished event
|
|
30
|
+
# so that we can parse it accordingly.
|
|
31
|
+
def <<(event)
|
|
32
|
+
name, value, time = event["message"].split(" ")
|
|
33
|
+
event[name] = value.to_f
|
|
34
|
+
|
|
35
|
+
if time != "N"
|
|
36
|
+
event["@timestamp"] = Time.at(time.to_i).gmtime
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
@queue << event
|
|
40
|
+
end
|
|
41
|
+
end # class LogStash::Inputs::Graphite
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Stream events from a heroku app's logs.
|
|
6
|
+
#
|
|
7
|
+
# This will read events in a manner similar to how the `heroku logs -t` command
|
|
8
|
+
# fetches logs.
|
|
9
|
+
#
|
|
10
|
+
# Recommended filters:
|
|
11
|
+
#
|
|
12
|
+
# filter {
|
|
13
|
+
# grok {
|
|
14
|
+
# pattern => "^%{TIMESTAMP_ISO8601:timestamp} %{WORD:component}\[%{WORD:process}(?:\.%{INT:instance:int})?\]: %{DATA:message}$"
|
|
15
|
+
# }
|
|
16
|
+
# date { timestamp => ISO8601 }
|
|
17
|
+
# }
|
|
18
|
+
class LogStash::Inputs::Heroku < LogStash::Inputs::Base
|
|
19
|
+
config_name "heroku"
|
|
20
|
+
milestone 1
|
|
21
|
+
|
|
22
|
+
default :codec, "plain"
|
|
23
|
+
|
|
24
|
+
# The name of your heroku application. This is usually the first part of the
|
|
25
|
+
# the domain name 'my-app-name.herokuapp.com'
|
|
26
|
+
config :app, :validate => :string, :required => true
|
|
27
|
+
|
|
28
|
+
public
|
|
29
|
+
def register
|
|
30
|
+
require "heroku"
|
|
31
|
+
require "logstash/util/buftok"
|
|
32
|
+
end # def register
|
|
33
|
+
|
|
34
|
+
public
|
|
35
|
+
def run(queue)
|
|
36
|
+
client = Heroku::Client.new(Heroku::Auth.user, Heroku::Auth.password)
|
|
37
|
+
|
|
38
|
+
# The 'Herok::Client#read_logs' method emits chunks of text not bounded
|
|
39
|
+
# by event barriers like newlines.
|
|
40
|
+
# tail=1 means to follow logs
|
|
41
|
+
# I *think* setting num=1 means we only get 1 historical event. Setting
|
|
42
|
+
# this to 0 makes it fetch *all* events, not what I want.
|
|
43
|
+
client.read_logs(@app, ["tail=1", "num=1"]) do |chunk|
|
|
44
|
+
@codec.decode(chunk) do |event|
|
|
45
|
+
decorate(event)
|
|
46
|
+
event["app"] = @app
|
|
47
|
+
queue << event
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end # def run
|
|
51
|
+
end # class LogStash::Inputs::Heroku
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "stud/interval"
|
|
5
|
+
require "socket" # for Socket.gethostname
|
|
6
|
+
|
|
7
|
+
# Read mail from IMAP servers
|
|
8
|
+
#
|
|
9
|
+
# Periodically scans INBOX and moves any read messages
|
|
10
|
+
# to the trash.
|
|
11
|
+
class LogStash::Inputs::IMAP < LogStash::Inputs::Base
|
|
12
|
+
config_name "imap"
|
|
13
|
+
milestone 1
|
|
14
|
+
ISO8601_STRFTIME = "%04d-%02d-%02dT%02d:%02d:%02d.%06d%+03d:00".freeze
|
|
15
|
+
|
|
16
|
+
config :host, :validate => :string, :required => true
|
|
17
|
+
config :port, :validate => :number
|
|
18
|
+
|
|
19
|
+
config :user, :validate => :string, :required => true
|
|
20
|
+
config :password, :validate => :password, :required => true
|
|
21
|
+
config :secure, :validate => :boolean, :default => true
|
|
22
|
+
|
|
23
|
+
config :fetch_count, :validate => :number, :default => 50
|
|
24
|
+
config :lowercase_headers, :validate => :boolean, :default => true
|
|
25
|
+
config :check_interval, :validate => :number, :default => 300
|
|
26
|
+
config :delete, :validate => :boolean, :default => false
|
|
27
|
+
|
|
28
|
+
# For multipart messages, use the first part that has this
|
|
29
|
+
# content-type as the event message.
|
|
30
|
+
config :content_type, :validate => :string, :default => "text/plain"
|
|
31
|
+
|
|
32
|
+
public
|
|
33
|
+
def register
|
|
34
|
+
require "net/imap" # in stdlib
|
|
35
|
+
require "mail" # gem 'mail'
|
|
36
|
+
|
|
37
|
+
if @port.nil?
|
|
38
|
+
if @secure
|
|
39
|
+
@port = 993
|
|
40
|
+
else
|
|
41
|
+
@port = 143
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
@content_type_re = Regexp.new("^" + @content_type)
|
|
46
|
+
end # def register
|
|
47
|
+
|
|
48
|
+
def connect
|
|
49
|
+
imap = Net::IMAP.new(@host, :port => @port, :ssl => @secure)
|
|
50
|
+
imap.login(@user, @password.value)
|
|
51
|
+
return imap
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def run(queue)
|
|
55
|
+
Stud.interval(@check_interval) do
|
|
56
|
+
check_mail(queue)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def check_mail(queue)
|
|
61
|
+
# TODO(sissel): handle exceptions happening during runtime:
|
|
62
|
+
# EOFError, OpenSSL::SSL::SSLError
|
|
63
|
+
imap = connect
|
|
64
|
+
imap.select("INBOX")
|
|
65
|
+
ids = imap.search("NOT SEEN")
|
|
66
|
+
|
|
67
|
+
ids.each_slice(@fetch_count) do |id_set|
|
|
68
|
+
items = imap.fetch(id_set, "RFC822")
|
|
69
|
+
items.each do |item|
|
|
70
|
+
next unless item.attr.has_key?("RFC822")
|
|
71
|
+
mail = Mail.read_from_string(item.attr["RFC822"])
|
|
72
|
+
queue << parse_mail(mail)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
imap.store(id_set, '+FLAGS', @delete ? :Deleted : :Seen)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
imap.close
|
|
79
|
+
imap.disconnect
|
|
80
|
+
end # def run
|
|
81
|
+
|
|
82
|
+
def parse_mail(mail)
|
|
83
|
+
# TODO(sissel): What should a multipart message look like as an event?
|
|
84
|
+
# For now, just take the plain-text part and set it as the message.
|
|
85
|
+
if mail.parts.count == 0
|
|
86
|
+
# No multipart message, just use the body as the event text
|
|
87
|
+
message = mail.body.decoded
|
|
88
|
+
else
|
|
89
|
+
# Multipart message; use the first text/plain part we find
|
|
90
|
+
part = mail.parts.find { |p| p.content_type.match @content_type_re } || mail.parts.first
|
|
91
|
+
message = part.decoded
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
event = LogStash::Event.new("message" => message)
|
|
95
|
+
|
|
96
|
+
# Use the 'Date' field as the timestamp
|
|
97
|
+
event["@timestamp"] = mail.date.to_time.gmtime
|
|
98
|
+
|
|
99
|
+
# Add fields: Add message.header_fields { |h| h.name=> h.value }
|
|
100
|
+
mail.header_fields.each do |header|
|
|
101
|
+
if @lowercase_headers
|
|
102
|
+
# 'header.name' can sometimes be a Mail::Multibyte::Chars, get it in
|
|
103
|
+
# String form
|
|
104
|
+
name = header.name.to_s.downcase
|
|
105
|
+
else
|
|
106
|
+
name = header.name.to_s
|
|
107
|
+
end
|
|
108
|
+
# Call .decoded on the header in case it's in encoded-word form.
|
|
109
|
+
# Details at:
|
|
110
|
+
# https://github.com/mikel/mail/blob/master/README.md#encodings
|
|
111
|
+
# http://tools.ietf.org/html/rfc2047#section-2
|
|
112
|
+
value = header.decoded
|
|
113
|
+
|
|
114
|
+
# Assume we already processed the 'date' above.
|
|
115
|
+
next if name == "Date"
|
|
116
|
+
|
|
117
|
+
case event[name]
|
|
118
|
+
# promote string to array if a header appears multiple times
|
|
119
|
+
# (like 'received')
|
|
120
|
+
when String; event[name] = [event[name], value]
|
|
121
|
+
when Array; event[name].is_a?(Array)
|
|
122
|
+
when nil; event[name] = value
|
|
123
|
+
end
|
|
124
|
+
end # mail.header_fields.each
|
|
125
|
+
|
|
126
|
+
decorate(event)
|
|
127
|
+
|
|
128
|
+
return event
|
|
129
|
+
end # def handle
|
|
130
|
+
|
|
131
|
+
public
|
|
132
|
+
def teardown
|
|
133
|
+
$stdin.close
|
|
134
|
+
finished
|
|
135
|
+
end # def teardown
|
|
136
|
+
end # class LogStash::Inputs::IMAP
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "thread"
|
|
5
|
+
|
|
6
|
+
# Read events from an IRC Server.
|
|
7
|
+
#
|
|
8
|
+
class LogStash::Inputs::Irc < LogStash::Inputs::Base
|
|
9
|
+
|
|
10
|
+
config_name "irc"
|
|
11
|
+
milestone 1
|
|
12
|
+
|
|
13
|
+
default :codec, "plain"
|
|
14
|
+
|
|
15
|
+
# Host of the IRC Server to connect to.
|
|
16
|
+
config :host, :validate => :string, :required => true
|
|
17
|
+
|
|
18
|
+
# Port for the IRC Server
|
|
19
|
+
config :port, :validate => :number, :default => 6667
|
|
20
|
+
|
|
21
|
+
# Set this to true to enable SSL.
|
|
22
|
+
config :secure, :validate => :boolean, :default => false
|
|
23
|
+
|
|
24
|
+
# IRC Nickname
|
|
25
|
+
config :nick, :validate => :string, :default => "logstash"
|
|
26
|
+
|
|
27
|
+
# IRC Username
|
|
28
|
+
config :user, :validate => :string, :default => "logstash"
|
|
29
|
+
|
|
30
|
+
# IRC Real name
|
|
31
|
+
config :real, :validate => :string, :default => "logstash"
|
|
32
|
+
|
|
33
|
+
# IRC Server password
|
|
34
|
+
config :password, :validate => :password
|
|
35
|
+
|
|
36
|
+
# Channels to join and read messages from.
|
|
37
|
+
#
|
|
38
|
+
# These should be full channel names including the '#' symbol, such as
|
|
39
|
+
# "#logstash".
|
|
40
|
+
config :channels, :validate => :array, :required => true
|
|
41
|
+
|
|
42
|
+
public
|
|
43
|
+
def register
|
|
44
|
+
require "cinch"
|
|
45
|
+
@irc_queue = Queue.new
|
|
46
|
+
@logger.info("Connecting to irc server", :host => @host, :port => @port, :nick => @nick, :channels => @channels)
|
|
47
|
+
|
|
48
|
+
@bot = Cinch::Bot.new
|
|
49
|
+
@bot.loggers.clear
|
|
50
|
+
@bot.configure do |c|
|
|
51
|
+
c.server = @host
|
|
52
|
+
c.port = @port
|
|
53
|
+
c.nick = @nick
|
|
54
|
+
c.user = @user
|
|
55
|
+
c.realname = @real
|
|
56
|
+
c.channels = @channels
|
|
57
|
+
c.password = @password.value rescue nil
|
|
58
|
+
c.ssl.use = @secure
|
|
59
|
+
end
|
|
60
|
+
queue = @irc_queue
|
|
61
|
+
@bot.on :channel do |m|
|
|
62
|
+
queue << m
|
|
63
|
+
end
|
|
64
|
+
end # def register
|
|
65
|
+
|
|
66
|
+
public
|
|
67
|
+
def run(output_queue)
|
|
68
|
+
Thread.new(@bot) do |bot|
|
|
69
|
+
bot.start
|
|
70
|
+
end
|
|
71
|
+
loop do
|
|
72
|
+
msg = @irc_queue.pop
|
|
73
|
+
if msg.user
|
|
74
|
+
@codec.decode(msg.message) do |event|
|
|
75
|
+
decorate(event)
|
|
76
|
+
event["channel"] = msg.channel.to_s
|
|
77
|
+
event["nick"] = msg.user.nick
|
|
78
|
+
event["server"] = "#{@host}:#{@port}"
|
|
79
|
+
output_queue << event
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end # def run
|
|
84
|
+
end # class LogStash::Inputs::Irc
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/inputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/util/socket_peer"
|
|
5
|
+
require "socket"
|
|
6
|
+
require "timeout"
|
|
7
|
+
|
|
8
|
+
# Read events over a TCP socket from Log4j SocketAppender.
|
|
9
|
+
#
|
|
10
|
+
# Can either accept connections from clients or connect to a server,
|
|
11
|
+
# depending on `mode`. Depending on mode, you need a matching SocketAppender or SocketHubAppender on the remote side
|
|
12
|
+
class LogStash::Inputs::Log4j < LogStash::Inputs::Base
|
|
13
|
+
|
|
14
|
+
config_name "log4j"
|
|
15
|
+
milestone 1
|
|
16
|
+
|
|
17
|
+
# When mode is `server`, the address to listen on.
|
|
18
|
+
# When mode is `client`, the address to connect to.
|
|
19
|
+
config :host, :validate => :string, :default => "0.0.0.0"
|
|
20
|
+
|
|
21
|
+
# When mode is `server`, the port to listen on.
|
|
22
|
+
# When mode is `client`, the port to connect to.
|
|
23
|
+
config :port, :validate => :number, :required => true
|
|
24
|
+
|
|
25
|
+
# Read timeout in seconds. If a particular tcp connection is
|
|
26
|
+
# idle for more than this timeout period, we will assume
|
|
27
|
+
# it is dead and close it.
|
|
28
|
+
# If you never want to timeout, use -1.
|
|
29
|
+
config :data_timeout, :validate => :number, :default => 5
|
|
30
|
+
|
|
31
|
+
# Mode to operate in. `server` listens for client connections,
|
|
32
|
+
# `client` connects to a server.
|
|
33
|
+
config :mode, :validate => ["server", "client"], :default => "server"
|
|
34
|
+
|
|
35
|
+
def initialize(*args)
|
|
36
|
+
super(*args)
|
|
37
|
+
end # def initialize
|
|
38
|
+
|
|
39
|
+
public
|
|
40
|
+
def register
|
|
41
|
+
require "java"
|
|
42
|
+
require "jruby/serialization"
|
|
43
|
+
|
|
44
|
+
if __FILE__ !~ /^(jar:)?file:\/\//
|
|
45
|
+
if File.exists?("vendor/jar/elasticsearch-0.90.3/lib/log4j-1.2.17.jar")
|
|
46
|
+
require "vendor/jar/elasticsearch-0.90.3/lib/log4j-1.2.17.jar"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if server?
|
|
51
|
+
@logger.info("Starting Log4j input listener", :address => "#{@host}:#{@port}")
|
|
52
|
+
@server_socket = TCPServer.new(@host, @port)
|
|
53
|
+
end
|
|
54
|
+
@logger.info("Log4j input")
|
|
55
|
+
end # def register
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
def handle_socket(socket, output_queue)
|
|
59
|
+
begin
|
|
60
|
+
# JRubyObjectInputStream uses JRuby class path to find the class to de-serialize to
|
|
61
|
+
ois = JRubyObjectInputStream.new(java.io.BufferedInputStream.new(socket.to_inputstream))
|
|
62
|
+
loop do
|
|
63
|
+
# NOTE: event_raw is org.apache.log4j.spi.LoggingEvent
|
|
64
|
+
log4j_obj = ois.readObject
|
|
65
|
+
event = LogStash::Event.new("message" => log4j_obj.getRenderedMessage)
|
|
66
|
+
decorate(event)
|
|
67
|
+
event["host"] = socket.peer
|
|
68
|
+
event["path"] = log4j_obj.getLoggerName
|
|
69
|
+
event["priority"] = log4j_obj.getLevel.toString
|
|
70
|
+
event["logger_name"] = log4j_obj.getLoggerName
|
|
71
|
+
event["thread"] = log4j_obj.getThreadName
|
|
72
|
+
event["class"] = log4j_obj.getLocationInformation.getClassName
|
|
73
|
+
event["file"] = log4j_obj.getLocationInformation.getFileName + ":" + log4j_obj.getLocationInformation.getLineNumber
|
|
74
|
+
event["method"] = log4j_obj.getLocationInformation.getMethodName
|
|
75
|
+
event["NDC"] = log4j_obj.getNDC if log4j_obj.getNDC
|
|
76
|
+
event["stack_trace"] = log4j_obj.getThrowableStrRep.to_a.join("\n") if log4j_obj.getThrowableInformation
|
|
77
|
+
|
|
78
|
+
# Add the MDC context properties to '@fields'
|
|
79
|
+
if log4j_obj.getProperties
|
|
80
|
+
log4j_obj.getPropertyKeySet.each do |key|
|
|
81
|
+
event[key] = log4j_obj.getProperty(key)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
output_queue << event
|
|
86
|
+
end # loop do
|
|
87
|
+
rescue => e
|
|
88
|
+
@logger.debug("Closing connection", :client => socket.peer,
|
|
89
|
+
:exception => e)
|
|
90
|
+
rescue Timeout::Error
|
|
91
|
+
@logger.debug("Closing connection after read timeout",
|
|
92
|
+
:client => socket.peer)
|
|
93
|
+
end # begin
|
|
94
|
+
ensure
|
|
95
|
+
begin
|
|
96
|
+
socket.close
|
|
97
|
+
rescue IOError
|
|
98
|
+
pass
|
|
99
|
+
end # begin
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
def server?
|
|
104
|
+
@mode == "server"
|
|
105
|
+
end # def server?
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
def readline(socket)
|
|
109
|
+
line = socket.readline
|
|
110
|
+
end # def readline
|
|
111
|
+
|
|
112
|
+
public
|
|
113
|
+
def run(output_queue)
|
|
114
|
+
if server?
|
|
115
|
+
loop do
|
|
116
|
+
# Start a new thread for each connection.
|
|
117
|
+
Thread.start(@server_socket.accept) do |s|
|
|
118
|
+
# TODO(sissel): put this block in its own method.
|
|
119
|
+
|
|
120
|
+
# monkeypatch a 'peer' method onto the socket.
|
|
121
|
+
s.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
|
|
122
|
+
@logger.debug("Accepted connection", :client => s.peer,
|
|
123
|
+
:server => "#{@host}:#{@port}")
|
|
124
|
+
handle_socket(s, output_queue)
|
|
125
|
+
end # Thread.start
|
|
126
|
+
end # loop
|
|
127
|
+
else
|
|
128
|
+
loop do
|
|
129
|
+
client_socket = TCPSocket.new(@host, @port)
|
|
130
|
+
client_socket.instance_eval { class << self; include ::LogStash::Util::SocketPeer end }
|
|
131
|
+
@logger.debug("Opened connection", :client => "#{client_socket.peer}")
|
|
132
|
+
handle_socket(client_socket, output_queue)
|
|
133
|
+
end # loop
|
|
134
|
+
end
|
|
135
|
+
end # def run
|
|
136
|
+
end # class LogStash::Inputs::Log4j
|