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,109 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# Origin https://groups.google.com/forum/#!msg/logstash-users/exgrB4iQ-mw/R34apku5nXsJ
|
|
3
|
+
# and https://botbot.me/freenode/logstash/msg/4169496/
|
|
4
|
+
# via https://gist.github.com/electrical/4660061e8fff11cdcf37#file-jira-rb
|
|
5
|
+
|
|
6
|
+
# Uses jiralicious as the bridge to JIRA
|
|
7
|
+
# By Martin Cleaver, Blended Perspectives
|
|
8
|
+
# with a lot of help from 'electrical' in #logstash
|
|
9
|
+
|
|
10
|
+
require "logstash/outputs/base"
|
|
11
|
+
require "logstash/namespace"
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# This is so is most useful so you can use logstash to parse and structure
|
|
15
|
+
# your logs and ship structured, json events to JIRA
|
|
16
|
+
#
|
|
17
|
+
# To use this, you'll need to ensure your JIRA instance allows REST calls
|
|
18
|
+
|
|
19
|
+
class LogStash::Outputs::Jira < LogStash::Outputs::Base
|
|
20
|
+
config_name "jira"
|
|
21
|
+
milestone 2
|
|
22
|
+
|
|
23
|
+
# The hostname to send logs to. This should target your JIRA server
|
|
24
|
+
# and has to have the REST interface enabled
|
|
25
|
+
config :host, :validate => :string
|
|
26
|
+
|
|
27
|
+
config :username, :validate => :string, :required => true
|
|
28
|
+
config :password, :validate => :string, :required => true
|
|
29
|
+
|
|
30
|
+
# Javalicious has no proxy support
|
|
31
|
+
###
|
|
32
|
+
# JIRA Project number
|
|
33
|
+
config :projectid, :validate => :string, :required => true
|
|
34
|
+
|
|
35
|
+
# JIRA Issuetype number
|
|
36
|
+
config :issuetypeid, :validate => :string, :required => true
|
|
37
|
+
|
|
38
|
+
# JIRA Summary
|
|
39
|
+
config :summary, :validate => :string, :required => true
|
|
40
|
+
|
|
41
|
+
# JIRA Priority
|
|
42
|
+
config :priority, :validate => :string, :required => true
|
|
43
|
+
|
|
44
|
+
# JIRA Reporter
|
|
45
|
+
config :reporter, :validate => :string
|
|
46
|
+
|
|
47
|
+
# JIRA Reporter
|
|
48
|
+
config :assignee, :validate => :string
|
|
49
|
+
|
|
50
|
+
### The following have not been implemented
|
|
51
|
+
# Ticket creation method
|
|
52
|
+
#config :method, :validate => :string, :default => 'new'
|
|
53
|
+
|
|
54
|
+
# Search fields; When in 'append' method. search for a ticket that has these fields and data.
|
|
55
|
+
#config :searchfields, :validate => :hash
|
|
56
|
+
|
|
57
|
+
# createfields; Add data to these fields at initial creation
|
|
58
|
+
#config :createfields, :validate => :hash
|
|
59
|
+
|
|
60
|
+
# appendfields; Update data in these fields when appending data to an existing ticket
|
|
61
|
+
#config :appendfields, :validate => :hash
|
|
62
|
+
|
|
63
|
+
# Comment; Add this in the comment field ( is for new and append method the same )
|
|
64
|
+
#config :comment, :validate => :string
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
public
|
|
68
|
+
def register
|
|
69
|
+
require "jiralicious" # 0.2.2 works for me
|
|
70
|
+
# nothing to do
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
public
|
|
74
|
+
def receive(event)
|
|
75
|
+
return unless output?(event)
|
|
76
|
+
|
|
77
|
+
if event == LogStash::SHUTDOWN
|
|
78
|
+
finished
|
|
79
|
+
return
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
Jiralicious.configure do |config|
|
|
83
|
+
config.username = @username
|
|
84
|
+
config.password = @password
|
|
85
|
+
config.uri = @host
|
|
86
|
+
config.auth_type = :cookie
|
|
87
|
+
config.api_version = "latest"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
issue = Jiralicious::Issue.new
|
|
92
|
+
issue.fields.set_id("project", @projectid) # would have prefered a project key, https://github.com/jstewart/jiralicious/issues/16
|
|
93
|
+
issue.fields.set("summary", @summary)
|
|
94
|
+
issue.fields.set_id("issuetype", @issuetypeid)
|
|
95
|
+
issue.fields.set_name("reporter", @reporter)
|
|
96
|
+
issue.fields.set_name("assignee", @assignee)
|
|
97
|
+
issue.fields.set_id("priority", @priority)
|
|
98
|
+
#puts issue.fields.to_yaml
|
|
99
|
+
issue.save
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# if response.is_a?(Net::HTTPSuccess)
|
|
104
|
+
# @logger.info("Event send to JIRA OK!")
|
|
105
|
+
# else
|
|
106
|
+
# @logger.warn("HTTP error", :error => response.error!)
|
|
107
|
+
# end
|
|
108
|
+
end # def receive
|
|
109
|
+
end # class LogStash::Outputs::Jira
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "logstash/event"
|
|
5
|
+
|
|
6
|
+
# Push messages to the juggernaut websockets server:
|
|
7
|
+
#
|
|
8
|
+
# * https://github.com/maccman/juggernaut
|
|
9
|
+
#
|
|
10
|
+
# Wraps Websockets and supports other methods (including xhr longpolling) This
|
|
11
|
+
# is basically, just an extension of the redis output (Juggernaut pulls
|
|
12
|
+
# messages from redis). But it pushes messages to a particular channel and
|
|
13
|
+
# formats the messages in the way juggernaut expects.
|
|
14
|
+
class LogStash::Outputs::Juggernaut < LogStash::Outputs::Base
|
|
15
|
+
|
|
16
|
+
config_name "juggernaut"
|
|
17
|
+
milestone 1
|
|
18
|
+
|
|
19
|
+
# The hostname of the redis server to which juggernaut is listening.
|
|
20
|
+
config :host, :validate => :string, :default => "127.0.0.1"
|
|
21
|
+
|
|
22
|
+
# The port to connect on.
|
|
23
|
+
config :port, :validate => :number, :default => 6379
|
|
24
|
+
|
|
25
|
+
# The redis database number.
|
|
26
|
+
config :db, :validate => :number, :default => 0
|
|
27
|
+
|
|
28
|
+
# Redis initial connection timeout in seconds.
|
|
29
|
+
config :timeout, :validate => :number, :default => 5
|
|
30
|
+
|
|
31
|
+
# Password to authenticate with. There is no authentication by default.
|
|
32
|
+
config :password, :validate => :password
|
|
33
|
+
|
|
34
|
+
# List of channels to which to publish. Dynamic names are
|
|
35
|
+
# valid here, for example "logstash-%{type}".
|
|
36
|
+
config :channels, :validate => :array, :required => true
|
|
37
|
+
|
|
38
|
+
# How should the message be formatted before pushing to the websocket.
|
|
39
|
+
config :message_format, :validate => :string
|
|
40
|
+
|
|
41
|
+
public
|
|
42
|
+
def register
|
|
43
|
+
require 'redis'
|
|
44
|
+
|
|
45
|
+
if not @channels
|
|
46
|
+
raise RuntimeError.new(
|
|
47
|
+
"Must define the channels on which to publish the messages"
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
# end TODO
|
|
51
|
+
|
|
52
|
+
@redis = nil
|
|
53
|
+
end # def register
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
def connect
|
|
57
|
+
Redis.new(
|
|
58
|
+
:host => @host,
|
|
59
|
+
:port => @port,
|
|
60
|
+
:timeout => @timeout,
|
|
61
|
+
:db => @db,
|
|
62
|
+
:password => @password
|
|
63
|
+
)
|
|
64
|
+
end # def connect
|
|
65
|
+
|
|
66
|
+
# A string used to identify a redis instance in log messages
|
|
67
|
+
private
|
|
68
|
+
def identity
|
|
69
|
+
@name || "redis://#{@password}@#{@host}:#{@port}/#{@db} #{@data_type}:#{@key}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
public
|
|
74
|
+
def receive(event)
|
|
75
|
+
return unless output?(event)
|
|
76
|
+
begin
|
|
77
|
+
@redis ||= connect
|
|
78
|
+
if @message_format
|
|
79
|
+
formatted = event.sprintf(@message_format)
|
|
80
|
+
else
|
|
81
|
+
formatted = event.to_json
|
|
82
|
+
end
|
|
83
|
+
juggernaut_message = {
|
|
84
|
+
"channels" => @channels.collect{ |x| event.sprintf(x) },
|
|
85
|
+
"data" => event["message"]
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@redis.publish 'juggernaut', juggernaut_message.to_json
|
|
89
|
+
rescue => e
|
|
90
|
+
@logger.warn("Failed to send event to redis", :event => event,
|
|
91
|
+
:identity => identity, :exception => e,
|
|
92
|
+
:backtrace => e.backtrace)
|
|
93
|
+
raise e
|
|
94
|
+
end
|
|
95
|
+
end # def receive
|
|
96
|
+
|
|
97
|
+
public
|
|
98
|
+
def teardown
|
|
99
|
+
if @data_type == 'channel' and @redis
|
|
100
|
+
@redis.quit
|
|
101
|
+
@redis = nil
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
|
|
5
|
+
class LogStash::Outputs::Librato < LogStash::Outputs::Base
|
|
6
|
+
# This output lets you send metrics, annotations and alerts to
|
|
7
|
+
# Librato based on Logstash events
|
|
8
|
+
#
|
|
9
|
+
# This is VERY experimental and inefficient right now.
|
|
10
|
+
|
|
11
|
+
config_name "librato"
|
|
12
|
+
milestone 1
|
|
13
|
+
|
|
14
|
+
# Your Librato account
|
|
15
|
+
# usually an email address
|
|
16
|
+
config :account_id, :validate => :string, :required => true
|
|
17
|
+
|
|
18
|
+
# Your Librato API Token
|
|
19
|
+
config :api_token, :validate => :string, :required => true
|
|
20
|
+
|
|
21
|
+
# Gauges
|
|
22
|
+
# Send data to Librato as a gauge
|
|
23
|
+
#
|
|
24
|
+
# Example:
|
|
25
|
+
# ["value", "%{bytes_recieved}", "source", "%{host}", "name", "apache_bytes"]
|
|
26
|
+
# Additionally, you can override the `measure_time` for the event. Must be a unix timestamp:
|
|
27
|
+
# ["value", "%{bytes_recieved}", "source", "%{host}", "name", "apache_bytes","measure_time", "%{my_unixtime_field}]
|
|
28
|
+
# Default is to use the event's timestamp
|
|
29
|
+
config :gauge, :validate => :hash, :default => {}
|
|
30
|
+
|
|
31
|
+
# Counters
|
|
32
|
+
# Send data to Librato as a counter
|
|
33
|
+
#
|
|
34
|
+
# Example:
|
|
35
|
+
# ["value", "1", "source", "%{host}", "name", "messages_received"]
|
|
36
|
+
# Additionally, you can override the `measure_time` for the event. Must be a unix timestamp:
|
|
37
|
+
# ["value", "1", "source", "%{host}", "name", "messages_received", "measure_time", "%{my_unixtime_field}"]
|
|
38
|
+
# Default is to use the event's timestamp
|
|
39
|
+
config :counter, :validate => :hash, :default => {}
|
|
40
|
+
|
|
41
|
+
# Annotations
|
|
42
|
+
# Registers an annotation with Librato
|
|
43
|
+
# The only required field is `title` and `name`.
|
|
44
|
+
# `start_time` and `end_time` will be set to `event["@timestamp"].to_i`
|
|
45
|
+
# You can add any other optional annotation values as well.
|
|
46
|
+
# All values will be passed through `event.sprintf`
|
|
47
|
+
#
|
|
48
|
+
# Example:
|
|
49
|
+
# ["title":"Logstash event on %{host}", "name":"logstash_stream"]
|
|
50
|
+
# or
|
|
51
|
+
# ["title":"Logstash event", "description":"%{message}", "name":"logstash_stream"]
|
|
52
|
+
config :annotation, :validate => :hash, :default => {}
|
|
53
|
+
|
|
54
|
+
# Batch size
|
|
55
|
+
# Number of events to batch up before sending to Librato.
|
|
56
|
+
#
|
|
57
|
+
config :batch_size, :validate => :string, :default => "10"
|
|
58
|
+
|
|
59
|
+
public
|
|
60
|
+
def register
|
|
61
|
+
require "net/https"
|
|
62
|
+
require "uri"
|
|
63
|
+
@url = "https://metrics-api.librato.com/v1/"
|
|
64
|
+
@uri = URI.parse(@url)
|
|
65
|
+
@client = Net::HTTP.new(@uri.host, @uri.port)
|
|
66
|
+
@client.use_ssl = true
|
|
67
|
+
@client.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
68
|
+
|
|
69
|
+
end # def register
|
|
70
|
+
|
|
71
|
+
public
|
|
72
|
+
def receive(event)
|
|
73
|
+
# TODO (lusis)
|
|
74
|
+
# batch and flush
|
|
75
|
+
return unless output?(event)
|
|
76
|
+
|
|
77
|
+
metrics_event = Hash.new
|
|
78
|
+
unless @gauge.size == 0
|
|
79
|
+
g_hash = Hash[*@gauge.collect{|k,v| [k,event.sprintf(v)]}.flatten]
|
|
80
|
+
g_hash.each do |k,v|
|
|
81
|
+
g_hash[k] = v.to_f if k=="value"
|
|
82
|
+
end
|
|
83
|
+
g_hash['measure_time'] = event["@timestamp"].to_i unless g_hash['measure_time']
|
|
84
|
+
@logger.warn("Gauges hash", :data => g_hash)
|
|
85
|
+
metrics_event['gauges'] = Array.new
|
|
86
|
+
metrics_event['gauges'] << g_hash
|
|
87
|
+
@logger.warn("Metrics hash", :data => metrics_event)
|
|
88
|
+
end
|
|
89
|
+
unless @counter.size == 0
|
|
90
|
+
c_hash = Hash[*@counter.collect{|k,v| [k,event.sprintf(v)]}.flatten]
|
|
91
|
+
c_hash.each do |k,v|
|
|
92
|
+
c_hash[k] = v.to_f if k=="value"
|
|
93
|
+
end
|
|
94
|
+
c_hash['measure_time'] = event["@timestamp"].to_i unless c_hash['measure_time']
|
|
95
|
+
@logger.warn("Counters hash", :data => c_hash)
|
|
96
|
+
metrics_event['counters'] = Array.new
|
|
97
|
+
metrics_event['counters'] << c_hash
|
|
98
|
+
@logger.warn("Metrics hash", :data => metrics_event)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# TODO (lusis)
|
|
102
|
+
# Clean this mess up
|
|
103
|
+
unless metrics_event.size == 0
|
|
104
|
+
request = Net::HTTP::Post.new(@uri.path+"metrics")
|
|
105
|
+
request.basic_auth(@account_id, @api_token)
|
|
106
|
+
|
|
107
|
+
begin
|
|
108
|
+
request.body = metrics_event.to_json
|
|
109
|
+
request.add_field("Content-Type", 'application/json')
|
|
110
|
+
response = @client.request(request)
|
|
111
|
+
@logger.warn("Librato convo", :request => request.inspect, :response => response.inspect)
|
|
112
|
+
raise unless response.code == '200'
|
|
113
|
+
rescue Exception => e
|
|
114
|
+
@logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
unless @annotation.size == 0
|
|
119
|
+
annotation_hash = Hash.new
|
|
120
|
+
annotation_hash['annotations'] = Array.new
|
|
121
|
+
@logger.warn("Original Annotation", :data => @annotation)
|
|
122
|
+
annotation_event = Hash[*@annotation.collect{|k,v| [event.sprintf(k),event.sprintf(v)]}.flatten]
|
|
123
|
+
@logger.warn("Annotation event", :data => annotation_event)
|
|
124
|
+
|
|
125
|
+
annotation_path = "#{@uri.path}annotations/#{annotation_event['name']}"
|
|
126
|
+
@logger.warn("Annotation path", :data => annotation_path)
|
|
127
|
+
request = Net::HTTP::Post.new(annotation_path)
|
|
128
|
+
request.basic_auth(@account_id, @api_token)
|
|
129
|
+
annotation_event.delete('name')
|
|
130
|
+
annotation_event['start_time'] = event["@timestamp"].to_i unless annotation_event['start_time']
|
|
131
|
+
annotation_event['end_time'] = event["@timestamp"].to_i unless annotation_event['end_time']
|
|
132
|
+
annotation_hash['annotations'] << annotation_event
|
|
133
|
+
@logger.warn("Annotation event", :data => annotation_event)
|
|
134
|
+
|
|
135
|
+
begin
|
|
136
|
+
request.body = annotation_event.to_json
|
|
137
|
+
request.add_field("Content-Type", 'application/json')
|
|
138
|
+
response = @client.request(request)
|
|
139
|
+
@logger.warn("Librato convo", :request => request.inspect, :response => response.inspect)
|
|
140
|
+
raise unless response.code == '201'
|
|
141
|
+
rescue Exception => e
|
|
142
|
+
@logger.warn("Unhandled exception", :request => request.inspect, :response => response.inspect, :exception => e.inspect)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end # def receive
|
|
146
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "logstash/outputs/base"
|
|
3
|
+
require "logstash/namespace"
|
|
4
|
+
require "uri"
|
|
5
|
+
# TODO(sissel): Move to something that performs better than net/http
|
|
6
|
+
require "net/http"
|
|
7
|
+
require "net/https"
|
|
8
|
+
|
|
9
|
+
# Ugly monkey patch to get around <http://jira.codehaus.org/browse/JRUBY-5529>
|
|
10
|
+
Net::BufferedIO.class_eval do
|
|
11
|
+
BUFSIZE = 1024 * 16
|
|
12
|
+
|
|
13
|
+
def rbuf_fill
|
|
14
|
+
timeout(@read_timeout) {
|
|
15
|
+
@rbuf << @io.sysread(BUFSIZE)
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Got a loggly account? Use logstash to ship logs to Loggly!
|
|
21
|
+
#
|
|
22
|
+
# This is most useful so you can use logstash to parse and structure
|
|
23
|
+
# your logs and ship structured, json events to your account at Loggly.
|
|
24
|
+
#
|
|
25
|
+
# To use this, you'll need to use a Loggly input with type 'http'
|
|
26
|
+
# and 'json logging' enabled.
|
|
27
|
+
class LogStash::Outputs::Loggly < LogStash::Outputs::Base
|
|
28
|
+
config_name "loggly"
|
|
29
|
+
milestone 2
|
|
30
|
+
|
|
31
|
+
# The hostname to send logs to. This should target the loggly http input
|
|
32
|
+
# server which is usually "logs.loggly.com"
|
|
33
|
+
config :host, :validate => :string, :default => "logs.loggly.com"
|
|
34
|
+
|
|
35
|
+
# The loggly http input key to send to.
|
|
36
|
+
# This is usually visible in the Loggly 'Inputs' page as something like this
|
|
37
|
+
# https://logs.hoover.loggly.net/inputs/abcdef12-3456-7890-abcd-ef0123456789
|
|
38
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
39
|
+
# \----------> key <-------------/
|
|
40
|
+
#
|
|
41
|
+
# You can use %{foo} field lookups here if you need to pull the api key from
|
|
42
|
+
# the event. This is mainly aimed at multitenant hosting providers who want
|
|
43
|
+
# to offer shipping a customer's logs to that customer's loggly account.
|
|
44
|
+
config :key, :validate => :string, :required => true
|
|
45
|
+
|
|
46
|
+
# Should the log action be sent over https instead of plain http
|
|
47
|
+
config :proto, :validate => :string, :default => "http"
|
|
48
|
+
|
|
49
|
+
# Proxy Host
|
|
50
|
+
config :proxy_host, :validate => :string
|
|
51
|
+
|
|
52
|
+
# Proxy Port
|
|
53
|
+
config :proxy_port, :validate => :number
|
|
54
|
+
|
|
55
|
+
# Proxy Username
|
|
56
|
+
config :proxy_user, :validate => :string
|
|
57
|
+
|
|
58
|
+
# Proxy Password
|
|
59
|
+
config :proxy_password, :validate => :password, :default => ""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
public
|
|
63
|
+
def register
|
|
64
|
+
# nothing to do
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
public
|
|
68
|
+
def receive(event)
|
|
69
|
+
return unless output?(event)
|
|
70
|
+
|
|
71
|
+
if event == LogStash::SHUTDOWN
|
|
72
|
+
finished
|
|
73
|
+
return
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Send the event over http.
|
|
77
|
+
url = URI.parse("#{@proto}://#{@host}/inputs/#{event.sprintf(@key)}")
|
|
78
|
+
@logger.info("Loggly URL", :url => url)
|
|
79
|
+
http = Net::HTTP::Proxy(@proxy_host, @proxy_port, @proxy_user, @proxy_password.value).new(url.host, url.port)
|
|
80
|
+
if url.scheme == 'https'
|
|
81
|
+
http.use_ssl = true
|
|
82
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
83
|
+
end
|
|
84
|
+
request = Net::HTTP::Post.new(url.path)
|
|
85
|
+
request.body = event.to_json
|
|
86
|
+
response = http.request(request)
|
|
87
|
+
if response.is_a?(Net::HTTPSuccess)
|
|
88
|
+
@logger.info("Event send to Loggly OK!")
|
|
89
|
+
else
|
|
90
|
+
@logger.warn("HTTP error", :error => response.error!)
|
|
91
|
+
end
|
|
92
|
+
end # def receive
|
|
93
|
+
end # class LogStash::Outputs::Loggly
|