Documentation
¶
Overview ¶
Package statsd provides a Go dogstatsd client. Dogstatsd extends the popular statsd, adding tags and histograms and pushing upstream to Datadog.
Refer to http://docs.datadoghq.com/guides/dogstatsd/ for information about DogStatsD.
Example Usage:
// Create the client
c, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
// Prefix every metric with the app name
c.Namespace = "flubber."
// Send the EC2 availability zone as a tag with every metric
c.Tags = append(c.Tags, "us-east-1a")
err = c.Gauge("request.duration", 1.2, nil, 1)
statsd is based on go-statsd-client.
Index ¶
- Constants
- Variables
- func NewTelemetryClient(c *Client, transport string) *telemetryClient
- func NewTelemetryClientWithCustomAddr(c *Client, transport string, telemetryAddr string, pool *bufferPool) (*telemetryClient, error)
- type Client
- func (c *Client) Close() error
- func (c *Client) Count(name string, value int64, tags []string, rate float64) error
- func (c *Client) Decr(name string, tags []string, rate float64) error
- func (c *Client) Distribution(name string, value float64, tags []string, rate float64) error
- func (c *Client) Event(e *Event) error
- func (c *Client) Flush() error
- func (c *Client) FlushTelemetryMetrics() ClientMetrics
- func (c *Client) Gauge(name string, value float64, tags []string, rate float64) error
- func (c *Client) Histogram(name string, value float64, tags []string, rate float64) error
- func (c *Client) Incr(name string, tags []string, rate float64) error
- func (c *Client) ServiceCheck(sc *ServiceCheck) error
- func (c *Client) Set(name string, value string, tags []string, rate float64) error
- func (c *Client) SetWriteTimeout(d time.Duration) error
- func (c *Client) SimpleEvent(title, text string) error
- func (c *Client) SimpleServiceCheck(name string, status ServiceCheckStatus) error
- func (c *Client) TimeInMilliseconds(name string, value float64, tags []string, rate float64) error
- func (c *Client) Timing(name string, value time.Duration, tags []string, rate float64) error
- type ClientInterface
- type ClientMetrics
- type Event
- type EventAlertType
- type EventPriority
- type NoOpClient
- func (n *NoOpClient) Close() error
- func (n *NoOpClient) Count(name string, value int64, tags []string, rate float64) error
- func (n *NoOpClient) Decr(name string, tags []string, rate float64) error
- func (n *NoOpClient) Distribution(name string, value float64, tags []string, rate float64) error
- func (n *NoOpClient) Event(e *Event) error
- func (n *NoOpClient) Flush() error
- func (n *NoOpClient) Gauge(name string, value float64, tags []string, rate float64) error
- func (n *NoOpClient) Histogram(name string, value float64, tags []string, rate float64) error
- func (n *NoOpClient) Incr(name string, tags []string, rate float64) error
- func (n *NoOpClient) ServiceCheck(sc *ServiceCheck) error
- func (n *NoOpClient) Set(name string, value string, tags []string, rate float64) error
- func (n *NoOpClient) SetWriteTimeout(d time.Duration) error
- func (n *NoOpClient) SimpleEvent(title, text string) error
- func (n *NoOpClient) SimpleServiceCheck(name string, status ServiceCheckStatus) error
- func (n *NoOpClient) TimeInMilliseconds(name string, value float64, tags []string, rate float64) error
- func (n *NoOpClient) Timing(name string, value time.Duration, tags []string, rate float64) error
- type Option
- func WithAggregationInterval(interval time.Duration) Option
- func WithBufferFlushInterval(bufferFlushInterval time.Duration) Option
- func WithBufferPoolSize(bufferPoolSize int) Option
- func WithBufferShardCount(bufferShardCount int) Option
- func WithChannelMode() Option
- func WithChannelModeBufferSize(bufferSize int) Option
- func WithClientSideAggregation() Option
- func WithMaxBytesPerPayload(MaxBytesPerPayload int) Option
- func WithMaxMessagesPerPayload(maxMessagesPerPayload int) Option
- func WithMutexMode() Option
- func WithNamespace(namespace string) Option
- func WithSenderQueueSize(senderQueueSize int) Option
- func WithTags(tags []string) Option
- func WithTelemetryAddr(addr string) Option
- func WithWriteTimeoutUDS(writeTimeoutUDS time.Duration) Option
- func WithoutClientSideAggregation() Option
- func WithoutTelemetry() Option
- type Options
- type ReceivingMode
- type SenderMetrics
- type ServiceCheck
- type ServiceCheckStatus
Constants ¶
const DefaultMaxAgentPayloadSize = 8192
DefaultMaxAgentPayloadSize is the default maximum payload size the agent can receive. This can be adjusted by changing dogstatsd_buffer_size in the agent configuration file datadog.yaml.
const DefaultUDPBufferPoolSize = 2048
DefaultUDPBufferPoolSize is the default size of the buffer pool for UDP clients.
const DefaultUDSBufferPoolSize = 512
DefaultUDSBufferPoolSize is the default size of the buffer pool for UDS clients.
const ErrNoClient = noClientErr("statsd client is nil")
ErrNoClient is returned if statsd reporting methods are invoked on a nil client.
const MaxUDPPayloadSize = 65467
MaxUDPPayloadSize defines the maximum payload size for a UDP datagram. Its value comes from the calculation: 65535 bytes Max UDP datagram size - 8byte UDP header - 60byte max IP headers any number greater than that will see frames being cut out.
const OptimalUDPPayloadSize = 1432
OptimalUDPPayloadSize defines the optimal payload size for a UDP datagram, 1432 bytes is optimal for regular networks with an MTU of 1500 so datagrams don't get fragmented. It's generally recommended not to fragment UDP datagrams as losing a single fragment will cause the entire datagram to be lost.
const TelemetryInterval = 10 * time.Second
TelemetryInterval is the interval at which telemetry will be sent by the client.
const UnixAddressPrefix = "unix://"
UnixAddressPrefix holds the prefix to use to enable Unix Domain Socket traffic instead of UDP.
Variables ¶
var ( // DefaultNamespace is the default value for the Namespace option DefaultNamespace = "" // DefaultTags is the default value for the Tags option DefaultTags = []string{} // DefaultMaxBytesPerPayload is the default value for the MaxBytesPerPayload option DefaultMaxBytesPerPayload = 0 // DefaultMaxMessagesPerPayload is the default value for the MaxMessagesPerPayload option DefaultMaxMessagesPerPayload = math.MaxInt32 // DefaultBufferPoolSize is the default value for the DefaultBufferPoolSize option DefaultBufferPoolSize = 0 // DefaultBufferFlushInterval is the default value for the BufferFlushInterval option DefaultBufferFlushInterval = 100 * time.Millisecond // DefaultBufferShardCount is the default value for the BufferShardCount option DefaultBufferShardCount = 32 // DefaultSenderQueueSize is the default value for the DefaultSenderQueueSize option DefaultSenderQueueSize = 0 // DefaultWriteTimeoutUDS is the default value for the WriteTimeoutUDS option DefaultWriteTimeoutUDS = 1 * time.Millisecond // DefaultTelemetry is the default value for the Telemetry option DefaultTelemetry = true // DefaultReceivingMode is the default behavior when sending metrics DefaultReceivingMode = MutexMode // DefaultChannelModeBufferSize is the default size of the channel holding incoming metrics DefaultChannelModeBufferSize = 4096 // DefaultAggregationFlushInterval is the default interval for the aggregator to flush metrics. DefaultAggregationFlushInterval = 3 * time.Second // DefaultAggregation DefaultAggregation = false )
Functions ¶
func NewTelemetryClient ¶
Types ¶
type Client ¶
type Client struct {
// Namespace to prepend to all statsd calls
Namespace string
// Tags are global tags to be added to every statsd call
Tags []string
// skipErrors turns off error passing and allows UDS to emulate UDP behaviour
SkipErrors bool
// contains filtered or unexported fields
}
A Client is a handle for sending messages to dogstatsd. It is safe to use one Client from multiple goroutines simultaneously.
func CloneWithExtraOptions ¶
CloneWithExtraOptions create a new Client with extra options
func New ¶
New returns a pointer to a new Client given an addr in the format "hostname:port" or "unix:///path/to/socket".
func NewBuffered ¶
NewBuffered returns a Client that buffers its output and sends it in chunks. Buflen is the length of the buffer in number of commands.
When addr is empty, the client will default to a UDP client and use the DD_AGENT_HOST and (optionally) the DD_DOGSTATSD_PORT environment variables to build the target address.
func NewWithWriter ¶
NewWithWriter creates a new Client with given writer. Writer is a io.WriteCloser + SetWriteTimeout(time.Duration) error
func (*Client) Distribution ¶
Distribution tracks the statistical distribution of a set of values across your infrastructure.
func (*Client) Flush ¶
Flush forces a flush of all the queued dogstatsd payloads This method is blocking and will not return until everything is sent through the network
func (*Client) FlushTelemetryMetrics ¶
func (c *Client) FlushTelemetryMetrics() ClientMetrics
func (*Client) Histogram ¶
Histogram tracks the statistical distribution of a set of values on each host.
func (*Client) ServiceCheck ¶
func (c *Client) ServiceCheck(sc *ServiceCheck) error
ServiceCheck sends the provided ServiceCheck.
func (*Client) SetWriteTimeout ¶
SetWriteTimeout allows the user to set a custom UDS write timeout. Not supported for UDP.
func (*Client) SimpleEvent ¶
SimpleEvent sends an event with the provided title and text.
func (*Client) SimpleServiceCheck ¶
func (c *Client) SimpleServiceCheck(name string, status ServiceCheckStatus) error
SimpleServiceCheck sends an serviceCheck with the provided name and status.
func (*Client) TimeInMilliseconds ¶
TimeInMilliseconds sends timing information in milliseconds. It is flushed by statsd with percentiles, mean and other info (https://github.com/etsy/statsd/blob/master/docs/metric_types.md#timing)
type ClientInterface ¶
type ClientInterface interface {
// Gauge measures the value of a metric at a particular time.
Gauge(name string, value float64, tags []string, rate float64) error
// Count tracks how many times something happened per second.
Count(name string, value int64, tags []string, rate float64) error
// Histogram tracks the statistical distribution of a set of values on each host.
Histogram(name string, value float64, tags []string, rate float64) error
// Distribution tracks the statistical distribution of a set of values across your infrastructure.
Distribution(name string, value float64, tags []string, rate float64) error
// Decr is just Count of -1
Decr(name string, tags []string, rate float64) error
// Incr is just Count of 1
Incr(name string, tags []string, rate float64) error
// Set counts the number of unique elements in a group.
Set(name string, value string, tags []string, rate float64) error
// Timing sends timing information, it is an alias for TimeInMilliseconds
Timing(name string, value time.Duration, tags []string, rate float64) error
// TimeInMilliseconds sends timing information in milliseconds.
// It is flushed by statsd with percentiles, mean and other info (https://github.com/etsy/statsd/blob/master/docs/metric_types.md#timing)
TimeInMilliseconds(name string, value float64, tags []string, rate float64) error
// Event sends the provided Event.
Event(e *Event) error
// SimpleEvent sends an event with the provided title and text.
SimpleEvent(title, text string) error
// ServiceCheck sends the provided ServiceCheck.
ServiceCheck(sc *ServiceCheck) error
// SimpleServiceCheck sends an serviceCheck with the provided name and status.
SimpleServiceCheck(name string, status ServiceCheckStatus) error
// Close the client connection.
Close() error
// Flush forces a flush of all the queued dogstatsd payloads.
Flush() error
// SetWriteTimeout allows the user to set a custom write timeout.
SetWriteTimeout(d time.Duration) error
}
ClientInterface is an interface that exposes the common client functions for the purpose of being able to provide a no-op client or even mocking. This can aid downstream users' with their testing.
type ClientMetrics ¶
type ClientMetrics struct {
TotalMetrics uint64
TotalEvents uint64
TotalServiceChecks uint64
TotalDroppedOnReceive uint64
}
ClientMetrics contains metrics about the client
type Event ¶
type Event struct {
// Title of the event. Required.
Title string
// Text is the description of the event. Required.
Text string
// Timestamp is a timestamp for the event. If not provided, the dogstatsd
// server will set this to the current time.
Timestamp time.Time
// Hostname for the event.
Hostname string
// AggregationKey groups this event with others of the same key.
AggregationKey string
// Priority of the event. Can be statsd.Low or statsd.Normal.
Priority EventPriority
// SourceTypeName is a source type for the event.
SourceTypeName string
// AlertType can be statsd.Info, statsd.Error, statsd.Warning, or statsd.Success.
// If absent, the default value applied by the dogstatsd server is Info.
AlertType EventAlertType
// Tags for the event.
Tags []string
}
An Event is an object that can be posted to your DataDog event stream.
type EventAlertType ¶
type EventAlertType string
EventAlertType is the alert type for events
const ( // Info is the "info" AlertType for events Info EventAlertType = "info" // Error is the "error" AlertType for events Error EventAlertType = "error" // Warning is the "warning" AlertType for events Warning EventAlertType = "warning" // Success is the "success" AlertType for events Success EventAlertType = "success" )
type EventPriority ¶
type EventPriority string
EventPriority is the event priority for events
const ( // Normal is the "normal" Priority for events Normal EventPriority = "normal" // Low is the "low" Priority for events Low EventPriority = "low" )
type NoOpClient ¶
type NoOpClient struct{}
NoOpClient is a statsd client that does nothing. Can be useful in testing situations for library users.
func (*NoOpClient) Decr ¶
func (n *NoOpClient) Decr(name string, tags []string, rate float64) error
Decr does nothing and returns nil
func (*NoOpClient) Distribution ¶
Distribution does nothing and returns nil
func (*NoOpClient) Event ¶
func (n *NoOpClient) Event(e *Event) error
Event does nothing and returns nil
func (*NoOpClient) Incr ¶
func (n *NoOpClient) Incr(name string, tags []string, rate float64) error
Incr does nothing and returns nil
func (*NoOpClient) ServiceCheck ¶
func (n *NoOpClient) ServiceCheck(sc *ServiceCheck) error
ServiceCheck does nothing and returns nil
func (*NoOpClient) SetWriteTimeout ¶
func (n *NoOpClient) SetWriteTimeout(d time.Duration) error
SetWriteTimeout does nothing and returns nil
func (*NoOpClient) SimpleEvent ¶
func (n *NoOpClient) SimpleEvent(title, text string) error
SimpleEvent does nothing and returns nil
func (*NoOpClient) SimpleServiceCheck ¶
func (n *NoOpClient) SimpleServiceCheck(name string, status ServiceCheckStatus) error
SimpleServiceCheck does nothing and returns nil
func (*NoOpClient) TimeInMilliseconds ¶
func (n *NoOpClient) TimeInMilliseconds(name string, value float64, tags []string, rate float64) error
TimeInMilliseconds does nothing and returns nil
type Option ¶
Option is a client option. Can return an error if validation fails.
func WithAggregationInterval ¶
WithAggregationInterval set the aggregation interval
func WithBufferFlushInterval ¶
WithBufferFlushInterval sets the BufferFlushInterval option.
func WithBufferPoolSize ¶
WithBufferPoolSize sets the BufferPoolSize option.
func WithBufferShardCount ¶
WithBufferShardCount sets the BufferShardCount option.
func WithChannelMode ¶
func WithChannelMode() Option
WithChannelMode will use channel to receive metrics
func WithChannelModeBufferSize ¶
WithChannelModeBufferSize the channel buffer size when using "drop mode"
func WithClientSideAggregation ¶
func WithClientSideAggregation() Option
WithClientSideAggregation enables client side aggregation. Client side aggregation is a beta feature.
func WithMaxBytesPerPayload ¶
WithMaxBytesPerPayload sets the MaxBytesPerPayload option.
func WithMaxMessagesPerPayload ¶
WithMaxMessagesPerPayload sets the MaxMessagesPerPayload option.
func WithNamespace ¶
WithNamespace sets the Namespace option.
func WithSenderQueueSize ¶
WithSenderQueueSize sets the SenderQueueSize option.
func WithTelemetryAddr ¶
WithTelemetryAddr specify a different address for telemetry metrics.
func WithWriteTimeoutUDS ¶
WithWriteTimeoutUDS sets the WriteTimeoutUDS option.
func WithoutClientSideAggregation ¶
func WithoutClientSideAggregation() Option
WithoutClientSideAggregation disables client side aggregation.
type Options ¶
type Options struct {
// Namespace to prepend to all metrics, events and service checks name.
Namespace string
// Tags are global tags to be applied to every metrics, events and service checks.
Tags []string
// MaxBytesPerPayload is the maximum number of bytes a single payload will contain.
// The magic value 0 will set the option to the optimal size for the transport
// protocol used when creating the client: 1432 for UDP and 8192 for UDS.
MaxBytesPerPayload int
// MaxMessagesPerPayload is the maximum number of metrics, events and/or service checks a single payload will contain.
// This option can be set to `1` to create an unbuffered client.
MaxMessagesPerPayload int
// BufferPoolSize is the size of the pool of buffers in number of buffers.
// The magic value 0 will set the option to the optimal size for the transport
// protocol used when creating the client: 2048 for UDP and 512 for UDS.
BufferPoolSize int
// BufferFlushInterval is the interval after which the current buffer will get flushed.
BufferFlushInterval time.Duration
// BufferShardCount is the number of buffer "shards" that will be used.
// Those shards allows the use of multiple buffers at the same time to reduce
// lock contention.
BufferShardCount int
// SenderQueueSize is the size of the sender queue in number of buffers.
// The magic value 0 will set the option to the optimal size for the transport
// protocol used when creating the client: 2048 for UDP and 512 for UDS.
SenderQueueSize int
// WriteTimeoutUDS is the timeout after which a UDS packet is dropped.
WriteTimeoutUDS time.Duration
// Telemetry is a set of metrics automatically injected by the client in the
// dogstatsd stream to be able to monitor the client itself.
Telemetry bool
// ReceiveMode determins the behavior of the client when receiving to many
// metrics. The client will either drop the metrics if its buffers are
// full (ChannelMode mode) or block the caller until the metric can be
// handled (MutexMode mode). By default the client will MutexMode. This
// option should be set to ChannelMode only when use under very high
// load.
//
// MutexMode uses a mutex internally which is much faster than
// channel but causes some lock contention when used with a high number
// of threads. Mutex are sharded based on the metrics name which
// limit mutex contention when goroutines send different metrics.
//
// ChannelMode: uses channel (of ChannelModeBufferSize size) to send
// metrics and drop metrics if the channel is full. Sending metrics in
// this mode is slower that MutexMode (because of the channel), but
// will not block the application. This mode is made for application
// using many goroutines, sending the same metrics at a very high
// volume. The goal is to not slow down the application at the cost of
// dropping metrics and having a lower max throughput.
ReceiveMode ReceivingMode
// ChannelModeBufferSize is the size of the channel holding incoming metrics
ChannelModeBufferSize int
// AggregationFlushInterval is the interval for the aggregator to flush metrics
AggregationFlushInterval time.Duration
// [beta] Aggregation enables/disables client side aggregation
Aggregation bool
// TelemetryAddr specify a different endpoint for telemetry metrics.
TelemetryAddr string
}
Options contains the configuration options for a client.
type SenderMetrics ¶
type SenderMetrics struct {
TotalSentBytes uint64
TotalSentPayloads uint64
TotalDroppedPayloads uint64
TotalDroppedBytes uint64
TotalDroppedPayloadsQueueFull uint64
TotalDroppedBytesQueueFull uint64
TotalDroppedPayloadsWriter uint64
TotalDroppedBytesWriter uint64
}
SenderMetrics contains metrics about the health of the sender
type ServiceCheck ¶
type ServiceCheck struct {
// Name of the service check. Required.
Name string
// Status of service check. Required.
Status ServiceCheckStatus
// Timestamp is a timestamp for the serviceCheck. If not provided, the dogstatsd
// server will set this to the current time.
Timestamp time.Time
// Hostname for the serviceCheck.
Hostname string
// A message describing the current state of the serviceCheck.
Message string
// Tags for the serviceCheck.
Tags []string
}
A ServiceCheck is an object that contains status of DataDog service check.
func NewServiceCheck ¶
func NewServiceCheck(name string, status ServiceCheckStatus) *ServiceCheck
NewServiceCheck creates a new serviceCheck with the given name and status. Error checking against these values is done at send-time, or upon running sc.Check.
func (ServiceCheck) Check ¶
func (sc ServiceCheck) Check() error
Check verifies that a service check is valid.
type ServiceCheckStatus ¶
type ServiceCheckStatus byte
ServiceCheckStatus support
const ( // Ok is the "ok" ServiceCheck status Ok ServiceCheckStatus = 0 // Warn is the "warning" ServiceCheck status Warn ServiceCheckStatus = 1 // Critical is the "critical" ServiceCheck status Critical ServiceCheckStatus = 2 // Unknown is the "unknown" ServiceCheck status Unknown ServiceCheckStatus = 3 )