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,58 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "securerandom"
|
|
5
|
+
|
|
6
|
+
# The uuid filter allows you to add a UUID field to messages.
|
|
7
|
+
# This is useful to be able to control the _id messages are indexed into Elasticsearch
|
|
8
|
+
# with, so that you can insert duplicate messages (i.e. the same message multiple times
|
|
9
|
+
# without creating duplicates) - for log pipeline reliability
|
|
10
|
+
#
|
|
11
|
+
class LogStash::Filters::Uuid < LogStash::Filters::Base
|
|
12
|
+
config_name "uuid"
|
|
13
|
+
milestone 2
|
|
14
|
+
|
|
15
|
+
# Add a UUID to a field.
|
|
16
|
+
#
|
|
17
|
+
# Example:
|
|
18
|
+
#
|
|
19
|
+
# filter {
|
|
20
|
+
# uuid {
|
|
21
|
+
# target => "@uuid"
|
|
22
|
+
# }
|
|
23
|
+
# }
|
|
24
|
+
config :target, :validate => :string, :required => true
|
|
25
|
+
|
|
26
|
+
# If the value in the field currently (if any) should be overridden
|
|
27
|
+
# by the generated UUID. Defaults to false (i.e. if the field is
|
|
28
|
+
# present, with ANY value, it won't be overridden)
|
|
29
|
+
#
|
|
30
|
+
# Example:
|
|
31
|
+
#
|
|
32
|
+
# filter {
|
|
33
|
+
# uuid {
|
|
34
|
+
# target => "@uuid"
|
|
35
|
+
# overwrite => true
|
|
36
|
+
# }
|
|
37
|
+
# }
|
|
38
|
+
config :overwrite, :validate => :boolean, :default => false
|
|
39
|
+
|
|
40
|
+
public
|
|
41
|
+
def register
|
|
42
|
+
end # def register
|
|
43
|
+
|
|
44
|
+
public
|
|
45
|
+
def filter(event)
|
|
46
|
+
return unless filter?(event)
|
|
47
|
+
|
|
48
|
+
if overwrite
|
|
49
|
+
event[target] = SecureRandom.uuid
|
|
50
|
+
else
|
|
51
|
+
event[target] ||= SecureRandom.uuid
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
filter_matched(event)
|
|
55
|
+
end # def filter
|
|
56
|
+
|
|
57
|
+
end # class LogStash::Filters::Uuid
|
|
58
|
+
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# XML filter. Takes a field that contains XML and expands it into
|
|
6
|
+
# an actual datastructure.
|
|
7
|
+
class LogStash::Filters::Xml < LogStash::Filters::Base
|
|
8
|
+
|
|
9
|
+
config_name "xml"
|
|
10
|
+
milestone 1
|
|
11
|
+
|
|
12
|
+
# Config for xml to hash is:
|
|
13
|
+
#
|
|
14
|
+
# source => source_field
|
|
15
|
+
#
|
|
16
|
+
# For example, if you have the whole xml document in your @message field:
|
|
17
|
+
#
|
|
18
|
+
# filter {
|
|
19
|
+
# xml {
|
|
20
|
+
# source => "message"
|
|
21
|
+
# }
|
|
22
|
+
# }
|
|
23
|
+
#
|
|
24
|
+
# The above would parse the xml from the @message field
|
|
25
|
+
config :source, :validate => :string
|
|
26
|
+
|
|
27
|
+
# Define target for placing the data
|
|
28
|
+
#
|
|
29
|
+
# for example if you want the data to be put in the 'doc' field:
|
|
30
|
+
#
|
|
31
|
+
# filter {
|
|
32
|
+
# xml {
|
|
33
|
+
# target => "doc"
|
|
34
|
+
# }
|
|
35
|
+
# }
|
|
36
|
+
#
|
|
37
|
+
# XML in the value of the source field will be expanded into a
|
|
38
|
+
# datastructure in the "target" field.
|
|
39
|
+
# Note: if the "target" field already exists, it will be overridden
|
|
40
|
+
# Required
|
|
41
|
+
config :target, :validate => :string
|
|
42
|
+
|
|
43
|
+
# xpath will additionally select string values (.to_s on whatever is selected)
|
|
44
|
+
# from parsed XML (using each source field defined using the method above)
|
|
45
|
+
# and place those values in the destination fields. Configuration:
|
|
46
|
+
#
|
|
47
|
+
# xpath => [ "xpath-syntax", "destination-field" ]
|
|
48
|
+
#
|
|
49
|
+
# Values returned by XPath parsring from xpath-synatx will be put in the
|
|
50
|
+
# destination field. Multiple values returned will be pushed onto the
|
|
51
|
+
# destination field as an array. As such, multiple matches across
|
|
52
|
+
# multiple source fields will produce duplicate entries in the field
|
|
53
|
+
#
|
|
54
|
+
# More on xpath: http://www.w3schools.com/xpath/
|
|
55
|
+
#
|
|
56
|
+
# The xpath functions are particularly powerful:
|
|
57
|
+
# http://www.w3schools.com/xpath/xpath_functions.asp
|
|
58
|
+
#
|
|
59
|
+
config :xpath, :validate => :hash, :default => {}
|
|
60
|
+
|
|
61
|
+
# By default the filter will store the whole parsed xml in the destination
|
|
62
|
+
# field as described above. Setting this to false will prevent that.
|
|
63
|
+
config :store_xml, :validate => :boolean, :default => true
|
|
64
|
+
|
|
65
|
+
public
|
|
66
|
+
def register
|
|
67
|
+
require "nokogiri"
|
|
68
|
+
require "xmlsimple"
|
|
69
|
+
|
|
70
|
+
end # def register
|
|
71
|
+
|
|
72
|
+
public
|
|
73
|
+
def filter(event)
|
|
74
|
+
return unless filter?(event)
|
|
75
|
+
matched = false
|
|
76
|
+
|
|
77
|
+
@logger.debug("Running xml filter", :event => event)
|
|
78
|
+
|
|
79
|
+
return unless event.include?(@source)
|
|
80
|
+
|
|
81
|
+
value = event[@source]
|
|
82
|
+
|
|
83
|
+
if value.is_a?(Array) && value.length > 1
|
|
84
|
+
@logger.warn("XML filter only works on fields of length 1",
|
|
85
|
+
:source => @source, :value => value)
|
|
86
|
+
return
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Do nothing with an empty string.
|
|
90
|
+
return if value.strip.length == 0
|
|
91
|
+
|
|
92
|
+
if @xpath
|
|
93
|
+
begin
|
|
94
|
+
doc = Nokogiri::XML(value)
|
|
95
|
+
rescue => e
|
|
96
|
+
event.tag("_xmlparsefailure")
|
|
97
|
+
@logger.warn("Trouble parsing xml", :source => @source, :value => value,
|
|
98
|
+
:exception => e, :backtrace => e.backtrace)
|
|
99
|
+
return
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
@xpath.each do |xpath_src, xpath_dest|
|
|
103
|
+
nodeset = doc.xpath(xpath_src)
|
|
104
|
+
|
|
105
|
+
# If asking xpath for a String, like "name(/*)", we get back a
|
|
106
|
+
# String instead of a NodeSet. We normalize that here.
|
|
107
|
+
normalized_nodeset = nodeset.kind_of?(Nokogiri::XML::NodeSet) ? nodeset : [nodeset]
|
|
108
|
+
|
|
109
|
+
normalized_nodeset.each do |value|
|
|
110
|
+
# some XPath functions return empty arrays as string
|
|
111
|
+
if value.is_a?(Array)
|
|
112
|
+
return if value.length == 0
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
unless value.nil?
|
|
116
|
+
matched = true
|
|
117
|
+
event[xpath_dest] ||= []
|
|
118
|
+
event[xpath_dest] << value.to_s
|
|
119
|
+
end
|
|
120
|
+
end # XPath.each
|
|
121
|
+
end # @xpath.each
|
|
122
|
+
end # if @xpath
|
|
123
|
+
|
|
124
|
+
if @store_xml
|
|
125
|
+
begin
|
|
126
|
+
event[@target] = XmlSimple.xml_in(value)
|
|
127
|
+
matched = true
|
|
128
|
+
rescue => e
|
|
129
|
+
event.tag("_xmlparsefailure")
|
|
130
|
+
@logger.warn("Trouble parsing xml with XmlSimple", :source => @source,
|
|
131
|
+
:value => value, :exception => e, :backtrace => e.backtrace)
|
|
132
|
+
return
|
|
133
|
+
end
|
|
134
|
+
end # if @store_xml
|
|
135
|
+
|
|
136
|
+
filter_matched(event) if matched
|
|
137
|
+
@logger.debug("Event after xml filter", :event => event)
|
|
138
|
+
end # def filter
|
|
139
|
+
end # class LogStash::Filters::Xml
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# ZeroMQ filter. This is the best way to send an event externally for filtering
|
|
6
|
+
# It works much like an exec filter would by sending the event "offsite"
|
|
7
|
+
# for processing and waiting for a response
|
|
8
|
+
#
|
|
9
|
+
# The protocol here is:
|
|
10
|
+
# * REQ sent with JSON-serialized logstash event
|
|
11
|
+
# * REP read expected to be the full JSON 'filtered' event
|
|
12
|
+
# * - if reply read is an empty string, it will cancel the event.
|
|
13
|
+
#
|
|
14
|
+
# Note that this is a limited subset of the zeromq functionality in
|
|
15
|
+
# inputs and outputs. The only topology that makes sense here is:
|
|
16
|
+
# REQ/REP.
|
|
17
|
+
class LogStash::Filters::ZeroMQ < LogStash::Filters::Base
|
|
18
|
+
|
|
19
|
+
config_name "zeromq"
|
|
20
|
+
milestone 1
|
|
21
|
+
|
|
22
|
+
# 0mq socket address to connect or bind
|
|
23
|
+
# Please note that inproc:// will not work with logstash
|
|
24
|
+
# as we use a context per thread
|
|
25
|
+
# By default, filters connect
|
|
26
|
+
config :address, :validate => :string, :default => "tcp://127.0.0.1:2121"
|
|
27
|
+
|
|
28
|
+
# The field to send off-site for processing
|
|
29
|
+
# If this is unset, the whole event will be sent
|
|
30
|
+
# TODO (lusis)
|
|
31
|
+
# Allow filtering multiple fields
|
|
32
|
+
config :field, :validate => :string
|
|
33
|
+
|
|
34
|
+
# 0mq mode
|
|
35
|
+
# server mode binds/listens
|
|
36
|
+
# client mode connects
|
|
37
|
+
config :mode, :validate => ["server", "client"], :default => "client"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# 0mq socket options
|
|
41
|
+
# This exposes zmq_setsockopt
|
|
42
|
+
# for advanced tuning
|
|
43
|
+
# see http://api.zeromq.org/2-1:zmq-setsockopt for details
|
|
44
|
+
#
|
|
45
|
+
# This is where you would set values like:
|
|
46
|
+
# ZMQ::HWM - high water mark
|
|
47
|
+
# ZMQ::IDENTITY - named queues
|
|
48
|
+
# ZMQ::SWAP_SIZE - space for disk overflow
|
|
49
|
+
# ZMQ::SUBSCRIBE - topic filters for pubsub
|
|
50
|
+
#
|
|
51
|
+
# example: sockopt => ["ZMQ::HWM", 50, "ZMQ::IDENTITY", "my_named_queue"]
|
|
52
|
+
config :sockopt, :validate => :hash
|
|
53
|
+
|
|
54
|
+
public
|
|
55
|
+
def initialize(params)
|
|
56
|
+
super(params)
|
|
57
|
+
|
|
58
|
+
@threadsafe = false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
public
|
|
62
|
+
def register
|
|
63
|
+
require "ffi-rzmq"
|
|
64
|
+
require "logstash/util/zeromq"
|
|
65
|
+
self.class.send(:include, LogStash::Util::ZeroMQ)
|
|
66
|
+
|
|
67
|
+
@zsocket = context.socket(ZMQ::REQ)
|
|
68
|
+
|
|
69
|
+
error_check(@zsocket.setsockopt(ZMQ::LINGER, 1),
|
|
70
|
+
"while setting ZMQ::LINGER == 1)")
|
|
71
|
+
|
|
72
|
+
if @sockopt
|
|
73
|
+
setopts(@zsocket, @sockopt)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
setup(@zsocket, @address)
|
|
77
|
+
end # def register
|
|
78
|
+
|
|
79
|
+
public
|
|
80
|
+
def filter(event)
|
|
81
|
+
return unless filter?(event)
|
|
82
|
+
|
|
83
|
+
# TODO (lusis)
|
|
84
|
+
# Need to set a timeout on the socket
|
|
85
|
+
# If it never gets a reply, filtering stops cold
|
|
86
|
+
begin
|
|
87
|
+
if @field
|
|
88
|
+
@logger.debug("0mq: sending", :request => event[@field])
|
|
89
|
+
error_check(@zsocket.send_string(event[@field]), "in send_string")
|
|
90
|
+
else
|
|
91
|
+
@logger.debug("0mq: sending", :request => event.to_json)
|
|
92
|
+
error_check(@zsocket.send_string(event.to_json), "in send_string")
|
|
93
|
+
end
|
|
94
|
+
reply = ''
|
|
95
|
+
rc = @zsocket.recv_string(reply)
|
|
96
|
+
error_check(rc, "in recv_string")
|
|
97
|
+
|
|
98
|
+
# If we receive an empty reply, this is an indication that the filter
|
|
99
|
+
# wishes to cancel this event.
|
|
100
|
+
if reply.empty?
|
|
101
|
+
event.cancel
|
|
102
|
+
return
|
|
103
|
+
end
|
|
104
|
+
@logger.debug("0mq: receiving", :reply => reply)
|
|
105
|
+
if @field
|
|
106
|
+
event[@field] = event.sprintf(reply)
|
|
107
|
+
filter_matched(event)
|
|
108
|
+
else
|
|
109
|
+
reply = JSON.parse(reply)
|
|
110
|
+
event.overwrite(reply)
|
|
111
|
+
end
|
|
112
|
+
filter_matched(event)
|
|
113
|
+
rescue => e
|
|
114
|
+
@logger.warn("0mq filter exception", :address => @address, :exception => e, :backtrace => e.backtrace)
|
|
115
|
+
end
|
|
116
|
+
end # def filter
|
|
117
|
+
|
|
118
|
+
private
|
|
119
|
+
def server?
|
|
120
|
+
@mode == "server"
|
|
121
|
+
end # def server?
|
|
122
|
+
|
|
123
|
+
end # class LogStash::Filters::ZeroMQ
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "logstash/logging"
|
|
4
|
+
require "logstash/plugin"
|
|
5
|
+
require "logstash/config/mixin"
|
|
6
|
+
require "stud/interval"
|
|
7
|
+
|
|
8
|
+
# TODO(sissel): Should this really be a 'plugin' ?
|
|
9
|
+
class LogStash::FilterWorker < LogStash::Plugin
|
|
10
|
+
include Stud
|
|
11
|
+
attr_accessor :logger
|
|
12
|
+
attr_accessor :filters
|
|
13
|
+
attr_reader :after_filter
|
|
14
|
+
|
|
15
|
+
Exceptions = [Exception]
|
|
16
|
+
Exceptions << java.lang.Exception if RUBY_ENGINE == "jruby"
|
|
17
|
+
|
|
18
|
+
def initialize(filters, input_queue, output_queue)
|
|
19
|
+
@filters = filters
|
|
20
|
+
@input_queue = input_queue
|
|
21
|
+
@output_queue = output_queue
|
|
22
|
+
@shutdown_requested = false
|
|
23
|
+
end # def initialize
|
|
24
|
+
|
|
25
|
+
#This block is called after each filter is done on an event.
|
|
26
|
+
#The filtered event and filter class name is passed to the block.
|
|
27
|
+
#This could be used to add metrics in the future?
|
|
28
|
+
def after_filter(&block)
|
|
29
|
+
@after_filter = block
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def run
|
|
33
|
+
# TODO(sissel): Run a flusher thread for each plugin requesting flushes
|
|
34
|
+
# > It seems reasonable that you could want a multiline filter to flush
|
|
35
|
+
# after 5 seconds, but want a metrics filter to flush every 10 or 60.
|
|
36
|
+
|
|
37
|
+
# Set up the periodic flusher thread.
|
|
38
|
+
@flusher = Thread.new { interval(5) { flusher } }
|
|
39
|
+
|
|
40
|
+
while !@shutdown_requested && event = @input_queue.pop
|
|
41
|
+
if event == LogStash::SHUTDOWN
|
|
42
|
+
finished
|
|
43
|
+
@input_queue << LogStash::SHUTDOWN # for the next filter thread
|
|
44
|
+
return
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
filter(event)
|
|
48
|
+
end # while @input_queue.pop
|
|
49
|
+
finished
|
|
50
|
+
end # def run
|
|
51
|
+
|
|
52
|
+
def flusher
|
|
53
|
+
events = []
|
|
54
|
+
@filters.each do |filter|
|
|
55
|
+
|
|
56
|
+
# Filter any events generated so far in this flush.
|
|
57
|
+
events.each do |event|
|
|
58
|
+
# TODO(sissel): watchdog on flush filtration?
|
|
59
|
+
unless event.cancelled?
|
|
60
|
+
filter.filter(event)
|
|
61
|
+
@after_filter.call(event,filter) unless @after_filter.nil?
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# TODO(sissel): watchdog on flushes?
|
|
66
|
+
if filter.respond_to?(:flush)
|
|
67
|
+
flushed = filter.flush
|
|
68
|
+
events += flushed if !flushed.nil? && flushed.any?
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
events.each do |event|
|
|
73
|
+
@logger.debug? and @logger.debug("Pushing flushed events", :event => event)
|
|
74
|
+
@output_queue.push(event) unless event.cancelled?
|
|
75
|
+
end
|
|
76
|
+
end # def flusher
|
|
77
|
+
|
|
78
|
+
def teardown
|
|
79
|
+
@shutdown_requested = true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def filter(original_event)
|
|
83
|
+
# Make an 'events' array that filters can push onto if they
|
|
84
|
+
# need to generate additional events based on the current event.
|
|
85
|
+
# The 'split' filter does this, for example.
|
|
86
|
+
events = [original_event]
|
|
87
|
+
|
|
88
|
+
events.each do |event|
|
|
89
|
+
@filters.each do |filter|
|
|
90
|
+
# Filter can emit multiple events, like the 'split' event, so
|
|
91
|
+
# give the input queue to dump generated events into.
|
|
92
|
+
|
|
93
|
+
# TODO(sissel): This may require some refactoring later, I am not sure
|
|
94
|
+
# this is the best approach. The goal is to allow filters to modify
|
|
95
|
+
# the current event, but if necessary, create new events based on
|
|
96
|
+
# this event.
|
|
97
|
+
begin
|
|
98
|
+
update_watchdog(:event => event, :filter => filter)
|
|
99
|
+
filter.execute(event) do |newevent|
|
|
100
|
+
events << newevent
|
|
101
|
+
end
|
|
102
|
+
rescue *Exceptions => e
|
|
103
|
+
@logger.warn("Exception during filter", :event => event,
|
|
104
|
+
:exception => $!, :backtrace => e.backtrace,
|
|
105
|
+
:filter => filter)
|
|
106
|
+
ensure
|
|
107
|
+
clear_watchdog
|
|
108
|
+
end
|
|
109
|
+
if event.cancelled?
|
|
110
|
+
@logger.debug? and @logger.debug("Event cancelled", :event => event,
|
|
111
|
+
:filter => filter.class)
|
|
112
|
+
break
|
|
113
|
+
end
|
|
114
|
+
@after_filter.call(event,filter) unless @after_filter.nil?
|
|
115
|
+
end # @filters.each
|
|
116
|
+
|
|
117
|
+
@logger.debug? and @logger.debug("Event finished filtering", :event => event,
|
|
118
|
+
:thread => Thread.current[:name])
|
|
119
|
+
@output_queue.push(event) unless event.cancelled?
|
|
120
|
+
end # events.each
|
|
121
|
+
end # def filter
|
|
122
|
+
end # class LogStash::FilterWorker
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/namespace"
|
|
3
|
+
require "logstash/event"
|
|
4
|
+
require "logstash/plugin"
|
|
5
|
+
require "logstash/logging"
|
|
6
|
+
require "logstash/config/mixin"
|
|
7
|
+
require "logstash/codecs/base"
|
|
8
|
+
|
|
9
|
+
# This is the base class for logstash inputs.
|
|
10
|
+
class LogStash::Inputs::Base < LogStash::Plugin
|
|
11
|
+
include LogStash::Config::Mixin
|
|
12
|
+
config_name "input"
|
|
13
|
+
|
|
14
|
+
# Add a 'type' field to all events handled by this input.
|
|
15
|
+
#
|
|
16
|
+
# Types are used mainly for filter activation.
|
|
17
|
+
#
|
|
18
|
+
# If you create an input with type "foobar", then only filters
|
|
19
|
+
# which also have type "foobar" will act on them.
|
|
20
|
+
#
|
|
21
|
+
# The type is also stored as part of the event itself, so you
|
|
22
|
+
# can also use the type to search for in the web interface.
|
|
23
|
+
#
|
|
24
|
+
# If you try to set a type on an event that already has one (for
|
|
25
|
+
# example when you send an event from a shipper to an indexer) then
|
|
26
|
+
# a new input will not override the existing type. A type set at
|
|
27
|
+
# the shipper stays with that event for its life even
|
|
28
|
+
# when sent to another LogStash server.
|
|
29
|
+
config :type, :validate => :string
|
|
30
|
+
|
|
31
|
+
# Set this to true to enable debugging on an input.
|
|
32
|
+
config :debug, :validate => :boolean, :default => false
|
|
33
|
+
|
|
34
|
+
# The format of input data (plain, json, json_event)
|
|
35
|
+
config :format, :validate => ["plain", "json", "json_event", "msgpack_event"], :deprecated => "You should use the newer 'codec' setting instead."
|
|
36
|
+
|
|
37
|
+
# The codec used for input data
|
|
38
|
+
config :codec, :validate => :codec, :default => "plain"
|
|
39
|
+
|
|
40
|
+
# The character encoding used in this input. Examples include "UTF-8"
|
|
41
|
+
# and "cp1252"
|
|
42
|
+
#
|
|
43
|
+
# This setting is useful if your log files are in Latin-1 (aka cp1252)
|
|
44
|
+
# or in another character set other than UTF-8.
|
|
45
|
+
#
|
|
46
|
+
# This only affects "plain" format logs since json is UTF-8 already.
|
|
47
|
+
config :charset, :validate => ::Encoding.name_list, :deprecated => true
|
|
48
|
+
|
|
49
|
+
# If format is "json", an event sprintf string to build what
|
|
50
|
+
# the display @message should be given (defaults to the raw JSON).
|
|
51
|
+
# sprintf format strings look like %{fieldname}
|
|
52
|
+
#
|
|
53
|
+
# If format is "json_event", ALL fields except for @type
|
|
54
|
+
# are expected to be present. Not receiving all fields
|
|
55
|
+
# will cause unexpected results.
|
|
56
|
+
config :message_format, :validate => :string, :deprecated => true
|
|
57
|
+
|
|
58
|
+
# Add any number of arbitrary tags to your event.
|
|
59
|
+
#
|
|
60
|
+
# This can help with processing later.
|
|
61
|
+
config :tags, :validate => :array
|
|
62
|
+
|
|
63
|
+
# Add a field to an event
|
|
64
|
+
config :add_field, :validate => :hash, :default => {}
|
|
65
|
+
|
|
66
|
+
attr_accessor :params
|
|
67
|
+
attr_accessor :threadable
|
|
68
|
+
|
|
69
|
+
public
|
|
70
|
+
def initialize(params={})
|
|
71
|
+
super
|
|
72
|
+
@threadable = false
|
|
73
|
+
config_init(params)
|
|
74
|
+
@tags ||= []
|
|
75
|
+
|
|
76
|
+
if @charset && @codec.class.get_config.include?("charset")
|
|
77
|
+
# charset is deprecated on inputs, but provide backwards compatibility
|
|
78
|
+
# by copying the charset setting into the codec.
|
|
79
|
+
|
|
80
|
+
@logger.info("Copying input's charset setting into codec", :input => self, :codec => @codec)
|
|
81
|
+
charset = @charset
|
|
82
|
+
@codec.instance_eval { @charset = charset }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Backwards compat for the 'format' setting
|
|
86
|
+
case @format
|
|
87
|
+
when "plain"; # do nothing
|
|
88
|
+
when "json"
|
|
89
|
+
@codec = LogStash::Plugin.lookup("codec", "json").new
|
|
90
|
+
when "json_event"
|
|
91
|
+
@codec = LogStash::Plugin.lookup("codec", "oldlogstashjson").new
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end # def initialize
|
|
95
|
+
|
|
96
|
+
public
|
|
97
|
+
def register
|
|
98
|
+
raise "#{self.class}#register must be overidden"
|
|
99
|
+
end # def register
|
|
100
|
+
|
|
101
|
+
public
|
|
102
|
+
def tag(newtag)
|
|
103
|
+
@tags << newtag
|
|
104
|
+
end # def tag
|
|
105
|
+
|
|
106
|
+
protected
|
|
107
|
+
def to_event(raw, source)
|
|
108
|
+
raise LogStash::ThisMethodWasRemoved("LogStash::Inputs::Base#to_event - you should use codecs now instead of to_event. Not sure what this means? Get help on logstash-users@googlegroups.com!")
|
|
109
|
+
end # def to_event
|
|
110
|
+
|
|
111
|
+
protected
|
|
112
|
+
def decorate(event)
|
|
113
|
+
# Only set 'type' if not already set. This is backwards-compatible behavior
|
|
114
|
+
event["type"] = @type if @type && !event.include?("type")
|
|
115
|
+
|
|
116
|
+
if @tags.any?
|
|
117
|
+
event["tags"] ||= []
|
|
118
|
+
event["tags"] += @tags
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
@add_field.each do |field, value|
|
|
122
|
+
event[field] = value
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end # class LogStash::Inputs::Base
|