- Rather than dropping data points, the Datadog backend will coerce non-numeric values resulting from aggregation to numeric.
NaN
is converted to -1,+Inf
to float64 maximum, and-Inf
to float64 minimum.
- Document how semver is used in the codebase.
- Changes how
parser.bad_lines_seen
andbackend.retried
metrics are sent. They are now only sent on change.
- The Datadog backend will discard values that result in NaN or ±Inf since they can not be used with our JSON processing.
- Internal pipeline refactor removes two internal metrics
- Simplify internal tracking of the source address of a metric. The current rules are:
If ignore-host is set, it will be set to the host
tag if present, otherwise blank. If ignore-host is not set, it will be set to the sending IP
If the cloud provider is enabled, it will attempt to perform a lookup of this value to find a new value (instance ID, pod ID, etc)
If the tag handler matches a drop-host
filter, it will be removed
Backends use it inconsistently
This really is simpler than it was before.
- Adds new options
flush-offset
andflush-aligned
to align the flush interval to a configurable multiple. See README.md for details. - Adds documentation for many of the server options.
- Internal library refactoring
- Adds InfluxDB as a backend, see BACKENDS.md for details.
- Some logs have been changed to be slightly more machine readable.
- Add pprof catch-all route to match the rest of pprof's available endpoints
- Update to aggregator channel metrics. see METRICS.md for details.
- Added experimental support for adding http headers based on metrics tags
- Fixed a bug breaking internal metrics from the backend and cloud provider
- Refactor pprof endpoints to sit under
/debug/pprof
- Breaks out expiry interval in to per metric type expiry intervals. See README.md for details.
- Use the current timestamp when sending to NewRelic backend, rather than the last updated timestamp of the metric, which may be old.
- Added a new internal metric called
backend.series.sent
which contains the number of flushed timeseries over time.
- Added experimental support for generating latency histograms for timers, more details in README.md.
- Support for
response-header-timeout
fortransport
section
- Fixes a bug where
aggregator.metricmaps_received
are the same for for every worker
- Fixes a bug where no cloud provider would crash on startup
- Minor documentation fix
- Minor internal refactoring
- Support for regex matching in filtering, added by ermeaney
- Build with 1.13.6
- Refactor dependencies, re-run
make setup
if build failures are encountered - Adds support for Kubernetes as a cloud provider for enriching metrics. See CLOUDPRIVDERS.md for details.
- Adds support for New Relics new dimensional metrics pipeline. See BACKENDS.md.
- Test fixes
- Internal refactor to de-dupe 8 getSubVipers
- BREAKING: Refactor how http clients are configured. See TRANSPORT.md for details. Some configuration options are in a new location, however defaults are generally unchanged.
- Build with Go 1.13.0
- Base docker images on alpine 3.10 and ubuntu 18.04
- Support for
custom-headers
for http_forwarder_v2
- Support
log-raw-metric
configuration
- Remove support for disabling retries in the forwarder
- Document how to disable retries using timeout values
- Adding support to disable retries within the gostatsd forwarder
- NewRelic event support added by Kav91
- Moved noisy log line from info to debug
- BREAKING: Added support for Graphite 1.1 style tags, details can be found in BACKENDS.md.
- Moved backend documentation from README.md to BACKENDS.md, still lacking documentation for most backends.
- Build with Go 1.12.3 for real.
- Fixed events in HTTP style
- Update to Alpine 3.9
- Build with Go 1.12.3
- Changed linter to golangci-lint
- Fixes internal metrics for the
dispatch_aggregator
channel stats, andaggregator.*
metrics.
- More internal pipeline refactoring, to optimize the http ingestion path.
- Adjust log level about forwarding failures and stop logging retries.
- Removed v1 ingestion
- Refactor internal pipeline
- Added
hostname
flag to support override for internal metrics. Defaults to system hostname. Use this flag when running within docker to make host identification easier.
- Fix bug with metrics going through the consolidator not having tags applied properly
- Emit v2 ingestion http metrics.
- Add metric consolidation in the HTTP path. Minor configuration changes, specifically
metrics-per-batch
is replaced withconsolidator-slots
. Defaults to the number of parsers. - Introduces v2 ingestion. Production use should be ok.
- Add http forwarding and ingestion. See
Configuring the server mode
andConfiguring HTTP servers
in README.md for details. Not recommended for production use at this time. Healthcheck is ok to use - Introduces v1 ingestion
- Fix linter failures
- New Relic backend supports submitting directly to Insights Collector, refer to README.md for details.
- New Relic backend added by Kav91, see README.md for options and details
- Added support for sampling timers to be compatible with original statsd.
- Fixed
--statser-type
didn't apply - Added the ability to filter tags and metrics, see FILTERING.md for details
- New Cloudwatch backend contirubted by JorgenEvens
- Backend name is
cloudwatch
- Contains the single option
namespace
, defaulting toStatsD
- Backend name is
- Duplicate tags are filtered out so they are aggregated correctly.
- Datadog user-agent has changed to
gostatsd
by default. Can now be configured. - New Datadog option:
user-agent
, configures the user agent supplied to Datadog. Usepython-requests/2.6.0 CPython/2.7.10
for old behavior.
- Roll back change to configuration, due to spf13/viper#380. Documentation is still valid.
- Fix a bug in the cache provider where transient failures were replacing good cache
- Started passing around a logger, not used everywhere yet
- Documentation fixes
- Added
enable-http2
flag for Datadog backend to control HTTP/2 support, defaults tofalse
- Build with Go 1.10.2
- Fixed a bug making the service not work on Windows.
- Add new flag
--statser-type
to make internal metric destination configurable. Defaults tointernal
, also supportslogging
andnull
- Fixes rate limiter on bad lines. A value <= 0 will disable entirely.
- Parses histogram metrics as timers
- Log bad lines with rate limit
- Add new flag
--bad-lines-per-minute
, controls the rate limit on logging lines which fail to parse. Defaults to0
. Supports floats.
- Memory/GC optimisation with buffers being reused in the Datadog backend
- Metrics in the cloud provider cache should now be correct
- BREAKING: The way "per second" rates are calculated has changed from "value / configured flush interval" to "value / actual flush interval".
- Uses the default EC2 credentials
- Timer sub-metrics now have a configuration option for opt-out. See README.md for details.
- Build -race on ubuntu:16.04 instead of 16.10
- Performance work, round 3
- Performance work, round 2
- Add new flag
--estimated-tags
, pre-allocates the Tags array. Defaults to4
.
- Fix index out of range error and tag corruption in AWS CP
- Performance work
- More metrics rework. Internal metrics are now in-phase with flushing.
- Better distribution of metrics between aggregators when received from multiple hosts.
- New Datadog option:
max_requests
, the maximum number of metric http requests that can be made by the Datadog backend. - BREAKING: Additional and renamed metrics in the flusher, see METRICS.md
- BREAKING: Heartbeat changes:
--heartbeat-interval
changed to--heartbeat-enabled
.- Heartbeat is in-phase with the flush.
- Heartbeat sends a value of 1, so a sum aggregation can be applied.
- New internal metrics around the cloud provider cache and AWS cloud provider, see METRICS.md for details.
- Add new flag
--conn-per-reader
adding support for a separate connection per reader (requires system support for reusing addresses) - Refactor MetricDispatcher into BackendHandler satisfying separate MetricHandler and EventHandler interfaces
- Add TagHandler for static tags
- BREAKING: Independent scaling of datagram reading and parsing
- Separate MetricReceiver into DatagramReceiver and DatagramParser
- Allow independent scaling of parser workers with new flag
--max-parsers
. Defaults to number of CPU cores. - Change default of
--max-readers
flag to min(8, number of CPU cores)
- GC optimization with buffer reuse
- New docker image suffix,
version
-syms, includes symbol table - New flag
--receive-batch-size
to set datagram batch size. Defaults50
. - Batch reading should improve performance by using
recvmmsg(2)
. This has additional memory considerations documented in README.md, and can tuned by tracking theavg_packets_in_batch
metric and adjusting as necessary.
- New flag
--heartbeat-interval
sends heartbeat metrics on an interval, tagged by version and commit. Defaults0
. Set to0
to disable.
- BREAKING: use space instead of comma to specify multiple values for the following parameters:
backends
,percent-threshold
,default-tags
andinternal-tags
. - BREAKING: Removed Datadog
dual_stack
option in favor of explicit network selection. - New Datadog option:
network
allows control of the network protocol used, typical values aretcp
,tcp4
, ortcp6
. Defaultstcp
. See Dial for further information.
- New Datadog option:
dual_stack
allows control of RFC-6555 "Happy Eyeballs" for IPv6 control. Defaultsfalse
.
- No functional changes over previous version. Release tag to trigger build process.
- Build with Go 1.9
- Add support for compression in Datadog payload.
- New Datadog option:
compress_payload
allows compression of Datadog payload. Defaultstrue
. - Add staged shutdown
- Update logrus import path
- New flag
--internal-tags
configures tags on internal metrics (default none) - New flag
--internal-namespace
configures namespace on internal metrics (default "statsd") - BREAKING: Significant internal metric changes, including new names. See METRICS.md for details
- New flag
--ignore-host
prevents capturing of source IP address. Hostname can be provided by client via ahost:
tag.
- Handle EC2
InvalidInstanceID.NotFound
error gracefully - Build with Go 1.8
- Make cloud handler cache configurable
- Batch AWS Describe Instances call
- Fix a deadlock in Cloud Handler
- Minor internals refactoring
- Do not log an error if source instance was not found
- BREAKING: Renamed
aws.http_timeout
intoaws.client_timeout
for consistency - BREAKING: Renamed
datadog.timeout
intodatadog.client_timeout
for consistency - Tweaked some timeouts on HTTP clients
- BREAKING: Renamed parameter
maxCloudRequests
intomax-cloud-requests
for consistency - BREAKING: Renamed parameter
burstCloudRequests
intoburst-cloud-requests
for consistency - Fix a bunch of linting issues
- Run tests concurrently
- Configure various timeouts on HTTP clients
- Update dependencies
- Big internals refactoring and cleanup
- Fix bug in Graphite backend introduced in 0.15.0 (#75)
- Fix bug where max queue size parameter was not applied properly
- Use context in more places
- Stricter TLS configuration
- Support TCP transport and write timeouts in statsd backend
- Reuse UDP/TCP sockets to reduce number of DNS lookups in statsd and graphite backends
- Reuse memory buffers in more cases
- Update dependencies
- Go 1.7
- Config option to disable sending tags to statsdaemon backend
- Fix NPE if cloud provider is not specified
- Minor internal cleanups
- Some additional tweaks to flushing code
- Minor refactorings
- Fix bug in rate calculation for Datadog
- Fix bug introduced in 0.14.6 in Datadog backend when invalid hostname was sent for metrics
- Set tags for own metrics (#55)
- Add expvar support
- Minor internals refactoring and optimization
- Limit max concurrent events (#24)
- Memory consumption optimizations
- Improved and reworked tags support; Unicode characters are preserved now.
- Minor internals refactoring and optimization
- Send start and stop events (#21)
- Linux binary is now built inside of Docker container rather than on the host
- Fix data race in Datadog backend (#44)
- Minor internals refactoring
- Fix batching support in Datadog backend
- Better Graphite support (#35)
- Minor internals refactoring
- Update to Alpine 3.4
- Cap request size in Datadog backend (#27)
- Set timeouts on Dials and tcp sends (#23)
- Reuse HTTP connections in Datadog backend
- Async rate limited cloud provider lookups (#22, #3)
- Internals refactoring
- Add configurable CPU profiler endpoint
- Increase default Datadog timeouts to reduce number of errors in the logs
- Log intermediate errors in Datadog backend
- Consistently set timeouts for AWS SDK service clients
- Update all dependencies
- Fix Datadog backend retry error #18
- Various internal improvements
- Fix goroutine start bug in dispatcher - versions 0.12.6, 0.12.7 do not work properly
- Datadog events support
- Remove deprecated -f flag passed to Docker tag command
- Rename num_stats back to numStats to be compatible with original statsd
- null backend to do benchmarking
- Internals refactoring
- Implement negative lookup cache (#8)
- Read configuration from environment, flags and config
- Do not multiply number of metric workers
- Do not replace dash and underscore in metric names and tags
- Fix handling of NaN specific case
- Minor refactorings for linter
- Use pointer to metric instead of passing by value
- Optimise (5-10x) performance of line parser
- Revert dropping message and block instead
- Use different values for number of worker to read from socket, process messages and metrics
- Minor fixes and performance improvements
- Calculate per second counters since last flush time instead of interval
- Process internal stats as standard metrics
- Add benchmarks
- Improve performance for buffering data out of the socket
- Drop messages and metrics instead of blocking when overloaded
- Normalize tags consistently but don't force lower case for metric names
- Add support for cloud plugins to retrieve host information e.g. instance id, aws tags, etc.
- Add load testing tool
- Performance improvements for receiver and aggregator
- Use goroutines to read net.PacketConn instead of buffered channel
- Graphite: replace dots by underscores in metric name (tags)
- Limit concurrency by using buffered channels for incoming messages
- Discard empty tags
- Datadog: add retries on post errors
- Add support for default tags
- statsd backend: ensure not going over the udp datagram max size on metrics send
- Datadog: normalise tags to always be of form "key:value"
- Reset counters, gauges, timers, etc. after an expiration delay
- Datadog: add interval to metric payload
- Datadog: use source ip address as hostname
- Remove extraneous dot in metric names for stdout and graphite backends when no tag
- Add more and improve internal statsd stats
- Datadog: set dogstatsd version and user-agent headers
- Datadog: use
rate
type for per second metric
- Fix issue with tags overwriting metrics without tags
- Fix undesired overwriting of metrics
- Datadog: rollback change to metric names for preserving backward compatibility
- Add more timers aggregations e.g. mean, standard deviation, etc.
- Improve
graphite
backend reliability by re-opening connection on each metrics send - Fix value of metrics displayed in web UI
- Improve web console UI look'n'feel
- Add statsd backend
- Add support for global metrics namespace
- Datadog: remove api url from config
- Add support for "Set" metric type
- Datadog: send number of metrics received
- Use appropriate log level for errors
- Remove logging the url on each flush in datadog backend
- Use alpine base image for docker instead of scratch to avoid ca certs root error
- Add datadog backend
- Fix reset of metrics
- Implement tags handling: use tags in metric names
- Implement support for pluggable backends
- Add basic stdout backend
- Configure backends via toml, yaml or json configuration files
- Add support for tags and sample rate
- Initial release