apple/swift-statsd-client

Support other formats for metric dimensions

开放

#13 创建于 2020年2月19日

 (2 条评论) (0 个反应) (0 位负责人)Swift (23 个派生)auto 404
good first issuekind/enhancement

仓库指标

星标
 (71 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

At present, the use of metrics dimensions results in some metrics being emitted in an unexpected way:

Timer(label: "my_event", dimensions: [("foo", "bar")]).recordNanoseconds(someDuration)

will emit a packet roughly like

my_event.foo.bar:123.45|ms

However, using the tag format for dimensions would be more appropriate in many applications:

my_event:123.45|ms#foo:bar

Unfortunately, there's not a standard syntax for tags (see https://github.com/statsd/statsd/issues/619), but I think this could be addressed by having an optional init parameter to specify the format:

enum DimensionFormat {
  case datadog
  case influxdb
  case inline
  // ..
}

class StatsdClient: MetricsFactory {
  public init(eventLoopGroupProvider: EventLoopGroupProvider = .createNew, host: String, port: Int, format: DimensionFormat = .inline) throws {
    // ...
  }
  // ...
}

// User initialization code
let statsdClient = try StatsdClient(host: statsdHost, port: statsdPort, format: .datadog)
MetricsSystem.bootstrap(statsdClient)

It may be preferable to avoid specific vendor names in the enum cases to avoid any sort of endorsement, but I'm confident that could be addressed.

Thoughts?

贡献者指南