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,73 @@
|
|
|
1
|
+
require 'logstash/namespace'
|
|
2
|
+
require 'logstash/filters/base'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# This filter automatically sum all numbers found inside a string
|
|
6
|
+
#
|
|
7
|
+
# The sum is returned in a new field, "sumTotal".
|
|
8
|
+
# The total numbers summed will be in a new field, "sumNums"
|
|
9
|
+
#
|
|
10
|
+
# The fields produced by this filter are extra useful used in combination
|
|
11
|
+
# with kibana number plotting features.
|
|
12
|
+
#
|
|
13
|
+
# If the field is an array, all of the numbers in it will be summed.
|
|
14
|
+
# If the field is a hash, all of the values of the top-level keys will be summed.
|
|
15
|
+
# If the field is a string, it will be split, numbers extracted, and summed.
|
|
16
|
+
class LogStash::Filters::SumNumbers < LogStash::Filters::Base
|
|
17
|
+
config_name 'sumnumbers'
|
|
18
|
+
milestone 1
|
|
19
|
+
|
|
20
|
+
# The source field for the data. By default is message.
|
|
21
|
+
config :source, :validate => :string, :default => 'message'
|
|
22
|
+
|
|
23
|
+
public
|
|
24
|
+
def register
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
public
|
|
28
|
+
def filter(event)
|
|
29
|
+
msg = event[@source]
|
|
30
|
+
sumnums = 0
|
|
31
|
+
sumtotal = 0
|
|
32
|
+
|
|
33
|
+
if not msg
|
|
34
|
+
return
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# If for some reason the field is an array of values, take the first only.
|
|
38
|
+
if msg.is_a?(Array)
|
|
39
|
+
fields = msg.first.split
|
|
40
|
+
# If msg is json, get an array from the values
|
|
41
|
+
elsif msg.is_a?(Hash)
|
|
42
|
+
fields = msg.values
|
|
43
|
+
# Else, we have a string. Split it.
|
|
44
|
+
else
|
|
45
|
+
fields = msg.split
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
for elem in fields
|
|
49
|
+
int = str_as_integer(elem)
|
|
50
|
+
if int != nil
|
|
51
|
+
sumtotal += int
|
|
52
|
+
sumnums += 1
|
|
53
|
+
next
|
|
54
|
+
end
|
|
55
|
+
f = str_as_float(elem)
|
|
56
|
+
if f != nil
|
|
57
|
+
sumtotal += f
|
|
58
|
+
sumnums += 1
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
event["sumNums"] = sumnums
|
|
63
|
+
event["sumTotal"] = sumtotal
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def str_as_integer(str)
|
|
67
|
+
Integer(str) rescue nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def str_as_float(str)
|
|
71
|
+
Float(str) rescue nil
|
|
72
|
+
end
|
|
73
|
+
end # class LogStash::Filters::SumNumbers
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Filter plugin for logstash to parse the PRI field from the front
|
|
6
|
+
# of a Syslog (RFC3164) message. If no priority is set, it will
|
|
7
|
+
# default to 13 (per RFC).
|
|
8
|
+
#
|
|
9
|
+
# This filter is based on the original syslog.rb code shipped
|
|
10
|
+
# with logstash.
|
|
11
|
+
class LogStash::Filters::Syslog_pri < LogStash::Filters::Base
|
|
12
|
+
config_name "syslog_pri"
|
|
13
|
+
|
|
14
|
+
# set the status to experimental/beta/stable
|
|
15
|
+
milestone 1
|
|
16
|
+
|
|
17
|
+
# Add human-readable names after parsing severity and facility from PRI
|
|
18
|
+
config :use_labels, :validate => :boolean, :default => true
|
|
19
|
+
|
|
20
|
+
# Name of field which passes in the extracted PRI part of the syslog message
|
|
21
|
+
config :syslog_pri_field_name, :validate => :string, :default => "syslog_pri"
|
|
22
|
+
|
|
23
|
+
# Labels for facility levels. This comes from RFC3164.
|
|
24
|
+
config :facility_labels, :validate => :array, :default => [
|
|
25
|
+
"kernel",
|
|
26
|
+
"user-level",
|
|
27
|
+
"mail",
|
|
28
|
+
"daemon",
|
|
29
|
+
"security/authorization",
|
|
30
|
+
"syslogd",
|
|
31
|
+
"line printer",
|
|
32
|
+
"network news",
|
|
33
|
+
"uucp",
|
|
34
|
+
"clock",
|
|
35
|
+
"security/authorization",
|
|
36
|
+
"ftp",
|
|
37
|
+
"ntp",
|
|
38
|
+
"log audit",
|
|
39
|
+
"log alert",
|
|
40
|
+
"clock",
|
|
41
|
+
"local0",
|
|
42
|
+
"local1",
|
|
43
|
+
"local2",
|
|
44
|
+
"local3",
|
|
45
|
+
"local4",
|
|
46
|
+
"local5",
|
|
47
|
+
"local6",
|
|
48
|
+
"local7",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
# Labels for severity levels. This comes from RFC3164.
|
|
52
|
+
config :severity_labels, :validate => :array, :default => [
|
|
53
|
+
"emergency",
|
|
54
|
+
"alert",
|
|
55
|
+
"critical",
|
|
56
|
+
"error",
|
|
57
|
+
"warning",
|
|
58
|
+
"notice",
|
|
59
|
+
"informational",
|
|
60
|
+
"debug",
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
public
|
|
64
|
+
def register
|
|
65
|
+
# Nothing
|
|
66
|
+
end # def register
|
|
67
|
+
|
|
68
|
+
public
|
|
69
|
+
def filter(event)
|
|
70
|
+
return unless filter?(event)
|
|
71
|
+
parse_pri(event)
|
|
72
|
+
filter_matched(event)
|
|
73
|
+
end # def filter
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
def parse_pri(event)
|
|
77
|
+
# Per RFC3164, priority = (facility * 8) + severity
|
|
78
|
+
# = (facility << 3) & (severity)
|
|
79
|
+
if event[@syslog_pri_field_name]
|
|
80
|
+
if event[@syslog_pri_field_name].is_a?(Array)
|
|
81
|
+
priority = event[@syslog_pri_field_name].first.to_i
|
|
82
|
+
else
|
|
83
|
+
priority = event[@syslog_pri_field_name].to_i
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
priority = 13 # default
|
|
87
|
+
end
|
|
88
|
+
severity = priority & 7 # 7 is 111 (3 bits)
|
|
89
|
+
facility = priority >> 3
|
|
90
|
+
event["syslog_severity_code"] = severity
|
|
91
|
+
event["syslog_facility_code"] = facility
|
|
92
|
+
|
|
93
|
+
# Add human-readable names after parsing severity and facility from PRI
|
|
94
|
+
if @use_labels
|
|
95
|
+
facility_number = event["syslog_facility_code"]
|
|
96
|
+
severity_number = event["syslog_severity_code"]
|
|
97
|
+
|
|
98
|
+
if @facility_labels[facility_number]
|
|
99
|
+
event["syslog_facility"] = @facility_labels[facility_number]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if @severity_labels[severity_number]
|
|
103
|
+
event["syslog_severity"] = @severity_labels[severity_number]
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end # def parse_pri
|
|
107
|
+
end # class LogStash::Filters::SyslogPRI
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
# Originally written to translate HTTP response codes
|
|
6
|
+
# but turned into a general translation tool which uses
|
|
7
|
+
# configured has or/and .yaml files as a dictionary.
|
|
8
|
+
# response codes in default dictionary were scraped from
|
|
9
|
+
# 'gem install cheat; cheat status_codes'
|
|
10
|
+
#
|
|
11
|
+
# Alternatively for simple string search and replacements for just a few values
|
|
12
|
+
# use the gsub function of the mutate filter.
|
|
13
|
+
|
|
14
|
+
class LogStash::Filters::Translate < LogStash::Filters::Base
|
|
15
|
+
config_name "translate"
|
|
16
|
+
milestone 1
|
|
17
|
+
|
|
18
|
+
# The field containing a response code If this field is an
|
|
19
|
+
# array, only the first value will be used.
|
|
20
|
+
config :field, :validate => :string, :required => true
|
|
21
|
+
|
|
22
|
+
# In case dstination field already exists should we skip translation(default) or override it with new translation
|
|
23
|
+
config :override, :validate => :boolean, :default => false
|
|
24
|
+
|
|
25
|
+
# Dictionary to use for translation.
|
|
26
|
+
# Example:
|
|
27
|
+
#
|
|
28
|
+
# filter {
|
|
29
|
+
# %PLUGIN% {
|
|
30
|
+
# dictionary => [ "100", "Continue",
|
|
31
|
+
# "101", "Switching Protocols",
|
|
32
|
+
# "200", "OK",
|
|
33
|
+
# "201", "Created",
|
|
34
|
+
# "202", "Accepted" ]
|
|
35
|
+
# }
|
|
36
|
+
# }
|
|
37
|
+
config :dictionary, :validate => :hash, :default => {}
|
|
38
|
+
|
|
39
|
+
# name with full path of external dictionary file.
|
|
40
|
+
# format of the table should be a YAML file which will be merged with the @dictionary.
|
|
41
|
+
# make sure you encase any integer based keys in quotes.
|
|
42
|
+
# The YAML file should look something like this:
|
|
43
|
+
#
|
|
44
|
+
# 100: Continue
|
|
45
|
+
# 101: Switching Protocols
|
|
46
|
+
config :dictionary_path, :validate => :path
|
|
47
|
+
|
|
48
|
+
# The destination field you wish to populate with the translation code.
|
|
49
|
+
# default is "translation".
|
|
50
|
+
# Set to the same value as source if you want to do a substitution, in this case filter will allways succeed.
|
|
51
|
+
config :destination, :validate => :string, :default => "translation"
|
|
52
|
+
|
|
53
|
+
# set to false if you want to match multiple terms
|
|
54
|
+
# a large dictionary could get expensive if set to false.
|
|
55
|
+
config :exact, :validate => :boolean, :default => true
|
|
56
|
+
|
|
57
|
+
# treat dictionary keys as regular expressions to match against, used only then @exact enabled.
|
|
58
|
+
config :regex, :validate => :boolean, :default => false
|
|
59
|
+
|
|
60
|
+
# Incase no translation was made add default translation string
|
|
61
|
+
config :fallback, :validate => :string
|
|
62
|
+
|
|
63
|
+
public
|
|
64
|
+
def register
|
|
65
|
+
if @dictionary_path
|
|
66
|
+
raise "#{self.class.name}: dictionary file #{@dictionary_path} does not exists" unless File.exists?(@dictionary_path)
|
|
67
|
+
begin
|
|
68
|
+
@dictionary.merge!(YAML.load_file(@dictionary_path))
|
|
69
|
+
rescue Exception => e
|
|
70
|
+
raise "#{self.class.name}: Bad Syntax in dictionary file #{@dictionary_path}"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
@logger.debug? and @logger.debug("#{self.class.name}: Dictionary - ", :dictionary => @dictionary)
|
|
75
|
+
if @exact
|
|
76
|
+
@logger.debug? and @logger.debug("#{self.class.name}: Dictionary translation method - Exact")
|
|
77
|
+
else
|
|
78
|
+
@logger.debug? and @logger.debug("#{self.class.name}: Dictionary translation method - Fuzzy")
|
|
79
|
+
end
|
|
80
|
+
end # def register
|
|
81
|
+
|
|
82
|
+
public
|
|
83
|
+
def filter(event)
|
|
84
|
+
return unless filter?(event)
|
|
85
|
+
|
|
86
|
+
return unless event.include?(@field) # Skip translation in case event does not have @event field.
|
|
87
|
+
return if event.include?(@destination) and not @override # Skip translation in case @destination field already exists and @override is disabled.
|
|
88
|
+
|
|
89
|
+
begin
|
|
90
|
+
#If source field is array use first value and make sure source value is string
|
|
91
|
+
source = event[@field].is_a?(Array) ? event[@field].first.to_s : event[@field].to_s
|
|
92
|
+
matched = false
|
|
93
|
+
if @exact
|
|
94
|
+
if @regex
|
|
95
|
+
key = @dictionary.keys.detect{|k| source.match(Regexp.new(k))}
|
|
96
|
+
if key
|
|
97
|
+
event[@destination] = @dictionary[key]
|
|
98
|
+
matched = true
|
|
99
|
+
end
|
|
100
|
+
elsif @dictionary.include?(source)
|
|
101
|
+
event[@destination] = @dictionary[source]
|
|
102
|
+
matched = true
|
|
103
|
+
end
|
|
104
|
+
else
|
|
105
|
+
translation = source.gsub(Regexp.union(@dictionary.keys), @dictionary)
|
|
106
|
+
if source != translation
|
|
107
|
+
event[@destination] = translation
|
|
108
|
+
matched = true
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
if not matched and @fallback
|
|
113
|
+
event[@destination] = @fallback
|
|
114
|
+
matched = true
|
|
115
|
+
end
|
|
116
|
+
filter_matched(event) if matched or @field == @destination
|
|
117
|
+
rescue Exception => e
|
|
118
|
+
@logger.error("Something went wrong when attempting to translate from dictionary", :exception => e, :field => @field, :event => event)
|
|
119
|
+
end
|
|
120
|
+
end # def filter
|
|
121
|
+
end # class LogStash::Filters::Translate
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
class LogStash::Filters::Unique < LogStash::Filters::Base
|
|
6
|
+
|
|
7
|
+
config_name "unique"
|
|
8
|
+
milestone 1
|
|
9
|
+
|
|
10
|
+
# The fields on which to run the unique filter.
|
|
11
|
+
config :fields, :validate => :array, :required => true
|
|
12
|
+
|
|
13
|
+
public
|
|
14
|
+
def register
|
|
15
|
+
# Nothing to do
|
|
16
|
+
end # def register
|
|
17
|
+
|
|
18
|
+
public
|
|
19
|
+
def filter(event)
|
|
20
|
+
return unless filter?(event)
|
|
21
|
+
|
|
22
|
+
@fields.each do |field|
|
|
23
|
+
next unless event[field].class == Array
|
|
24
|
+
|
|
25
|
+
event[field] = event[field].uniq
|
|
26
|
+
end
|
|
27
|
+
end # def filter
|
|
28
|
+
|
|
29
|
+
end # class Logstash::Filters::Unique
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "uri"
|
|
5
|
+
|
|
6
|
+
# The urldecode filter is for decoding fields that are urlencoded.
|
|
7
|
+
class LogStash::Filters::Urldecode < LogStash::Filters::Base
|
|
8
|
+
config_name "urldecode"
|
|
9
|
+
milestone 2
|
|
10
|
+
|
|
11
|
+
# The field which value is urldecoded
|
|
12
|
+
config :field, :validate => :string, :default => "message"
|
|
13
|
+
|
|
14
|
+
# Urldecode all fields
|
|
15
|
+
config :all_fields, :validate => :boolean, :default => false
|
|
16
|
+
|
|
17
|
+
public
|
|
18
|
+
def register
|
|
19
|
+
# Nothing to do
|
|
20
|
+
end #def register
|
|
21
|
+
|
|
22
|
+
public
|
|
23
|
+
def filter(event)
|
|
24
|
+
return unless filter?(event)
|
|
25
|
+
|
|
26
|
+
# If all_fields is true then try to decode them all
|
|
27
|
+
if @all_fields
|
|
28
|
+
event.to_hash.each do |name, value|
|
|
29
|
+
event[name] = urldecode(value)
|
|
30
|
+
end
|
|
31
|
+
# Else decode the specified field
|
|
32
|
+
else
|
|
33
|
+
event[@field] = urldecode(event[@field])
|
|
34
|
+
end
|
|
35
|
+
filter_matched(event)
|
|
36
|
+
end # def filter
|
|
37
|
+
|
|
38
|
+
# Attempt to handle string, array, and hash values for fields.
|
|
39
|
+
# For all other datatypes, just return, URI.unescape doesn't support them.
|
|
40
|
+
private
|
|
41
|
+
def urldecode(value)
|
|
42
|
+
case value
|
|
43
|
+
when String
|
|
44
|
+
return URI.unescape(value)
|
|
45
|
+
when Array
|
|
46
|
+
ret_values = []
|
|
47
|
+
value.each { |v| ret_values << urldecode(v) }
|
|
48
|
+
return ret_values
|
|
49
|
+
when Hash
|
|
50
|
+
ret_values = {}
|
|
51
|
+
value.each { |k,v| ret_values[k] = urldecode(v) }
|
|
52
|
+
return ret_values
|
|
53
|
+
else
|
|
54
|
+
return value
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end # class LogStash::Filters::Urldecode
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/filters/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "tempfile"
|
|
5
|
+
|
|
6
|
+
# Parse user agent strings into structured data based on BrowserScope data
|
|
7
|
+
#
|
|
8
|
+
# UserAgent filter, adds information about user agent like family, operating
|
|
9
|
+
# system, version, and device
|
|
10
|
+
#
|
|
11
|
+
# Logstash releases ship with the regexes.yaml database made available from
|
|
12
|
+
# ua-parser with an Apache 2.0 license. For more details on ua-parser, see
|
|
13
|
+
# <https://github.com/tobie/ua-parser/>.
|
|
14
|
+
class LogStash::Filters::UserAgent < LogStash::Filters::Base
|
|
15
|
+
config_name "useragent"
|
|
16
|
+
milestone 1
|
|
17
|
+
|
|
18
|
+
# The field containing the user agent string. If this field is an
|
|
19
|
+
# array, only the first value will be used.
|
|
20
|
+
config :source, :validate => :string, :required => true
|
|
21
|
+
|
|
22
|
+
# The name of the field to assign user agent data into.
|
|
23
|
+
#
|
|
24
|
+
# If not specified user agent data will be stored in the root of the event.
|
|
25
|
+
config :target, :validate => :string
|
|
26
|
+
|
|
27
|
+
# regexes.yaml file to use
|
|
28
|
+
#
|
|
29
|
+
# If not specified, this will default to the regexes.yaml that ships
|
|
30
|
+
# with logstash.
|
|
31
|
+
#
|
|
32
|
+
# You can find the latest version of this here:
|
|
33
|
+
# <https://github.com/tobie/ua-parser/blob/master/regexes.yaml>
|
|
34
|
+
config :regexes, :validate => :string
|
|
35
|
+
|
|
36
|
+
# A string to prepend to all of the extracted keys
|
|
37
|
+
config :prefix, :validate => :string, :default => ''
|
|
38
|
+
|
|
39
|
+
public
|
|
40
|
+
def register
|
|
41
|
+
require 'user_agent_parser'
|
|
42
|
+
if @regexes.nil?
|
|
43
|
+
begin
|
|
44
|
+
@parser = UserAgentParser::Parser.new()
|
|
45
|
+
rescue Exception => e
|
|
46
|
+
begin
|
|
47
|
+
if __FILE__ =~ /file:\/.*\.jar!/
|
|
48
|
+
# Running from a flatjar which has a different layout
|
|
49
|
+
regexes_file = [__FILE__.split("!").first, "/vendor/ua-parser/regexes.yaml"].join("!")
|
|
50
|
+
@parser = UserAgentParser::Parser.new(:patterns_path => regexes_file)
|
|
51
|
+
else
|
|
52
|
+
# assume operating from the git checkout
|
|
53
|
+
@parser = UserAgentParser::Parser.new(:patterns_path => "vendor/ua-parser/regexes.yaml")
|
|
54
|
+
end
|
|
55
|
+
rescue => ex
|
|
56
|
+
raise "Failed to cache, due to: #{ex}\n"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
else
|
|
60
|
+
@logger.info("Using user agent regexes", :regexes => @regexes)
|
|
61
|
+
@parser = UserAgentParser::Parser.new(:patterns_path => @regexes)
|
|
62
|
+
end
|
|
63
|
+
end #def register
|
|
64
|
+
|
|
65
|
+
public
|
|
66
|
+
def filter(event)
|
|
67
|
+
return unless filter?(event)
|
|
68
|
+
ua_data = nil
|
|
69
|
+
|
|
70
|
+
useragent = event[@source]
|
|
71
|
+
useragent = useragent.first if useragent.is_a? Array
|
|
72
|
+
|
|
73
|
+
begin
|
|
74
|
+
ua_data = @parser.parse(useragent)
|
|
75
|
+
rescue Exception => e
|
|
76
|
+
@logger.error("Uknown error while parsing user agent data", :exception => e, :field => @source, :event => event)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if !ua_data.nil?
|
|
80
|
+
if @target.nil?
|
|
81
|
+
# default write to the root of the event
|
|
82
|
+
target = event
|
|
83
|
+
else
|
|
84
|
+
target = event[@target] ||= {}
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
target[@prefix + "name"] = ua_data.name
|
|
88
|
+
|
|
89
|
+
#OSX, Andriod and maybe iOS parse correctly, ua-agent parsing for Windows does not provide this level of detail
|
|
90
|
+
unless ua_data.os.nil?
|
|
91
|
+
target[@prefix + "os"] = ua_data.os.to_s
|
|
92
|
+
target[@prefix + "os_name"] = ua_data.os.name.to_s
|
|
93
|
+
target[@prefix + "os_major"] = ua_data.os.version.major.to_s unless ua_data.os.version.nil?
|
|
94
|
+
target[@prefix + "os_minor"] = ua_data.os.version.minor.to_s unless ua_data.os.version.nil?
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
target[@prefix + "device"] = ua_data.device.to_s if not ua_data.device.nil?
|
|
98
|
+
|
|
99
|
+
if not ua_data.version.nil?
|
|
100
|
+
ua_version = ua_data.version
|
|
101
|
+
target[@prefix + "major"] = ua_version.major
|
|
102
|
+
target[@prefix + "minor"] = ua_version.minor
|
|
103
|
+
target[@prefix + "patch"] = ua_version.patch if ua_version.patch
|
|
104
|
+
target[@prefix + "build"] = ua_version.patch_minor if ua_version.patch_minor
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
filter_matched(event)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end # def filter
|
|
111
|
+
end # class LogStash::Filters::UserAgent
|
|
112
|
+
|