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
data/docs/docgen.rb
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "erb"
|
|
3
|
+
require "optparse"
|
|
4
|
+
require "bluecloth" # for markdown parsing
|
|
5
|
+
|
|
6
|
+
$: << Dir.pwd
|
|
7
|
+
$: << File.join(File.dirname(__FILE__), "..", "lib")
|
|
8
|
+
|
|
9
|
+
require "logstash/config/mixin"
|
|
10
|
+
require "logstash/inputs/base"
|
|
11
|
+
require "logstash/codecs/base"
|
|
12
|
+
require "logstash/filters/base"
|
|
13
|
+
require "logstash/outputs/base"
|
|
14
|
+
require "logstash/version"
|
|
15
|
+
|
|
16
|
+
class LogStashConfigDocGenerator
|
|
17
|
+
COMMENT_RE = /^ *#(?: (.*)| *$)/
|
|
18
|
+
|
|
19
|
+
def initialize
|
|
20
|
+
@rules = {
|
|
21
|
+
COMMENT_RE => lambda { |m| add_comment(m[1]) },
|
|
22
|
+
/^ *class.*< *LogStash::(Outputs|Filters|Inputs|Codecs)::(Base|Threadable)/ => \
|
|
23
|
+
lambda { |m| set_class_description },
|
|
24
|
+
/^ *config +[^=].*/ => lambda { |m| add_config(m[0]) },
|
|
25
|
+
/^ *milestone .*/ => lambda { |m| set_milestone(m[0]) },
|
|
26
|
+
/^ *config_name .*/ => lambda { |m| set_config_name(m[0]) },
|
|
27
|
+
/^ *flag[( ].*/ => lambda { |m| add_flag(m[0]) },
|
|
28
|
+
/^ *(class|def|module) / => lambda { |m| clear_comments },
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def parse(string)
|
|
33
|
+
clear_comments
|
|
34
|
+
buffer = ""
|
|
35
|
+
string.split(/\r\n|\n/).each do |line|
|
|
36
|
+
# Join long lines
|
|
37
|
+
if line =~ COMMENT_RE
|
|
38
|
+
# nothing
|
|
39
|
+
else
|
|
40
|
+
# Join extended lines
|
|
41
|
+
if line =~ /(, *$)|(\\$)|(\[ *$)/
|
|
42
|
+
buffer += line.gsub(/\\$/, "")
|
|
43
|
+
next
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
line = buffer + line
|
|
48
|
+
buffer = ""
|
|
49
|
+
|
|
50
|
+
@rules.each do |re, action|
|
|
51
|
+
m = re.match(line)
|
|
52
|
+
if m
|
|
53
|
+
action.call(m)
|
|
54
|
+
end
|
|
55
|
+
end # RULES.each
|
|
56
|
+
end # string.split("\n").each
|
|
57
|
+
end # def parse
|
|
58
|
+
|
|
59
|
+
def set_class_description
|
|
60
|
+
@class_description = @comments.join("\n")
|
|
61
|
+
clear_comments
|
|
62
|
+
end # def set_class_description
|
|
63
|
+
|
|
64
|
+
def add_comment(comment)
|
|
65
|
+
return if comment == "encoding: utf-8"
|
|
66
|
+
@comments << comment
|
|
67
|
+
end # def add_comment
|
|
68
|
+
|
|
69
|
+
def add_config(code)
|
|
70
|
+
# I just care about the 'config :name' part
|
|
71
|
+
code = code.sub(/,.*/, "")
|
|
72
|
+
|
|
73
|
+
# call the code, which calls 'config' in this class.
|
|
74
|
+
# This will let us align comments with config options.
|
|
75
|
+
name, opts = eval(code)
|
|
76
|
+
|
|
77
|
+
# TODO(sissel): This hack is only required until regexp configs
|
|
78
|
+
# are gone from logstash.
|
|
79
|
+
name = name.to_s unless name.is_a?(Regexp)
|
|
80
|
+
|
|
81
|
+
description = BlueCloth.new(@comments.join("\n")).to_html
|
|
82
|
+
@attributes[name][:description] = description
|
|
83
|
+
clear_comments
|
|
84
|
+
end # def add_config
|
|
85
|
+
|
|
86
|
+
def add_flag(code)
|
|
87
|
+
# call the code, which calls 'config' in this class.
|
|
88
|
+
# This will let us align comments with config options.
|
|
89
|
+
#p :code => code
|
|
90
|
+
fixed_code = code.gsub(/ do .*/, "")
|
|
91
|
+
#p :fixedcode => fixed_code
|
|
92
|
+
name, description = eval(fixed_code)
|
|
93
|
+
@flags[name] = description
|
|
94
|
+
clear_comments
|
|
95
|
+
end # def add_flag
|
|
96
|
+
|
|
97
|
+
def set_config_name(code)
|
|
98
|
+
name = eval(code)
|
|
99
|
+
@name = name
|
|
100
|
+
end # def set_config_name
|
|
101
|
+
|
|
102
|
+
def set_milestone(code)
|
|
103
|
+
@milestone = eval(code)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# pretend to be the config DSL and just get the name
|
|
107
|
+
def config(name, opts={})
|
|
108
|
+
return name, opts
|
|
109
|
+
end # def config
|
|
110
|
+
|
|
111
|
+
# Pretend to support the flag DSL
|
|
112
|
+
def flag(*args, &block)
|
|
113
|
+
name = args.first
|
|
114
|
+
description = args.last
|
|
115
|
+
return name, description
|
|
116
|
+
end # def config
|
|
117
|
+
|
|
118
|
+
# pretend to be the config dsl's 'config_name' method
|
|
119
|
+
def config_name(name)
|
|
120
|
+
return name
|
|
121
|
+
end # def config_name
|
|
122
|
+
|
|
123
|
+
# pretend to be the config dsl's 'milestone' method
|
|
124
|
+
def milestone(m)
|
|
125
|
+
return m
|
|
126
|
+
end # def milestone
|
|
127
|
+
|
|
128
|
+
def clear_comments
|
|
129
|
+
@comments.clear
|
|
130
|
+
end # def clear_comments
|
|
131
|
+
|
|
132
|
+
def generate(file, settings)
|
|
133
|
+
@class_description = ""
|
|
134
|
+
@milestone = ""
|
|
135
|
+
@comments = []
|
|
136
|
+
@attributes = Hash.new { |h,k| h[k] = {} }
|
|
137
|
+
@flags = {}
|
|
138
|
+
|
|
139
|
+
# local scoping for the monkeypatch belowg
|
|
140
|
+
attributes = @attributes
|
|
141
|
+
# Monkeypatch the 'config' method to capture
|
|
142
|
+
# Note, this monkeypatch requires us do the config processing
|
|
143
|
+
# one at a time.
|
|
144
|
+
#LogStash::Config::Mixin::DSL.instance_eval do
|
|
145
|
+
#define_method(:config) do |name, opts={}|
|
|
146
|
+
#p name => opts
|
|
147
|
+
#attributes[name].merge!(opts)
|
|
148
|
+
#end
|
|
149
|
+
#end
|
|
150
|
+
|
|
151
|
+
# Loading the file will trigger the config dsl which should
|
|
152
|
+
# collect all the config settings.
|
|
153
|
+
load file
|
|
154
|
+
|
|
155
|
+
# parse base first
|
|
156
|
+
parse(File.new(File.join(File.dirname(file), "base.rb"), "r").read)
|
|
157
|
+
|
|
158
|
+
# Now parse the real library
|
|
159
|
+
code = File.new(file).read
|
|
160
|
+
|
|
161
|
+
# inputs either inherit from Base or Threadable.
|
|
162
|
+
if code =~ /\< LogStash::Inputs::Threadable/
|
|
163
|
+
parse(File.new(File.join(File.dirname(file), "threadable.rb"), "r").read)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
if code =~ /include LogStash::PluginMixins/
|
|
167
|
+
mixin = code.gsub(/.*include LogStash::PluginMixins::(\w+)\s.*/m, '\1')
|
|
168
|
+
mixin.gsub!(/(.)([A-Z])/, '\1_\2')
|
|
169
|
+
mixin.downcase!
|
|
170
|
+
parse(File.new(File.join(File.dirname(file), "..", "plugin_mixins", "#{mixin}.rb")).read)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
parse(code)
|
|
174
|
+
|
|
175
|
+
puts "Generating docs for #{file}"
|
|
176
|
+
|
|
177
|
+
if @name.nil?
|
|
178
|
+
$stderr.puts "Missing 'config_name' setting in #{file}?"
|
|
179
|
+
return nil
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
klass = LogStash::Config::Registry.registry[@name]
|
|
183
|
+
if klass.ancestors.include?(LogStash::Inputs::Base)
|
|
184
|
+
section = "input"
|
|
185
|
+
elsif klass.ancestors.include?(LogStash::Filters::Base)
|
|
186
|
+
section = "filter"
|
|
187
|
+
elsif klass.ancestors.include?(LogStash::Outputs::Base)
|
|
188
|
+
section = "output"
|
|
189
|
+
elsif klass.ancestors.include?(LogStash::Codecs::Base)
|
|
190
|
+
section = "codec"
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
template_file = File.join(File.dirname(__FILE__), "plugin-doc.html.erb")
|
|
194
|
+
template = ERB.new(File.new(template_file).read, nil, "-")
|
|
195
|
+
|
|
196
|
+
# descriptions are assumed to be markdown
|
|
197
|
+
description = BlueCloth.new(@class_description).to_html
|
|
198
|
+
|
|
199
|
+
klass.get_config.each do |name, settings|
|
|
200
|
+
@attributes[name].merge!(settings)
|
|
201
|
+
end
|
|
202
|
+
sorted_attributes = @attributes.sort { |a,b| a.first.to_s <=> b.first.to_s }
|
|
203
|
+
klassname = LogStash::Config::Registry.registry[@name].to_s
|
|
204
|
+
name = @name
|
|
205
|
+
|
|
206
|
+
synopsis_file = File.join(File.dirname(__FILE__), "plugin-synopsis.html.erb")
|
|
207
|
+
synopsis = ERB.new(File.new(synopsis_file).read, nil, "-").result(binding)
|
|
208
|
+
|
|
209
|
+
if settings[:output]
|
|
210
|
+
dir = File.join(settings[:output], section + "s")
|
|
211
|
+
path = File.join(dir, "#{name}.html")
|
|
212
|
+
Dir.mkdir(settings[:output]) if !File.directory?(settings[:output])
|
|
213
|
+
Dir.mkdir(dir) if !File.directory?(dir)
|
|
214
|
+
File.open(path, "w") do |out|
|
|
215
|
+
html = template.result(binding)
|
|
216
|
+
html.gsub!("%VERSION%", LOGSTASH_VERSION)
|
|
217
|
+
html.gsub!("%PLUGIN%", @name)
|
|
218
|
+
out.puts(html)
|
|
219
|
+
end
|
|
220
|
+
else
|
|
221
|
+
puts template.result(binding)
|
|
222
|
+
end
|
|
223
|
+
end # def generate
|
|
224
|
+
|
|
225
|
+
end # class LogStashConfigDocGenerator
|
|
226
|
+
|
|
227
|
+
if __FILE__ == $0
|
|
228
|
+
opts = OptionParser.new
|
|
229
|
+
settings = {}
|
|
230
|
+
opts.on("-o DIR", "--output DIR",
|
|
231
|
+
"Directory to output to; optional. If not specified,"\
|
|
232
|
+
"we write to stdout.") do |val|
|
|
233
|
+
settings[:output] = val
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
args = opts.parse(ARGV)
|
|
237
|
+
|
|
238
|
+
args.each do |arg|
|
|
239
|
+
gen = LogStashConfigDocGenerator.new
|
|
240
|
+
gen.generate(arg, settings)
|
|
241
|
+
end
|
|
242
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How to extend - logstash
|
|
3
|
+
layout: content_right
|
|
4
|
+
---
|
|
5
|
+
# Add a new filter
|
|
6
|
+
|
|
7
|
+
This document shows you how to add a new filter to logstash.
|
|
8
|
+
|
|
9
|
+
For a general overview of how to add a new plugin, see [the extending
|
|
10
|
+
logstash](.) overview.
|
|
11
|
+
|
|
12
|
+
## Write code.
|
|
13
|
+
|
|
14
|
+
Let's write a 'hello world' filter. This filter will replace the 'message' in
|
|
15
|
+
the event with "Hello world!"
|
|
16
|
+
|
|
17
|
+
First, logstash expects plugins in a certain directory structure: `logstash/TYPE/PLUGIN_NAME.rb`
|
|
18
|
+
|
|
19
|
+
Since we're creating a filter, let's mkdir this:
|
|
20
|
+
|
|
21
|
+
mkdir -p logstash/filters/
|
|
22
|
+
cd logstash/filters
|
|
23
|
+
|
|
24
|
+
Now add the code:
|
|
25
|
+
|
|
26
|
+
# Call this file 'foo.rb' (in logstash/filters, as above)
|
|
27
|
+
require "logstash/filters/base"
|
|
28
|
+
require "logstash/namespace"
|
|
29
|
+
|
|
30
|
+
class LogStash::Filters::Foo < LogStash::Filters::Base
|
|
31
|
+
|
|
32
|
+
# Setting the config_name here is required. This is how you
|
|
33
|
+
# configure this filter from your logstash config.
|
|
34
|
+
#
|
|
35
|
+
# filter {
|
|
36
|
+
# foo { ... }
|
|
37
|
+
# }
|
|
38
|
+
config_name "foo"
|
|
39
|
+
|
|
40
|
+
# New plugins should start life at milestone 1.
|
|
41
|
+
milestone 1
|
|
42
|
+
|
|
43
|
+
# Replace the message with this value.
|
|
44
|
+
config :message, :validate => :string
|
|
45
|
+
|
|
46
|
+
public
|
|
47
|
+
def register
|
|
48
|
+
# nothing to do
|
|
49
|
+
end # def register
|
|
50
|
+
|
|
51
|
+
public
|
|
52
|
+
def filter(event)
|
|
53
|
+
# return nothing unless there's an actual filter event
|
|
54
|
+
return unless filter?(event)
|
|
55
|
+
if @message
|
|
56
|
+
# Replace the event message with our message as configured in the
|
|
57
|
+
# config file.
|
|
58
|
+
event["message"] = @message
|
|
59
|
+
end
|
|
60
|
+
# filter_matched should go in the last line of our successful code
|
|
61
|
+
filter_matched(event)
|
|
62
|
+
end # def filter
|
|
63
|
+
end # class LogStash::Filters::Foo
|
|
64
|
+
|
|
65
|
+
## Add it to your configuration
|
|
66
|
+
|
|
67
|
+
For this simple example, let's just use stdin input and stdout output.
|
|
68
|
+
The config file looks like this:
|
|
69
|
+
|
|
70
|
+
input {
|
|
71
|
+
stdin { type => "foo" }
|
|
72
|
+
}
|
|
73
|
+
filter {
|
|
74
|
+
if [type] == "foo" {
|
|
75
|
+
foo {
|
|
76
|
+
message => "Hello world!"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
output {
|
|
81
|
+
stdout { }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
Call this file 'example.conf'
|
|
85
|
+
|
|
86
|
+
## Tell logstash about it.
|
|
87
|
+
|
|
88
|
+
Depending on how you installed logstash, you have a few ways of including this
|
|
89
|
+
plugin.
|
|
90
|
+
|
|
91
|
+
You can use the agent flag --pluginpath flag to specify where the root of your
|
|
92
|
+
plugin tree is. In our case, it's the current directory.
|
|
93
|
+
|
|
94
|
+
% logstash --pluginpath . -f example.conf
|
|
95
|
+
|
|
96
|
+
If you use the jar release of logstash, you have an additional option - you can
|
|
97
|
+
include the plugin right in the jar file.
|
|
98
|
+
|
|
99
|
+
# This command will take your 'logstash/filters/foo.rb' file
|
|
100
|
+
# and add it into the jar file.
|
|
101
|
+
% jar -uf logstash-%VERSION%-flatjar.jar logstash/filters/foo.rb
|
|
102
|
+
|
|
103
|
+
# Verify it's in the right location in the jar!
|
|
104
|
+
% jar tf logstash-%VERSION%-flatjar.jar | grep foo.rb
|
|
105
|
+
logstash/filters/foo.rb
|
|
106
|
+
|
|
107
|
+
% java -jar logstash-%VERSION%-flatjar.jar agent -f example.conf
|
|
108
|
+
|
|
109
|
+
## Example running
|
|
110
|
+
|
|
111
|
+
In the example below, I typed in "the quick brown fox" after running the java
|
|
112
|
+
command.
|
|
113
|
+
|
|
114
|
+
% java -jar logstash-%VERSION%-flatjar.jar agent -f example.conf
|
|
115
|
+
the quick brown fox
|
|
116
|
+
2011-05-12T01:05:09.495000Z stdin://snack.home/: Hello world!
|
|
117
|
+
|
|
118
|
+
The output is the standard logstash stdout output, but in this case our "the
|
|
119
|
+
quick brown fox" message was replaced with "Hello world!"
|
|
120
|
+
|
|
121
|
+
All done! :)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: How to extend - logstash
|
|
3
|
+
layout: content_right
|
|
4
|
+
---
|
|
5
|
+
# Extending logstash
|
|
6
|
+
|
|
7
|
+
You can add your own input, output, or filter plugins to logstash.
|
|
8
|
+
|
|
9
|
+
If you're looking to extend logstash today, please look at the existing plugins.
|
|
10
|
+
|
|
11
|
+
## Good examples of plugins
|
|
12
|
+
|
|
13
|
+
* [inputs/tcp](https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/tcp.rb)
|
|
14
|
+
* [filters/multiline](https://github.com/logstash/logstash/blob/master/lib/logstash/filters/multiline.rb)
|
|
15
|
+
* [outputs/mongodb](https://github.com/logstash/logstash/blob/master/lib/logstash/outputs/mongodb.rb)
|
|
16
|
+
|
|
17
|
+
## Common concepts
|
|
18
|
+
|
|
19
|
+
* The `config_name` sets the name used in the config file.
|
|
20
|
+
* The `milestone` sets the milestone number of the plugin. See <../plugin-milestones> for more info.
|
|
21
|
+
* The `config` lines define config options.
|
|
22
|
+
* The `register` method is called per plugin instantiation. Do any of your initialization here.
|
|
23
|
+
|
|
24
|
+
### Required modules
|
|
25
|
+
|
|
26
|
+
All plugins should require the Logstash module.
|
|
27
|
+
|
|
28
|
+
require 'logstash/namespace'
|
|
29
|
+
|
|
30
|
+
### Plugin name
|
|
31
|
+
|
|
32
|
+
Every plugin must have a name set with the `config_name` method. If this
|
|
33
|
+
is not specified plugins will fail to load with an error.
|
|
34
|
+
|
|
35
|
+
### Milestones
|
|
36
|
+
|
|
37
|
+
Every plugin needs a milestone set using `milestone`. See
|
|
38
|
+
<../plugin-milestones> for more info.
|
|
39
|
+
|
|
40
|
+
### Config lines
|
|
41
|
+
|
|
42
|
+
The `config` lines define configuration options and are constructed like
|
|
43
|
+
so:
|
|
44
|
+
|
|
45
|
+
config :host, :validate => :string, :default => "0.0.0.0"
|
|
46
|
+
|
|
47
|
+
The name of the option is specified, here `:host` and then the
|
|
48
|
+
attributes of the option. They can include `:validate`, `:default`,
|
|
49
|
+
`:required` (a Boolean `true` or `false`), and `:deprecated` (also a
|
|
50
|
+
Boolean).
|
|
51
|
+
|
|
52
|
+
## Inputs
|
|
53
|
+
|
|
54
|
+
All inputs require the LogStash::Inputs::Base class:
|
|
55
|
+
|
|
56
|
+
require 'logstash/inputs/base'
|
|
57
|
+
|
|
58
|
+
Inputs have two methods: `register` and `run`.
|
|
59
|
+
|
|
60
|
+
* Each input runs as its own thread.
|
|
61
|
+
* The `run` method is expected to run-forever.
|
|
62
|
+
|
|
63
|
+
## Filters
|
|
64
|
+
|
|
65
|
+
All filters require the LogStash::Filters::Base class:
|
|
66
|
+
|
|
67
|
+
require 'logstash/filters/base'
|
|
68
|
+
|
|
69
|
+
Filters have two methods: `register` and `filter`.
|
|
70
|
+
|
|
71
|
+
* The `filter` method gets an event.
|
|
72
|
+
* Call `event.cancel` to drop the event.
|
|
73
|
+
* To modify an event, simply make changes to the event you are given.
|
|
74
|
+
* The return value is ignored.
|
|
75
|
+
|
|
76
|
+
## Outputs
|
|
77
|
+
|
|
78
|
+
All outputs require the LogStash::Outputs::Base class:
|
|
79
|
+
|
|
80
|
+
require 'logstash/outputs/base'
|
|
81
|
+
|
|
82
|
+
Outputs have two methods: `register` and `receive`.
|
|
83
|
+
|
|
84
|
+
* The `register` method is called per plugin instantiation. Do any of your initialization here.
|
|
85
|
+
* The `receive` method is called when an event gets pushed to your output
|
|
86
|
+
|
|
87
|
+
## Example: a new filter
|
|
88
|
+
|
|
89
|
+
Learn by example how to [add a new filter to logstash](example-add-a-new-filter)
|
|
90
|
+
|
|
91
|
+
|