forked from hulu/statsd-router
-
Notifications
You must be signed in to change notification settings - Fork 0
Metrics router for statsd cluster
License
cfxegbert/statsd-router
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Statsd-router Statsd is a convenient way to collect instrumentation data. Unfortunately, statsd doesn't support clustering out of the box. Clustering is necessary to process each metric by a single statsd instance. If two statsd instances push data for the same metric it causes data corruption. Statsd-router is designed to run behind a load balancer. Each statsd instance is aware how many statsd-router instances are in the cluster and what their health statuses are. Each metric is routed to a single statsd instance based on consistent hashing. If one statsd instance goes down, metrics from this instance are spread among alive instances; distribution of other metrics wouldn't be affected. Statsd-router does the following: 1. accepts statsd-compatible data via UDP, parses it, aggregates metrics with certain statsd instance via consistent hashing 2. flushes data to statsd instances when the aggregated data size approaches MTU, or on a scheduled basis, whatever comes first 3. provides health status to external parties to confirm that statsd-router itself is alive 4. check health status of underlying statsd instances to eliminate dead ones from consistent hashing Statsd-router is implemented using the libev library and uses non-blocking IO. Configuration file. Following configuration parameters are supported: data_port - base udp port to accept incoming data. Thread 0 will use data_port, thread 1 will use data_port + 1 etc. control_port - tcp port for health check downstream_flush_interval - how often we flush data to the downstreams, seconds downstream_health_check_interval - how often we check downstream health, seconds downstream_ping_interval - how often we send ping metrics ping_prefix - prefix used for the ping metrics downstream - comma separated list of the downstreams. Each downstream has format address:data_port:health_port log_level - 0: TRACE, 1: DEBUG, 2: INFO, 3: WARN, 4: ERROR threads_num - how many threads will be used Testing. Tests are located in test/ directory. You can run them either via 'make test' command or by running run-all-tests.sh in test/ directory. Each test can be run individually. You can provide -v option to get verbose output. There is also an old (and currently broken) functional test called statsd-router-monkey.rb. It starts statsd-router and simulates several statsd instances. Those instances are periodically started and stopped. statsd-router-monkey.rb checks that metrics are delivered and that they are delivered to the correct statsd instance. Any unexpected behavior errors are logged.
About
Metrics router for statsd cluster
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C 58.8%
- Ruby 32.9%
- Shell 7.3%
- Makefile 1.0%