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,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Getting Started (Standalone server) - logstash
|
|
3
|
+
layout: content_right
|
|
4
|
+
---
|
|
5
|
+
# Getting started with logstash (standalone server example)
|
|
6
|
+
|
|
7
|
+
This guide shows how to get you going quickly with logstash on a single,
|
|
8
|
+
standalone server. We'll begin by showing you how to read events from standard
|
|
9
|
+
input (your keyboard) and emit them to standard output. After that, we'll start
|
|
10
|
+
collecting actual log files.
|
|
11
|
+
|
|
12
|
+
By standalone, I mean that everything happens on a single server: log collection, indexing, and the web interface.
|
|
13
|
+
|
|
14
|
+
logstash can be run on multiple servers (collect from many servers to a single
|
|
15
|
+
indexer) if you want, but this example shows simply a standalone configuration.
|
|
16
|
+
|
|
17
|
+
Steps detailed in this guide:
|
|
18
|
+
|
|
19
|
+
* Download and run logstash
|
|
20
|
+
|
|
21
|
+
## Problems?
|
|
22
|
+
|
|
23
|
+
If you have problems, feel free to email the users list
|
|
24
|
+
(logstash-users@googlegroups.com) or join IRC (#logstash on irc.freenode.org)
|
|
25
|
+
|
|
26
|
+
## logstash
|
|
27
|
+
|
|
28
|
+
You should download the logstash jar file - if you haven't yet,
|
|
29
|
+
[download it
|
|
30
|
+
now](https://download.elasticsearch.org/logstash/logstash/logstash-%VERSION%-flatjar.jar).
|
|
31
|
+
This package includes most of the dependencies for logstash in it and
|
|
32
|
+
helps you get started quicker.
|
|
33
|
+
|
|
34
|
+
The configuration of any logstash agent consists of specifying inputs, filters,
|
|
35
|
+
and outputs. For this example, we will not configure any filters.
|
|
36
|
+
|
|
37
|
+
The inputs are your log files. The output will be elasticsearch. The config
|
|
38
|
+
format should be simple to read and write. The bottom of this document includes
|
|
39
|
+
links for further reading (config, etc) if you want to learn more.
|
|
40
|
+
|
|
41
|
+
Here is a simple Logstash configuration:
|
|
42
|
+
|
|
43
|
+
input { stdin { } }
|
|
44
|
+
output { stdout { codec => rubydebug } }
|
|
45
|
+
|
|
46
|
+
Save this to a file called `logstash-simple.conf` and run it like so:
|
|
47
|
+
|
|
48
|
+
java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-simple.conf
|
|
49
|
+
|
|
50
|
+
After a few seconds, type something in the console where you started logstash.
|
|
51
|
+
Maybe `hello`. You should get some output like so:
|
|
52
|
+
|
|
53
|
+
{
|
|
54
|
+
"message" => "hello",
|
|
55
|
+
"@timestamp" => "2013-09-04T00:24:21.707Z",
|
|
56
|
+
"@version" => "1",
|
|
57
|
+
"host" => "pork"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
If everything is okay, let's move on to a more complex version:
|
|
61
|
+
|
|
62
|
+
### Saving to Elasticsearch
|
|
63
|
+
|
|
64
|
+
The recommended storage engine for Logstash is Elasticsearch. If you're running
|
|
65
|
+
Logstash from the jar file or via jruby, you can use an embedded version of
|
|
66
|
+
Elasticsearch for storage.
|
|
67
|
+
|
|
68
|
+
Using our configuration above, let's change it to look like so:
|
|
69
|
+
|
|
70
|
+
input { stdin { type => example } }
|
|
71
|
+
output {
|
|
72
|
+
stdout { codec => rubydebug }
|
|
73
|
+
elasticsearch { embedded => true }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
We're going to KEEP the existing configuration but add a second output -
|
|
77
|
+
embedded Elasticsearch. Restart your Logstash (CTRL-C and rerun the java
|
|
78
|
+
command). Depending on the horsepower of your machine, this could take some
|
|
79
|
+
time. Logstash needs to extract the jar contents to a working directory AND
|
|
80
|
+
start an instance of Elasticsearch.
|
|
81
|
+
|
|
82
|
+
Let's do our test again by simply typing `test`. You should get the same output to the console.
|
|
83
|
+
Now let's verify that Logstash stored the message in Elasticsearch:
|
|
84
|
+
|
|
85
|
+
curl -s http://127.0.0.1:9200/_status?pretty=true | grep logstash
|
|
86
|
+
|
|
87
|
+
_This assumes you have the `curl` command installed._
|
|
88
|
+
|
|
89
|
+
You should get back some output like so:
|
|
90
|
+
|
|
91
|
+
"logstash-2012.07.02" : {
|
|
92
|
+
"index" : "logstash-2012.07.02"
|
|
93
|
+
|
|
94
|
+
This means Logstash created a new index based on today's date. Likely your data is in there as well:
|
|
95
|
+
|
|
96
|
+
`curl -gs -XGET "http://localhost:9200/logstash-*/_search?pretty&q=type:example"`
|
|
97
|
+
|
|
98
|
+
This will return a rather large JSON output. We're only concerned with a subset:
|
|
99
|
+
|
|
100
|
+
"_index" : "logstash-2013.09.07",
|
|
101
|
+
"_type" : "logs",
|
|
102
|
+
"_id" : "iARTN3MtQ-Kaf_x0fZaFwQ",
|
|
103
|
+
"_score" : 1.4054651, "_source" : {
|
|
104
|
+
"message": "fizzle",
|
|
105
|
+
"@timestamp": "2013-09-07T00:42:23.453Z",
|
|
106
|
+
"@version": "1",
|
|
107
|
+
"type": "example",
|
|
108
|
+
"host": "pork"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
Your output may look a little different.
|
|
112
|
+
The reason we're going about it this way is to make absolutely sure that we have all the bits working before adding more complexity.
|
|
113
|
+
|
|
114
|
+
If you are unable to get these steps working, you likely have something interfering with multicast traffic. This has been known to happen when connected to VPNs for instance.
|
|
115
|
+
For best results, test on a Linux VM or system with less complicated networking. If in doubt, rerun the command with the options `-vv` and paste the output to Github Gist or Pastie.
|
|
116
|
+
Hop on the logstash IRC channel or mailing list and ask for help with that output as reference.
|
|
117
|
+
|
|
118
|
+
Obviously this is fairly useless this way. Let's add the final step and test with the builtin logstash web ui:
|
|
119
|
+
|
|
120
|
+
### Testing the webui
|
|
121
|
+
|
|
122
|
+
We've already proven that events can make it into Elasticsearch. However using
|
|
123
|
+
curl for everything is less than ideal.
|
|
124
|
+
|
|
125
|
+
Logstash ships with a built-in web interface (called Kibana). Let's restart our
|
|
126
|
+
logstash process with an additional option:
|
|
127
|
+
|
|
128
|
+
java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-simple.conf -- web
|
|
129
|
+
|
|
130
|
+
One important thing to note is that the `web` option is actually its own set of
|
|
131
|
+
commmand-line options. We're essentially starting two programs in one. This is
|
|
132
|
+
worth remembering as you move to an external Elasticsearch server. The options
|
|
133
|
+
you specify in your logstash.conf have no bearing on the web ui. It has its own
|
|
134
|
+
options.
|
|
135
|
+
|
|
136
|
+
Again, the reason for testing without the web interface is to ensure that the
|
|
137
|
+
logstash agent itself is getting events into Elasticsearch. This is different
|
|
138
|
+
than the Logstash web ui being able to read them. As before, we'll need to
|
|
139
|
+
wait a bit for everything to spin up. You can verify that everything is running
|
|
140
|
+
(assuming you aren't running with any `-v` options) by checking the output of
|
|
141
|
+
`netstat`:
|
|
142
|
+
|
|
143
|
+
netstat -napt | grep -i LISTEN
|
|
144
|
+
|
|
145
|
+
What's interesting is that you should see the following ports in use:
|
|
146
|
+
|
|
147
|
+
- 9200
|
|
148
|
+
- 9300
|
|
149
|
+
- 9301
|
|
150
|
+
- 9302
|
|
151
|
+
- 9292
|
|
152
|
+
|
|
153
|
+
The `9200` and `9300` ports are the embedded ES listening. The `9301` and `9302` ports are the agent and web interfaces talking to ES. `9292` is the port the web ui listens on.
|
|
154
|
+
|
|
155
|
+
If you open a browser to http://localhost:9292/ and click on the link in the body, you should see results. If not, switch back to your console, type some test and hit return.
|
|
156
|
+
Refresh the browser page and you should have results!
|
|
157
|
+
|
|
158
|
+
### Continuing on
|
|
159
|
+
At this point you have a working self-contained Logstash instance. However typing things into stdin is likely not to be what you want.
|
|
160
|
+
|
|
161
|
+
Here is a sample config you can start with. It defines some basic inputs
|
|
162
|
+
grouped by type and two outputs.
|
|
163
|
+
|
|
164
|
+
input {
|
|
165
|
+
stdin {
|
|
166
|
+
type => "stdin-type"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
file {
|
|
170
|
+
type => "syslog"
|
|
171
|
+
|
|
172
|
+
# Wildcards work, here :)
|
|
173
|
+
path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
output {
|
|
178
|
+
stdout { }
|
|
179
|
+
elasticsearch { embedded => true }
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
Put this in a file called "logstash-complex.conf"
|
|
183
|
+
|
|
184
|
+
Now run it all (again. Be sure to stop your previous Logstash tests!):
|
|
185
|
+
|
|
186
|
+
java -jar logstash-%VERSION%-flatjar.jar agent -f logstash-complex.conf -- web
|
|
187
|
+
|
|
188
|
+
Point your browser at <http://yourserver:9292> and start searching!
|
|
189
|
+
|
|
190
|
+
*Note*: If things are not working, such as you get an error message while
|
|
191
|
+
searching, like 'SERVICE_UNAVAILABLE' or some other elasticsearch error, you
|
|
192
|
+
should check that your firewall (local, too) is not blocking multicast.
|
|
193
|
+
|
|
194
|
+
## Further reading
|
|
195
|
+
|
|
196
|
+
Want to know more about the configuration language? Check out the
|
|
197
|
+
[configuration](../configuration) documentation.
|
|
198
|
+
|
|
199
|
+
You may have logs on many servers you want to centralize through logstash. To
|
|
200
|
+
learn how to do that, [read this](getting-started-centralized)
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Just Enough RabbitMQ - logstash
|
|
3
|
+
layout: content_right
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
While configuring your RabbitMQ broker is out of scope for logstash, it's important
|
|
7
|
+
to understand how logstash uses RabbitMQ. To do that, we need to understand a
|
|
8
|
+
little about AMQP.
|
|
9
|
+
|
|
10
|
+
You should also consider reading
|
|
11
|
+
[this](http://www.rabbitmq.com/tutorials/amqp-concepts.html) at the RabbitMQ
|
|
12
|
+
website.
|
|
13
|
+
|
|
14
|
+
# Exchanges, queues and bindings; OH MY!
|
|
15
|
+
|
|
16
|
+
You can get a long way by understanding a few key terms.
|
|
17
|
+
|
|
18
|
+
## Exchanges
|
|
19
|
+
|
|
20
|
+
Exchanges are for message **producers**. In Logstash, we map these to
|
|
21
|
+
**outputs**. Logstash puts messages on exchanges. There are many types of
|
|
22
|
+
exchanges and they are discussed below.
|
|
23
|
+
|
|
24
|
+
## Queues
|
|
25
|
+
|
|
26
|
+
Queues are for message **consumers**. In Logstash, we map these to inputs.
|
|
27
|
+
Logstash reads messages from queues. Optionally, queues can consume only a
|
|
28
|
+
subset of messages. This is done with "routing keys".
|
|
29
|
+
|
|
30
|
+
## Bindings
|
|
31
|
+
|
|
32
|
+
Just having a producer and a consumer is not enough. We must `bind` a queue to
|
|
33
|
+
an exchange. When we bind a queue to an exchange, we can optionally provide a
|
|
34
|
+
routing key. Routing keys are discussed below.
|
|
35
|
+
|
|
36
|
+
## Broker
|
|
37
|
+
|
|
38
|
+
A broker is simply the AMQP server software. There are several brokers, but this
|
|
39
|
+
tutorial will cover the most common (and arguably popular), [RabbitMQ](http://www.rabbitmq.com).
|
|
40
|
+
|
|
41
|
+
# Routing Keys
|
|
42
|
+
|
|
43
|
+
Simply put, routing keys are somewhat like tags for messages. In practice, they
|
|
44
|
+
are hierarchical in nature with the each level separated by a dot:
|
|
45
|
+
|
|
46
|
+
- `messages.servers.production`
|
|
47
|
+
- `sports.atlanta.baseball`
|
|
48
|
+
- `company.myorg.mydepartment`
|
|
49
|
+
|
|
50
|
+
Routing keys are really handy with a tool like logstash where you
|
|
51
|
+
can programatically define the routing key for a given event using the metadata that logstash provides:
|
|
52
|
+
|
|
53
|
+
- `logs.servers.production.host1`
|
|
54
|
+
- `logs.servers.development.host1.syslog`
|
|
55
|
+
- `logs.servers.application_foo.critical`
|
|
56
|
+
|
|
57
|
+
From a consumer/queue perspective, routing keys also support two types wildcards - `#` and `*`.
|
|
58
|
+
|
|
59
|
+
- `*` (asterisk) matches any single word.
|
|
60
|
+
- `#` (hash) matches any number of words and behaves like a traditional wildcard.
|
|
61
|
+
|
|
62
|
+
Using the above examples, if you wanted to bind to an exchange and see messages
|
|
63
|
+
for just production, you would use the routing key `logs.servers.production.*`.
|
|
64
|
+
If you wanted to see messages for host1, regardless of environment you could
|
|
65
|
+
use `logs.servers.%.host1.#`.
|
|
66
|
+
|
|
67
|
+
Wildcards can be a bit confusing but a good general rule to follow is to use
|
|
68
|
+
`*` in places where you need wildcards for a known element. Use `#` when you
|
|
69
|
+
need to match any remaining placeholders. Note that wildcards in routing keys
|
|
70
|
+
only make sense on the consumer/queue binding, not in the publishing/exchange
|
|
71
|
+
side.
|
|
72
|
+
|
|
73
|
+
We'll get into some of that neat stuff below. For now, it's enough to
|
|
74
|
+
understand the general idea behind routing keys.
|
|
75
|
+
|
|
76
|
+
# Exchange types
|
|
77
|
+
|
|
78
|
+
There are three primary types of exchanges that you'll see.
|
|
79
|
+
|
|
80
|
+
## Direct
|
|
81
|
+
|
|
82
|
+
A direct exchange is one that is probably most familiar to people. Message
|
|
83
|
+
comes in and, assuming there is a queue bound, the message is picked up. You
|
|
84
|
+
can have multiple queues bound to the same direct exchange. The best way to
|
|
85
|
+
understand this pattern is pool of workers (queues) that read from a direct
|
|
86
|
+
exchange to get units of work. Only one consumer will see a given message in a
|
|
87
|
+
direct exchange.
|
|
88
|
+
|
|
89
|
+
You can set routing keys on messages published to a direct exchange. This
|
|
90
|
+
allows you do have workers that do different tasks read from the same global
|
|
91
|
+
pool of messages yet consume only the ones they know how to handle.
|
|
92
|
+
|
|
93
|
+
The RabbitMQ concepts guide (linked below) does a good job of describing this
|
|
94
|
+
visually
|
|
95
|
+
[here](http://www.rabbitmq.com/img/tutorials/intro/exchange-direct.png)
|
|
96
|
+
|
|
97
|
+
## Fanout
|
|
98
|
+
|
|
99
|
+
Fanouts are another type of exchange. Unlike direct exchanges, every queue
|
|
100
|
+
bound to a fanout exchange will see the same messages. This is best described
|
|
101
|
+
as a PUB/SUB pattern. This is helpful when you need broadcast messages to
|
|
102
|
+
multiple interested parties.
|
|
103
|
+
|
|
104
|
+
Fanout exchanges do NOT support routing keys. All bound queues see all
|
|
105
|
+
messages.
|
|
106
|
+
|
|
107
|
+
## Topic
|
|
108
|
+
|
|
109
|
+
Topic exchanges are special type of fanout exchange. Fanout exchanges don't
|
|
110
|
+
support routing keys. Topic exchanges do support them. Just like a fanout
|
|
111
|
+
exchange, all bound queues see all messages with the additional filter of the
|
|
112
|
+
routing key.
|
|
113
|
+
|
|
114
|
+
# RabbitMQ in logstash
|
|
115
|
+
|
|
116
|
+
As stated earlier, in Logstash, Outputs publish to Exchanges. Inputs read from
|
|
117
|
+
Queues that are bound to Exchanges. Logstash uses the `bunny` RabbitMQ library for
|
|
118
|
+
interaction with a broker. Logstash endeavors to expose as much of the
|
|
119
|
+
configuration for both exchanges and queues. There are many different tunables
|
|
120
|
+
that you might be concerned with setting - including things like message
|
|
121
|
+
durability or persistence of declared queues/exchanges. See the relevant input
|
|
122
|
+
and output documentation for RabbitMQ for a full list of tunables.
|
|
123
|
+
|
|
124
|
+
# Sample configurations, tips, tricks and gotchas
|
|
125
|
+
|
|
126
|
+
There are several examples in the logstash source directory of RabbitMQ usage,
|
|
127
|
+
however a few general rules might help eliminate any issues.
|
|
128
|
+
|
|
129
|
+
## Check your bindings
|
|
130
|
+
|
|
131
|
+
If logstash is publishing the messages and logstash is consuming the messages,
|
|
132
|
+
the `exchange` value for the input should match the `name` in the output.
|
|
133
|
+
|
|
134
|
+
sender agent
|
|
135
|
+
|
|
136
|
+
input { stdin { type = "test" } }
|
|
137
|
+
output {
|
|
138
|
+
rabbitmq {
|
|
139
|
+
exchange => "test_exchange"
|
|
140
|
+
host => "my_rabbitmq_server"
|
|
141
|
+
exchange_type => "fanout"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
receiver agent
|
|
146
|
+
|
|
147
|
+
input {
|
|
148
|
+
rabbitmq {
|
|
149
|
+
queue => "test_queue"
|
|
150
|
+
host => "my_rabbitmq_server"
|
|
151
|
+
exchange => "test_exchange" # This matches the exchange declared above
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
output { stdout { debug => true }}
|
|
155
|
+
|
|
156
|
+
## Message persistence
|
|
157
|
+
|
|
158
|
+
By default, logstash will attempt to ensure that you don't lose any messages.
|
|
159
|
+
This is reflected in the RabbitMQ default settings as well. However there are
|
|
160
|
+
cases where you might not want this. A good example is where RabbitMQ is not your
|
|
161
|
+
primary method of shipping.
|
|
162
|
+
|
|
163
|
+
In the following example, we use RabbitMQ as a sniffing interface. Our primary
|
|
164
|
+
destination is the embedded ElasticSearch instance. We have a secondary RabbitMQ
|
|
165
|
+
output that we use for duplicating messages. However we disable persistence and
|
|
166
|
+
durability on this interface so that messages don't pile up waiting for
|
|
167
|
+
delivery. We only use RabbitMQ when we want to watch messages in realtime.
|
|
168
|
+
Additionally, we're going to leverage routing keys so that we can optionally
|
|
169
|
+
filter incoming messages to subsets of hosts. The exercise of getting messages
|
|
170
|
+
to this logstash agent are left up to the user.
|
|
171
|
+
|
|
172
|
+
input {
|
|
173
|
+
# some input definition here
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
output {
|
|
177
|
+
elasticsearch { embedded => true }
|
|
178
|
+
rabbitmq {
|
|
179
|
+
exchange => "logtail"
|
|
180
|
+
host => "my_rabbitmq_server"
|
|
181
|
+
exchange_type => "topic" # We use topic here to enable pub/sub with routing keys
|
|
182
|
+
key => "logs.%{host}"
|
|
183
|
+
durable => false # If rabbitmq restarts, the exchange disappears.
|
|
184
|
+
auto_delete => true # If logstash disconnects, the exchange goes away
|
|
185
|
+
persistent => false # Messages are not persisted to disk
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
Now if you want to stream logs in realtime, you can use the programming
|
|
190
|
+
language of your choice to bind a queue to the `logtail` exchange. If you do
|
|
191
|
+
not specify a routing key, you will see every message that comes in to
|
|
192
|
+
logstash. However, you can specify a routing key like `logs.apache1` and see
|
|
193
|
+
only messages from host `apache1`.
|
|
194
|
+
|
|
195
|
+
Note that any logstash variable is valid in the key definition. This allows you
|
|
196
|
+
to create really complex routing key hierarchies for advanced filtering.
|
|
197
|
+
|
|
198
|
+
Note that RabbitMQ has specific rules about durability and persistence matching
|
|
199
|
+
on both the queue and exchange. You should read the RabbitMQ documentation to
|
|
200
|
+
make sure you don't crash your RabbitMQ server with messages awaiting someone
|
|
201
|
+
to pick them up.
|
|
Binary file
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Metrics from Logs - logstash
|
|
3
|
+
layout: content_right
|
|
4
|
+
---
|
|
5
|
+
# Pull metrics from logs
|
|
6
|
+
|
|
7
|
+
Logs are more than just text. How many customers signed up today? How many HTTP
|
|
8
|
+
errors happened this week? When was your last puppet run?
|
|
9
|
+
|
|
10
|
+
Apache logs give you the http response code and bytes sent - that's useful in a
|
|
11
|
+
graph. Metrics occur in logs so frequently there are piles of tools available to
|
|
12
|
+
help process them.
|
|
13
|
+
|
|
14
|
+
Logstash can help (and even replace some tools you might already be using).
|
|
15
|
+
|
|
16
|
+
## Example: Replacing Etsy's Logster
|
|
17
|
+
|
|
18
|
+
[Etsy](https://github.com/etsy) has some excellent open source tools. One of
|
|
19
|
+
them, [logster](https://github.com/etsy/logster), is meant to help you pull
|
|
20
|
+
metrics from logs and ship them to [graphite](http://graphite.wikidot.com/) so
|
|
21
|
+
you can make pretty graphs of those metrics.
|
|
22
|
+
|
|
23
|
+
One sample logster parser is one that pulls http response codes out of your
|
|
24
|
+
apache logs: [SampleLogster.py](https://github.com/etsy/logster/blob/master/logster/parsers/SampleLogster.py)
|
|
25
|
+
|
|
26
|
+
The above code is roughly 50 lines of python and only solves one specific
|
|
27
|
+
problem in only apache logs: count http response codes by major number (1xx,
|
|
28
|
+
2xx, 3xx, etc). To be completely fair, you could shrink the code required for
|
|
29
|
+
a Logster parser, but size is not strictly the point, here.
|
|
30
|
+
|
|
31
|
+
## Keep it simple
|
|
32
|
+
|
|
33
|
+
Logstash can do more than the above, simpler, and without much coding skill:
|
|
34
|
+
|
|
35
|
+
input {
|
|
36
|
+
file {
|
|
37
|
+
path => "/var/log/apache/access.log"
|
|
38
|
+
type => "apache-access"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
filter {
|
|
43
|
+
grok {
|
|
44
|
+
type => "apache-access"
|
|
45
|
+
pattern => "%{COMBINEDAPACHELOG}"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
output {
|
|
50
|
+
statsd {
|
|
51
|
+
# Count one hit every event by response
|
|
52
|
+
increment => "apache.response.%{response}"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
The above uses grok to parse fields out of apache logs and using the statsd
|
|
57
|
+
output to increment counters based on the response code. Of course, now that we
|
|
58
|
+
are parsing apache logs fully, we can trivially add additional metrics:
|
|
59
|
+
|
|
60
|
+
output {
|
|
61
|
+
statsd {
|
|
62
|
+
# Count one hit every event by response
|
|
63
|
+
increment => "apache.response.%{response}"
|
|
64
|
+
|
|
65
|
+
# Use the 'bytes' field from the apache log as the count value.
|
|
66
|
+
count => [ "apache.bytes", "%{bytes}" ]
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
Now adding additional metrics is just one more line in your logstash config
|
|
71
|
+
file. BTW, the 'statsd' output writes to another Etsy tool,
|
|
72
|
+
[statsd](https://github.com/etsy/statsd), which helps build counters/latency
|
|
73
|
+
data and ship it to graphite for graphing.
|
|
74
|
+
|
|
75
|
+
Using the logstash config above and a bunch of apache access requests, you might end up
|
|
76
|
+
with a graph that looks like this:
|
|
77
|
+
|
|
78
|
+

|
|
79
|
+
|
|
80
|
+
The point made above is not "logstash is better than Logster" - the point is
|
|
81
|
+
that logstash is a general-purpose log management and pipelining tool and that
|
|
82
|
+
while you can centralize logs with logstash, you can read, modify, and write
|
|
83
|
+
them to and from just about anywhere.
|
|
84
|
+
|