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,75 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# TODO(sissel): This is not supported yet. There is a bug in grok discovery
|
|
6
|
+
# that causes segfaults in libgrok.
|
|
7
|
+
class LogStash::Filters::Grokdiscovery < LogStash::Filters::Base
|
|
8
|
+
|
|
9
|
+
config_name "grokdiscovery"
|
|
10
|
+
milestone 1
|
|
11
|
+
|
|
12
|
+
public
|
|
13
|
+
def initialize(config = {})
|
|
14
|
+
super
|
|
15
|
+
|
|
16
|
+
@discover_fields = {}
|
|
17
|
+
end # def initialize
|
|
18
|
+
|
|
19
|
+
public
|
|
20
|
+
def register
|
|
21
|
+
gem "jls-grok", ">=0.4.3"
|
|
22
|
+
require "grok" # rubygem 'jls-grok'
|
|
23
|
+
|
|
24
|
+
# TODO(sissel): Make patterns files come from the config
|
|
25
|
+
@config.each do |type, typeconfig|
|
|
26
|
+
@logger.debug("Registering type with grok: #{type}")
|
|
27
|
+
@grok = Grok.new
|
|
28
|
+
Dir.glob("patterns/*").each do |path|
|
|
29
|
+
@grok.add_patterns_from_file(path)
|
|
30
|
+
end
|
|
31
|
+
@discover_fields[type] = typeconfig
|
|
32
|
+
@logger.debug(["Enabling discovery", { :type => type, :fields => typeconfig }])
|
|
33
|
+
@logger.warn(@discover_fields)
|
|
34
|
+
end # @config.each
|
|
35
|
+
end # def register
|
|
36
|
+
|
|
37
|
+
public
|
|
38
|
+
def filter(event)
|
|
39
|
+
return unless filter?(event)
|
|
40
|
+
|
|
41
|
+
# parse it with grok
|
|
42
|
+
message = event["message"]
|
|
43
|
+
match = false
|
|
44
|
+
|
|
45
|
+
if event.type and @discover_fields.include?(event.type)
|
|
46
|
+
discover = @discover_fields[event.type] & event.to_hash.keys
|
|
47
|
+
discover.each do |field|
|
|
48
|
+
value = event[field]
|
|
49
|
+
value = [value] if value.is_a?(String)
|
|
50
|
+
|
|
51
|
+
value.each do |v|
|
|
52
|
+
pattern = @grok.discover(v)
|
|
53
|
+
@logger.warn("Trying #{v} => #{pattern}")
|
|
54
|
+
@grok.compile(pattern)
|
|
55
|
+
match = @grok.match(v)
|
|
56
|
+
if match
|
|
57
|
+
@logger.warn(["Match", match.captures])
|
|
58
|
+
event.to_hash.merge!(match.captures) do |key, oldval, newval|
|
|
59
|
+
@logger.warn(["Merging #{key}", oldval, newval])
|
|
60
|
+
oldval + newval # should both be arrays...
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
@logger.warn(["Discovery produced something not matchable?", { :input => v }])
|
|
64
|
+
end
|
|
65
|
+
end # value.each
|
|
66
|
+
end # discover.each
|
|
67
|
+
else
|
|
68
|
+
@logger.info("Unknown type for #{event.source} (type: #{event.type})")
|
|
69
|
+
@logger.debug(event.to_hash)
|
|
70
|
+
end
|
|
71
|
+
@logger.debug(["Event now: ", event.to_hash])
|
|
72
|
+
|
|
73
|
+
filter_matched(event) if !event.cancelled?
|
|
74
|
+
end # def filter
|
|
75
|
+
end # class LogStash::Filters::Grokdiscovery
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "i18n"
|
|
3
|
+
require "logstash/filters/base"
|
|
4
|
+
require "logstash/namespace"
|
|
5
|
+
|
|
6
|
+
# The i18n filter allows you to remove special characters from
|
|
7
|
+
# from a field
|
|
8
|
+
class LogStash::Filters::I18n < LogStash::Filters::Base
|
|
9
|
+
config_name "i18n"
|
|
10
|
+
milestone 0
|
|
11
|
+
|
|
12
|
+
# Replaces non-ASCII characters with an ASCII approximation, or
|
|
13
|
+
# if none exists, a replacement character which defaults to “?”
|
|
14
|
+
#
|
|
15
|
+
# Example:
|
|
16
|
+
#
|
|
17
|
+
# filter {
|
|
18
|
+
# i18n {
|
|
19
|
+
# transliterate => ["field1", "field2"]
|
|
20
|
+
# }
|
|
21
|
+
# }
|
|
22
|
+
config :transliterate, :validate => :array
|
|
23
|
+
|
|
24
|
+
public
|
|
25
|
+
def register
|
|
26
|
+
end # def register
|
|
27
|
+
|
|
28
|
+
public
|
|
29
|
+
def filter(event)
|
|
30
|
+
return unless filter?(event)
|
|
31
|
+
|
|
32
|
+
transliterate(event) if @transliterate
|
|
33
|
+
|
|
34
|
+
filter_matched(event)
|
|
35
|
+
end # def filter
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
def transliterate(event)
|
|
39
|
+
@transliterate.each do |field|
|
|
40
|
+
if event[field].is_a?(Array)
|
|
41
|
+
event[field].map! { |v| I18n.transliterate(v).encode('UTF-8') }
|
|
42
|
+
elsif event[field].is_a?(String)
|
|
43
|
+
event[field] = I18n.transliterate(event[field].encode('UTF-8'))
|
|
44
|
+
else
|
|
45
|
+
@logger.debug("Can't transliterate something that isn't a string",
|
|
46
|
+
:field => field, :value => event[field])
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end # def transliterate
|
|
50
|
+
|
|
51
|
+
end # class LogStash::Filters::I18n
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# JSON filter. Takes a field that contains JSON and expands it into
|
|
6
|
+
# an actual datastructure.
|
|
7
|
+
class LogStash::Filters::Json < LogStash::Filters::Base
|
|
8
|
+
|
|
9
|
+
config_name "json"
|
|
10
|
+
milestone 2
|
|
11
|
+
|
|
12
|
+
# Config for json is:
|
|
13
|
+
#
|
|
14
|
+
# source => source_field
|
|
15
|
+
#
|
|
16
|
+
# For example, if you have json data in the @message field:
|
|
17
|
+
#
|
|
18
|
+
# filter {
|
|
19
|
+
# json {
|
|
20
|
+
# source => "message"
|
|
21
|
+
# }
|
|
22
|
+
# }
|
|
23
|
+
#
|
|
24
|
+
# The above would parse the json from the @message field
|
|
25
|
+
config :source, :validate => :string, :required => true
|
|
26
|
+
|
|
27
|
+
# Define target for placing the data. If this setting is omitted,
|
|
28
|
+
# the json data will be stored at the root of the event.
|
|
29
|
+
#
|
|
30
|
+
# For example if you want the data to be put in the 'doc' field:
|
|
31
|
+
#
|
|
32
|
+
# filter {
|
|
33
|
+
# json {
|
|
34
|
+
# target => "doc"
|
|
35
|
+
# }
|
|
36
|
+
# }
|
|
37
|
+
#
|
|
38
|
+
# json in the value of the source field will be expanded into a
|
|
39
|
+
# datastructure in the "target" field.
|
|
40
|
+
#
|
|
41
|
+
# Note: if the "target" field already exists, it will be overwritten.
|
|
42
|
+
config :target, :validate => :string
|
|
43
|
+
|
|
44
|
+
public
|
|
45
|
+
def register
|
|
46
|
+
# Nothing to do here
|
|
47
|
+
end # def register
|
|
48
|
+
|
|
49
|
+
public
|
|
50
|
+
def filter(event)
|
|
51
|
+
return unless filter?(event)
|
|
52
|
+
|
|
53
|
+
@logger.debug("Running json filter", :event => event)
|
|
54
|
+
|
|
55
|
+
return unless event.include?(@source)
|
|
56
|
+
|
|
57
|
+
if @target.nil?
|
|
58
|
+
# Default is to write to the root of the event.
|
|
59
|
+
dest = event.to_hash
|
|
60
|
+
else
|
|
61
|
+
dest = event[@target] ||= {}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
begin
|
|
65
|
+
# TODO(sissel): Note, this will not successfully handle json lists
|
|
66
|
+
# like your text is '[ 1,2,3 ]' JSON.parse gives you an array (correctly)
|
|
67
|
+
# which won't merge into a hash. If someone needs this, we can fix it
|
|
68
|
+
# later.
|
|
69
|
+
dest.merge!(JSON.parse(event[@source]))
|
|
70
|
+
|
|
71
|
+
# This is a hack to help folks who are mucking with @timestamp during
|
|
72
|
+
# their json filter. You aren't supposed to do anything with "@timestamp"
|
|
73
|
+
# outside of the date filter, but nobody listens... ;)
|
|
74
|
+
if event["@timestamp"].is_a?(String)
|
|
75
|
+
event["@timestamp"] = Time.parse(event["@timestamp"]).gmtime
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
filter_matched(event)
|
|
79
|
+
rescue => e
|
|
80
|
+
event.tag("_jsonparsefailure")
|
|
81
|
+
@logger.warn("Trouble parsing json", :source => @source,
|
|
82
|
+
:raw => event[@source], :exception => e)
|
|
83
|
+
return
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
@logger.debug("Event after json filter", :event => event)
|
|
87
|
+
|
|
88
|
+
end # def filter
|
|
89
|
+
|
|
90
|
+
end # class LogStash::Filters::Json
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# JSON encode filter. Takes a field and serializes it into JSON
|
|
6
|
+
#
|
|
7
|
+
# If no target is specified, the source field is overwritten with the JSON
|
|
8
|
+
# text.
|
|
9
|
+
#
|
|
10
|
+
# For example, if you have a field named 'foo', and you want to store the
|
|
11
|
+
# JSON encoded string in 'bar', do this:
|
|
12
|
+
#
|
|
13
|
+
# filter {
|
|
14
|
+
# json_encode {
|
|
15
|
+
# source => "foo"
|
|
16
|
+
# target => "bar"
|
|
17
|
+
# }
|
|
18
|
+
# }
|
|
19
|
+
class LogStash::Filters::JSONEncode < LogStash::Filters::Base
|
|
20
|
+
|
|
21
|
+
config_name "json_encode"
|
|
22
|
+
milestone 2
|
|
23
|
+
|
|
24
|
+
# The field to convert to JSON.
|
|
25
|
+
config :source, :validate => :string, :required => true
|
|
26
|
+
|
|
27
|
+
# The field to write the JSON into. If not specified, the source
|
|
28
|
+
# field will be overwritten.
|
|
29
|
+
config :target, :validate => :string
|
|
30
|
+
|
|
31
|
+
public
|
|
32
|
+
def register
|
|
33
|
+
@target = @source if @target.nil?
|
|
34
|
+
end # def register
|
|
35
|
+
|
|
36
|
+
public
|
|
37
|
+
def filter(event)
|
|
38
|
+
return unless filter?(event)
|
|
39
|
+
|
|
40
|
+
@logger.debug("Running JSON encoder", :event => event)
|
|
41
|
+
|
|
42
|
+
begin
|
|
43
|
+
event[@target] = JSON.pretty_generate(event[@source])
|
|
44
|
+
filter_matched(event)
|
|
45
|
+
rescue => e
|
|
46
|
+
event.tag "_jsongeneratefailure"
|
|
47
|
+
@logger.warn("Trouble encoding JSON", :source => @source, :raw => event[@source].inspect, :exception => e)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
@logger.debug? && @logger.debug("Event after JSON encoder", :event => event)
|
|
51
|
+
end # def filter
|
|
52
|
+
end # class LogStash::Filters::JSONEncode
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# This filter helps automatically parse messages which are of the 'foo=bar'
|
|
6
|
+
# variety.
|
|
7
|
+
#
|
|
8
|
+
# For example, if you have a log message which contains 'ip=1.2.3.4
|
|
9
|
+
# error=REFUSED', you can parse those automatically by doing:
|
|
10
|
+
#
|
|
11
|
+
# filter {
|
|
12
|
+
# kv { }
|
|
13
|
+
# }
|
|
14
|
+
#
|
|
15
|
+
# The above will result in a message of "ip=1.2.3.4 error=REFUSED" having
|
|
16
|
+
# the fields:
|
|
17
|
+
#
|
|
18
|
+
# * ip: 1.2.3.4
|
|
19
|
+
# * error: REFUSED
|
|
20
|
+
#
|
|
21
|
+
# This is great for postfix, iptables, and other types of logs that
|
|
22
|
+
# tend towards 'key=value' syntax.
|
|
23
|
+
#
|
|
24
|
+
# Further, this can often be used to parse query parameters like
|
|
25
|
+
# 'foo=bar&baz=fizz' by setting the field_split to "&"
|
|
26
|
+
class LogStash::Filters::KV < LogStash::Filters::Base
|
|
27
|
+
config_name "kv"
|
|
28
|
+
milestone 2
|
|
29
|
+
|
|
30
|
+
# A string of characters to trim from the value. This is useful if your
|
|
31
|
+
# values are wrapped in brackets or are terminated by comma (like postfix
|
|
32
|
+
# logs)
|
|
33
|
+
#
|
|
34
|
+
# These characters form a regex character class and thus you must escape special regex
|
|
35
|
+
# characters like [ or ] using \.
|
|
36
|
+
#
|
|
37
|
+
# Example, to strip '<' '>' '[' ']' and ',' characters from values:
|
|
38
|
+
#
|
|
39
|
+
# filter {
|
|
40
|
+
# kv {
|
|
41
|
+
# trim => "<>\[\],"
|
|
42
|
+
# }
|
|
43
|
+
# }
|
|
44
|
+
config :trim, :validate => :string
|
|
45
|
+
|
|
46
|
+
# A string of characters to trim from the key. This is useful if your
|
|
47
|
+
# key are wrapped in brackets or starts with space
|
|
48
|
+
#
|
|
49
|
+
# These characters form a regex character class and thus you must escape special regex
|
|
50
|
+
# characters like [ or ] using \.
|
|
51
|
+
#
|
|
52
|
+
# Example, to strip '<' '>' '[' ']' and ',' characters from keys:
|
|
53
|
+
#
|
|
54
|
+
# filter {
|
|
55
|
+
# kv {
|
|
56
|
+
# trimkey => "<>\[\],"
|
|
57
|
+
# }
|
|
58
|
+
# }
|
|
59
|
+
config :trimkey, :validate => :string
|
|
60
|
+
|
|
61
|
+
# A string of characters to use as delimiters for parsing out key-value pairs.
|
|
62
|
+
#
|
|
63
|
+
# These characters form a regex character class and thus you must escape special regex
|
|
64
|
+
# characters like [ or ] using \.
|
|
65
|
+
#
|
|
66
|
+
# #### Example with URL Query Strings
|
|
67
|
+
#
|
|
68
|
+
# Example, to split out the args from a url query string such as
|
|
69
|
+
# '?pin=12345~0&d=123&e=foo@bar.com&oq=bobo&ss=12345':
|
|
70
|
+
#
|
|
71
|
+
# filter {
|
|
72
|
+
# kv {
|
|
73
|
+
# field_split => "&?"
|
|
74
|
+
# }
|
|
75
|
+
# }
|
|
76
|
+
#
|
|
77
|
+
# The above splits on both "&" and "?" characters, giving you the following
|
|
78
|
+
# fields:
|
|
79
|
+
#
|
|
80
|
+
# * pin: 12345~0
|
|
81
|
+
# * d: 123
|
|
82
|
+
# * e: foo@bar.com
|
|
83
|
+
# * oq: bobo
|
|
84
|
+
# * ss: 12345
|
|
85
|
+
config :field_split, :validate => :string, :default => ' '
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# A string of characters to use as delimiters for identifying key-value relations.
|
|
89
|
+
#
|
|
90
|
+
# These characters form a regex character class and thus you must escape special regex
|
|
91
|
+
# characters like [ or ] using \.
|
|
92
|
+
#
|
|
93
|
+
# Example, to identify key-values such as
|
|
94
|
+
# 'key1:value1 key2:value2':
|
|
95
|
+
#
|
|
96
|
+
# filter { kv { value_split => ":" } }
|
|
97
|
+
config :value_split, :validate => :string, :default => '='
|
|
98
|
+
|
|
99
|
+
# A string to prepend to all of the extracted keys
|
|
100
|
+
#
|
|
101
|
+
# Example, to prepend arg_ to all keys:
|
|
102
|
+
#
|
|
103
|
+
# filter { kv { prefix => "arg_" } }
|
|
104
|
+
config :prefix, :validate => :string, :default => ''
|
|
105
|
+
|
|
106
|
+
# The fields to perform 'key=value' searching on
|
|
107
|
+
#
|
|
108
|
+
# Example, to use the message field:
|
|
109
|
+
#
|
|
110
|
+
# filter { kv { source => "message" } }
|
|
111
|
+
config :source, :validate => :string, :default => "message"
|
|
112
|
+
|
|
113
|
+
# The name of the container to put all of the key-value pairs into
|
|
114
|
+
#
|
|
115
|
+
# If this setting is omitted, fields will be written to the root of the
|
|
116
|
+
# event.
|
|
117
|
+
#
|
|
118
|
+
# Example, to place all keys into field kv:
|
|
119
|
+
#
|
|
120
|
+
# filter { kv { target => "kv" } }
|
|
121
|
+
config :target, :validate => :string
|
|
122
|
+
|
|
123
|
+
# An array that specifies the parsed keys which should be added to event.
|
|
124
|
+
# By default all keys will be added.
|
|
125
|
+
#
|
|
126
|
+
# Example, to include only "from" and "to" from a source like "Hey, from=<abc>, to=def foo=bar"
|
|
127
|
+
# while "foo" key will not be added to event.
|
|
128
|
+
#
|
|
129
|
+
# filter {
|
|
130
|
+
# kv {
|
|
131
|
+
# include_keys = [ "from", "to" ]
|
|
132
|
+
# }
|
|
133
|
+
# }
|
|
134
|
+
config :include_keys, :validate => :array, :default => []
|
|
135
|
+
|
|
136
|
+
# An array that specifies the parsed keys which should not be added to event.
|
|
137
|
+
# By default no keys will be excluded.
|
|
138
|
+
#
|
|
139
|
+
# Example, to exclude "from" and "to" from a source like "Hey, from=<abc>, to=def foo=bar"
|
|
140
|
+
# while "foo" key will be added to event.
|
|
141
|
+
#
|
|
142
|
+
# filter {
|
|
143
|
+
# kv {
|
|
144
|
+
# exclude_keys = [ "from", "to" ]
|
|
145
|
+
# }
|
|
146
|
+
# }
|
|
147
|
+
config :exclude_keys, :validate => :array, :default => []
|
|
148
|
+
|
|
149
|
+
# A hash that specifies the default keys and their values that should be added to event
|
|
150
|
+
# in case these keys do no exist in the source field being parsed.
|
|
151
|
+
#
|
|
152
|
+
# filter {
|
|
153
|
+
# kv {
|
|
154
|
+
# default_keys = [ "from", "logstash@example.com",
|
|
155
|
+
# "to", "default@dev.null" ]
|
|
156
|
+
# }
|
|
157
|
+
# }
|
|
158
|
+
config :default_keys, :validate => :hash, :default => {}
|
|
159
|
+
|
|
160
|
+
def register
|
|
161
|
+
@trim_re = Regexp.new("[#{@trim}]") if !@trim.nil?
|
|
162
|
+
@trimkey_re = Regexp.new("[#{@trimkey}]") if !@trimkey.nil?
|
|
163
|
+
@scan_re = Regexp.new("((?:\\\\ |[^"+@field_split+@value_split+"])+)["+@value_split+"](?:\"([^\"]+)\"|'([^']+)'|((?:\\\\ |[^"+@field_split+"])+))")
|
|
164
|
+
end # def register
|
|
165
|
+
|
|
166
|
+
def filter(event)
|
|
167
|
+
return unless filter?(event)
|
|
168
|
+
|
|
169
|
+
kv = Hash.new
|
|
170
|
+
|
|
171
|
+
value = event[@source]
|
|
172
|
+
|
|
173
|
+
case value
|
|
174
|
+
when nil; # Nothing to do
|
|
175
|
+
when String; kv = parse(value, event, kv)
|
|
176
|
+
when Array; value.each { |v| kv = parse(v, event, kv) }
|
|
177
|
+
else
|
|
178
|
+
@logger.warn("kv filter has no support for this type of data",
|
|
179
|
+
:type => value.class, :value => value)
|
|
180
|
+
end # case value
|
|
181
|
+
|
|
182
|
+
# Add default key-values for missing keys
|
|
183
|
+
kv = @default_keys.merge(kv)
|
|
184
|
+
|
|
185
|
+
# If we have any keys, create/append the hash
|
|
186
|
+
if kv.length > 0
|
|
187
|
+
if @target.nil?
|
|
188
|
+
# Default is to write to the root of the event.
|
|
189
|
+
dest = event.to_hash
|
|
190
|
+
else
|
|
191
|
+
if !event[@target].is_a?(Hash)
|
|
192
|
+
@logger.debug("Overwriting existing target field", :target => @target)
|
|
193
|
+
dest = event[@target] = {}
|
|
194
|
+
else
|
|
195
|
+
dest = event[@target]
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
dest.merge!(kv)
|
|
200
|
+
filter_matched(event)
|
|
201
|
+
end
|
|
202
|
+
end # def filter
|
|
203
|
+
|
|
204
|
+
private
|
|
205
|
+
def parse(text, event, kv_keys)
|
|
206
|
+
if !event =~ /[@field_split]/
|
|
207
|
+
return kv_keys
|
|
208
|
+
end
|
|
209
|
+
text.scan(@scan_re) do |key, v1, v2, v3|
|
|
210
|
+
value = v1 || v2 || v3
|
|
211
|
+
key = @trimkey.nil? ? key : key.gsub(@trimkey_re, "")
|
|
212
|
+
|
|
213
|
+
# Bail out as per the values of @include_keys and @exclude_keys
|
|
214
|
+
next if not @include_keys.empty? and not @include_keys.include?(key)
|
|
215
|
+
next if @exclude_keys.include?(key)
|
|
216
|
+
|
|
217
|
+
key = event.sprintf(@prefix) + key
|
|
218
|
+
|
|
219
|
+
value = @trim.nil? ? value : value.gsub(@trim_re, "")
|
|
220
|
+
if kv_keys.has_key?(key)
|
|
221
|
+
if kv_keys[key].is_a? Array
|
|
222
|
+
kv_keys[key].push(value)
|
|
223
|
+
else
|
|
224
|
+
kv_keys[key] = [kv_keys[key], value]
|
|
225
|
+
end
|
|
226
|
+
else
|
|
227
|
+
kv_keys[key] = value
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
return kv_keys
|
|
231
|
+
end
|
|
232
|
+
end # class LogStash::Filters::KV
|