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 )