1
0
Fork 0

Add support for sending DogStatsD metrics over Unix Socket

This commit is contained in:
Liam van der Viven 2024-01-29 17:08:05 +01:00 committed by GitHub
parent d37ea3e882
commit 18203f57d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 67 additions and 5 deletions

View file

@ -2,6 +2,7 @@ package metrics
import (
"context"
"strings"
"time"
"github.com/go-kit/kit/metrics/dogstatsd"
@ -16,6 +17,8 @@ var (
datadogLoopCancelFunc context.CancelFunc
)
const unixAddressPrefix = "unix://"
// Metric names consistent with https://github.com/DataDog/integrations-extras/pull/64
const (
ddConfigReloadsName = "config.reload.total"
@ -99,10 +102,7 @@ func RegisterDatadog(ctx context.Context, config *types.Datadog) Registry {
}
func initDatadogClient(ctx context.Context, config *types.Datadog) {
address := config.Address
if len(address) == 0 {
address = "localhost:8125"
}
network, address := parseDatadogAddress(config.Address)
ctx, datadogLoopCancelFunc = context.WithCancel(ctx)
@ -110,10 +110,27 @@ func initDatadogClient(ctx context.Context, config *types.Datadog) {
ticker := time.NewTicker(time.Duration(config.PushInterval))
defer ticker.Stop()
datadogClient.SendLoop(ctx, ticker.C, "udp", address)
datadogClient.SendLoop(ctx, ticker.C, network, address)
})
}
func parseDatadogAddress(address string) (string, string) {
network := "udp"
var addr string
switch {
case strings.HasPrefix(address, unixAddressPrefix):
network = "unix"
addr = address[len(unixAddressPrefix):]
case address != "":
addr = address
default:
addr = "localhost:8125"
}
return network, addr
}
// StopDatadog stops the Datadog metrics pusher.
func StopDatadog() {
if datadogLoopCancelFunc != nil {