- These deprecated configuration keys are no longer supported and will cause an error on startup if used in a veneur config file:
**
api_hostname
- replaced in 1.5.0 bydatadog_api_hostname
**key
- replaced in 1.5.0 bydatadog_api_key
**trace_address
- replaced in 1.7.0 byssf_listen_addresses
**trace_api_address
- replaced in 1.5.0 bydatadog_trace_api_address
**ssf_address
- replaced in 1.7.0 byssf_listen_addresses
**tcp_address
andudp_address
- replaced in 1.7.0 bystatsd_listen_addresses
- These metrics have changed names:
** Datadog, MetricExtraction, and SignalFx sinks now emit
veneur.sink.metric_flush_total_duration_ns
for metric flush duration and tag it withsink
** Datadog, Kafka, MetricExtraction, and SignalFx sinks now emitssink.metrics_flushed_total
for metric flush counts and tag it withsink
** Datadog and LightStep sinks now emitveneur.sink.span_flush_total_duration_ns
for span flush duration and tag it withsink
** Datadog, Kafka, MetricExtraction, and LightStep sinks now emitsink.spans_flushed_total
for metric flush counts and tag it withsink
- Veneur's internal metrics are no longer tagged with
veneurlocalonly
. This means that percentile metrics (such as timers) will now be aggregated globally.
- LightStep sink was hardcoded to use plaintext, now adjusts based on URL scheme (http versus https). Thanks gphat!
- The Datadog sink will no longer panic if
flush_max_per_body
is not configured; a default is used instead. Thanks silverlyra! - The statsd source will no longer reject all packets if
metric_max_length
is not configured; a default is used instead. Thanks silverlyra!
veneur-emit
now infers parent and trace IDs from the environment (using the variablesVENEUR_EMIT_TRACE_ID
andVENEUR_EMIT_PARENT_SPAN_ID
) and sets these environment variables from its-trace_id
andparent_span_id
when timing commands, allowing for convenient construction of trace trees if traced programs callveneur-emit
themselves. Thanks, antifuchs- The Kafka sink for spans can now sample spans (at a rate determined by
kafka_span_sample_rate_percent
) based off of traceIDs (by default) or a tag's values (configurable viakafka_span_sample_tag
) to consistently sample spans related to each other. Thanks, rhwlo! - Improvements in SSF metrics reporting - thanks, antifuchs!
** Function
ssf.RandomlySample
that takes an array of samples and a sample rate and randomly drops those samples, adjusting the kept samples' rates ** New variablessf.NamePrefix
that can be used to prepend a common name prefix to SSF sample names. ** Packagetrace/metrics
, containing functions that allow reporting metrics through a trace client. ** New typessf.Samples
holding a batch of samples which can be submitted conveniently throughtrace/metrics
. ** Methodtrace.(*Trace).Add
, which allows adding metrics to a trace span. veneur-proxy
has a new configuration optionforward_timeout
which allows specifying how long forwarding a batch to global veneur servers may take in total. Thanks, antifuchs!- Add native support for running Veneur within Kubernetes. Thanks, aditya!
- Updated Datadog span sink to latest version in Datadog tracing agent. Thanks, gphat!
- The semantics around
veneur-emit
command timing have changed:-shellCommand
argument has been renamed to-command
, and-command
is now gone. The only way to time a command is to provide the command and its arguments as separate arguments, the method of passing in a shell-escaped string is no longer supported.
- A SignalFx sink has been added for flushing metrics to SignalFx. Thanks, gphat!
- A Kafka sink has been added for publishing spans or metrics. Thanks, parabuzzle and gphat!
- Buffered trace clients in
github.com/stripe/veneur/trace
now have a new option to automatically flush them in a periodic interval. Thanks, antifuchs! - Gauges can now be marked as
veneurglobalonly
to be globally "last write wins". Thanks gphat! veneur-emit
now takes-span_service
,-trace_id
,-parent_span_id
, and-indicator
arguments. These (combined with-ssf
) allow submitting spans for tracing when recording timing data for commands. In addition,-timing
with-ssf
now works, too.- The
github.com/stripe/veneur/ssf
package now has a few helper functions to create samples that can be attached to spans:Count
,Gauge
,Histogram
,Timing
. In addition, veneur now has a span sink that extracts these samples and treats them as metrics. Thanks, antifuchs - Spans sent to Lightstep now have an
indicator
tag set, indicating whether the span is an indicator span or not. Thanks, aditya! veneur-emit -command
now streams output from the invoked program's stdout/stderr to its own stdout/stderr. Thanks, antifuchs!- Veneur now supports the tag
veneursinkonly:<sink_name>
on metrics, which routes the metric to only the sink specified. See the docs here. Thanks, antifuchs!
- Veneur now emits a timer metric giving the duration (in nanoseconds) of every "indicator" span that it receives, if you configure the setting
indicator_span_timer_name
. Thanks, antifuchs! - All sinks have been moved to their own packages for smaller code and better interfaces. Thanks gphat!
- Removed noisy Sentry events that duplicated Datadog error reporting. Thanks, aditya!
- Veneur now reuses HTTP connections for forwarding and Datadog flushes. Furthermore each phase of the HTTP request is traced and can be seen using the trace sink of your choice. This should drastically improve performance and reliability for installs with large numbers of instances. Thanks gphat!
- Veneur now tracks statsd metrics for SSF spans concerning its own operation. This means that the
veneur.ssf.spans.received_total
counter and theveneur.ssf.packet_size
histogram again reflect trace spans routed internally. Thanks, antifuchs!
- New 'blackhole' sink for testing and benchmark purposes. Thanks gphat!
- Veneur no longer requires the use of Datadog as a target for flushes. Veneur can now use one or more of any of its supported sinks as a backend. This realizes our desire for Veneur to be fully vendor agnostic. Thanks gphat!
- The package
github.com/stripe/veneur/trace
now depends on fewer other packages across veneur, making it easier to pull intrace
as a dependency. Thanks antifuchs! - A Veneur server with tracing enabled now submits traces and spans concerning its own operation to itself internally without sending them over UDP. See the "Upgrade Notes" section below for metrics affected by this change. Thanks antifuchs!
- veneur-prometheus and veneur-proxy executables are now included in the docker images. Thanks jac
- All Veneur executables are now in $PATH in the docker images. Thanks jac
- When using Lightstep as a tracing sink, spans can be load-balanced more evenly across collectors by configuring the
trace_lightstep_num_clients
option to multiplex across multiple clients. Thanks aditya! - sync_with_interval is a new configuration option! If enabled, when starting, Veneur will now delay its first metric to be aligned with an
interval
boundary on the local clock. This will effectively "synchronize" Veneur instances across your deployment assuming reasonable clock behavior. The result is a metric timestamps in your TSDB that mostly line up improving bucketing behavior. Thanks gphat! - Cleaned up some linter warnings. Thanks gphat!
- Tests no longer depend on implicit presence of a Datadog metric or span sink. Thanks gphat!
- Refactor internal HTTP helper into its own package fix up possible circular deps. Thanks gphat!
- Fix a panic when using
veneur-emit
to emit metrics via-ssf
when no tags are specified. Thanks myndzi - Remove spurious warnings about unset configuration settings. Thanks antifuchs
- Removed the InfluxDB plugin as it was experimental and wasn't working. We can make a sink for it in the future if desired. Thanks gphat!
- The
set
data structure serialization format for communiation with a global Veneur server has changed in an incompatible way. If your infrastructure relies on a global Veneur installation, they will dropset
data from non-matching versions until the entire fleet and the global Veneur are all at the same version. - The metrics for SSF packets (and spans) received have changed names: They used to be
veneur.packet.received_total
andveneur.packet.spans.received_total
, respectively, and they are now namedveneur.ssf.received_total
andveneur.ssf.spans.received_total
.
- New configuration option
statsd_listen_addresses
, a list of URIs indicating on which ports (and protocols) Veneur should listen on for statsd metrics. This deprecates both theudp_address
andtcp_address
settings. Thanks antifuchs! - New package
github.com/stripe/veneur/protocol
, containing a wire protocol for sending/reading SSF over a streaming connection. Thanks antifuchs! github.com/veneur/trace
now contains customizableClient
s that support streaming connections.- veneur-prometheus now has a
-p
option for specifying a prefix for all metrics. Thanks gphat! - New metrics
ssf.spans.tags_per_span
andssf.packet_size
track the distribution of tags per span and total packet sizes, respectively. - Our super spiffy logo, designed by mercedes, is now included at the top of the README!
- Refactor internals to use a new intermediary metric struct to facilitate new plugins. Thanks gphat!
- The BUILD_DATE and VERSION variables can be set at link-time and are now exposed by the
/builddate
and/version
endpoints.
- A new HyperLogLog implementation means
set
s are faster and allocate less memory. Thanks, martinpinto and seiflotfy! - Introduced a new
metricSink
which provides a common interface for metric backends. In an upcoming release all plugins will be converted to this interface. Thanks gphat!
veneur-emit
no longer supports the-config
argument, as it's no longer possible to reliably detect which statsd host/port to connect to. The-hostport
option now takes a URL of the same formstatsd_listen_addresses
takes to explicitly tell it what address it should send to.SSFSpanCollection
got removed, as it is superseded by the wire protocol. If you need to send multiple spans in bulk, we recommend setting up a bufferedtrace.Client
!
- Veneur-emit can now time any shell command and emit its duration as a Timing metric. Thanks redsn0w422!
- Config options can now be provided via environment variables using envconfig for Veneur and veneur-proxy. Thanks gphat!
- SSF now includes a boolean
indicator
field for signaling that this span is useful as a Service Level Indicator for its service. - A type
SSFSpanCollection
has been added but is not yet used. - The
veneur-prometheus
command can be used to scrape prometheus endpoints and emit those metrics to Veneur. Thanks gphat and jvns
As a result of the efficiency improvements in this release, we've seen ~50% reduction in memory usage by way of measuring the allocated heap.
Secondly, the shift in not buffering spans on their way to LightStep should be noted. This changes behavior in Veneur which has traditionally done everything in 10s increments.
- If possible, initialization errors when starting Veneur will now be reported to Sentry. Thanks chimeracoder!
- Check return value of LightStep flush. Thanks chimeracoder!
- No longer using a fork of Logrus that fixed a race condition. Thanks chimeracoder!
- Updated to latest version of LightStep's tracing library, which drastically improves the success of spans on hosts with high span rates. Thanks gphat!
- No longer buffers spans for LightStep, they are dispatched directly to the LightStep client. Thanks gphat!
- Reuse an existing buffer when parsing incoming spans, reducing allocations. Thanks gphat!
- Use gogo protobuf for code generation of SSF's protobuf, resulting in faster and less memory span ingestion. Thanks gphat!
- veneur-proxy no longer balks at using static hosts for tracing and metrics. Thanks gphat!
- SSF's
operation
field has been deprecated in favor of the fieldname
. - SSF spans with a tag
name
will have that name placed into the SSF spanname
field until 2.0 is released.
- Correctly parse
Set
metrics if sent via SSF. Thanks redsn0w422! - Return correct array of tags after parsing an SSF metric. Thanks redsn0w422!
- Don't panic if a packet doesn't have tags. Thanks redsn0w422!
- Fix a typo in the link to veneur-emit in the readme. Thanks vasi!
- Adds events and service checks to
veneur-emit
. Thanks redsn0w422! - Switch to dep for managing the
vendor
directory. Thanks chimeracoder! - Remove support for
govendor
. Thanks chimeracoder! - Emit GC metrics at flush time. This feature is best used with Go 1.9 as previous versions cause GC pauses when collecting this information from go. Thanks gphat!
- Allow configuration of LightStep's reconnect period via
trace_lightstep_reconnect_period
and the maximum number of spans it will buffer viatrace_lightstep_maximum_spans
. Thanks gphat! - Switch to dep for managing the
vendor
directory. Thanks chimeracoder! - Remove support for
govendor
. Thanks chimeracoder! - Added harmonic mean as an optional aggregate type. Use
hmean
as an option to theaggregates
config option to enable. Thanks non!
- Added tests for
parseMetricSSF
. Thanks redsn0w422! - Refactored
veneur-emit
flag usage to make testing easier. Thanks redsn0w422! - Minor text fixes in the README. Thanks an-stripe!
- Restructured SSF parsing logic and added more tests. Thanks redsn0w422!
- Tag
packet.spans.received_total
withservice
from the span. Thanks chimeracoder!
- Better document how to configure Veneur as a DogStatsD replacement. Thanks gphat with assist from stangles!
- Fixed an error in graceful shutdown of the TCP listener. Thanks evanj!
- Don't hang if we call
log.Fatal
and we aren't hooked up to a Sentry. Thanks evanj! - Fix flusher_test being called more than once resulting in flappy failure. Thanks evanj!
- Improve flusher test to not start Veneur, fixing flapping test. Thanks evanj!
veneur-emit
can now emit metrics using the SSF protocol. Thanks redsn0w422!- Documentation for SSF. Thanks gphat!
- It is no longer required to emit a
sum
to get anavg
when configuring what aggregations to emit for a histogram. Thanks cgilling! - Tags added in the
tags
config key are now applied to trace spans. Thanks chimeracoder! - Additional documentation for
veneur-proxy
. Thanks gphat! - Revamped configuration file organization and comments. Thanks gphat!
- Changed some config keys to have more specific names to facilitate future refactoring. Thanks gphat!
- Adjust the flush loop to listen for server shutdown to improve test consistency. Thanks evanj!
- Veneur can now, experimentally, ingest metrics using the SSF protocol. Thanks redsn0w422!
- Reresolve the LightStep trace flusher on each flush, accomodating Consul-based DNS use and preventing stale sinks. Thanks chimeracoder!
- The following configuration keys are deprecated and will be removed in version 2.0 of Veneur:
datadog_api_key
replaceskey
datadog_api_hostname
replacesapi_hostname
datadog_trace_api_address
replacestrace_api_address
ssf_address
replacestrace_address
- Require Go 1.8+ and stop building against 1.7 Thanks Thanks chimeracoder!
- Decrease logging level for proxy's "forwarded" messages. Thanks gphat!
- Failed discovery refreshes now log the service name. Thanks gphat!
- Proxy no longer requires a trace service name, since it's not wired up. Thanks gphat!
- No longer allow clients to pass in
nan
,+inf
or-inf
as a value for a metric, as this caused errors on flush. Thanks gphat!
- Added
veneur-proxy
to provide HA features with consistent hashing. See the Proxy section of the README
- Fix flusher_test to properly shutdown HTTP after handling. Thanks evanj!
- Verify that
trace_max_length_bytes
is properly set. Thanks evanj! - Fix some race conditions in testing.
- Document performance cost of TLS with RSA and ECDH keys. Thanks evanj!
- Reduce logging of tracing information to
debug
level to decrease unnecessary logging. - Reduce common TCP error logs to
info
level. Thanks evanj! - Deal with server shutdown without inspecting errors strings. Thanks evanj!
- Decrease the number of things we send to Sentry as "errors".
- Detect and emit a metric
veneur.packet.error_total
taggedreason:toolong
for metrics that exceed the metric max length. - Emit a metric
veneur.packet.error_total
taggedreason:zerolength
for metrics have no contents. - Correct unnecessary allocation / goroutine in TCP connections that was leaking memory. Thanks evanj!
- Close idle TCP connections after 10 minutes. Thanks evanj!
- Fixed a lot of go lint errors.
- Add a metric
veneur.sentry.errors_total
for number of errors we send to Sentry. - New plugin
flush_file
for writing metrics to a flat file. - New
/healthcheck/tracing
endpoint that returns 200 if this Veneur instance is accepting traces.
- Refactor tests to use a more shareable test fixture. Thanks evanj!
- Refactor
Server
's constructor to not start any goroutines and add aStart()
that takes care of that, making for easier tests.
- Hostname and device name tags are now omitted from JSON generated for transmission to Datadog at flush time. Thanks evanj!
- Fix panic when an error is generated and Sentry is not configured. Thanks evanj!
- Fix typos in README
- Add
omit_empty_hostname
option. If true andhostname
tag is set to empty, Veneur will not add a host tag to its own metrics. Thanks evanj! - Support "all interfaces" addresses (
:1234
) for listening configuration. Thanks evanj! - Add support for receiving statsd packets over authenticated TLS connections. Thanks evanj!
- [EXPERIMENTAL] Add InfluxDB support.
- [EXPERIMENTAL] Add support for ingesting traces and sending to Datadog's APM agent.