Linkerd com.twitter.finagle.stats.Stat значения не отображаются внутри /admin/metrics.json

Я работаю над академическим проектом, используя Linkerd для решения сервисной сетки.

Внутри моего сервиса у меня есть дюжина метрик для сообщения о некоторых конкретных сервисных номерах. Я разработал свой плагин Linkerd, который принимает объект com.twitter.finagle.stats.StatsReceiver в моем настраиваемом имени, а затем этот объект передается моему сервисному объекту, где я создаю экземпляр объекта com.twitter.finagle.stats.Counter с помощью следующего вызов

com.twitter.finagle.stats.Counter counter = this.statsReceiver.counter(getSeq("numberOfRetries"));

Затем внутри соответствующих методов я увеличиваю этот счетчик следующим образом ->

com.twitter.finagle.stats.Counter counter = getServiceMetricsCounter(svc, "numberOfRetries");
if (counter != null) {
   counter.incrementAndGet();
}

Когда я запускаю Linkerd, я вижу свои метрики счетчика в соответствии с предоставленным мной идентификатором конфигурации для имени пользователя собственного плагина Linkerd внутри /admin/metrics.json как -> "namer/#/com.usf.twitter.hydration/numberOfRetries": 12 Я получаю аналогичные результаты для других показателей. Тем не менее, я столкнулся с серьезной трудностью в 2 случаях:: ==>

1) Я хочу получить процентили / гистограмму для моих метрик временных рядов, особенно для этих. Я могу видеть эти показатели в качестве примера внутри /admin/metrics.json, когда я запускаю Linkerd:

"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.count" : 2648,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.max" : 529,  "rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.min" : 0,  "rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p50" : 246,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p90" : 575,  "rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p95" : 529,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p99" : 615,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p9990" : 429,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.p9999" : 529,  
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.sum" : 1173897,
"rt/outgoing_http2/client/$/inet/kubeservice.com/16024/request_latency_ms.avg" : 254.07148219833456

Я вижу, что они определили объект stat для метрики request_latency_ms здесь. Затем они применяют приращение к этому объекту здесь.

Я делаю именно что-то подобное

com.twitter.finagle.stats.Stat stat = this.statsReceiver.stat(getSeq("retryLatencyInMillisecs"));

с последующим

com.twitter.finagle.stats.Stat stat = getServiceMetricsStat(svc, "retryLatencyInMillisecs");
if (stat != null) {
   stat.add(val); // where val = 25.0f or something
}

Однако, когда я запускаю Linkerd, я не вижу эти показатели com.twitter.finagle.stats.Stat внутри /admin/metrics.json, как я это делаю для com.twitter.finagle.stats.Counter. Зачем? Как я могу получить эти метрики статистики, чтобы получить процентили в /admin/metrics.json?

Я понимаю, что эти процентили, основанные на гистограмме, происходят из Stat внутри io.buoyant.telemetry.Metric. Я не хочу добавлять зависимость linkerd в мой сервис, чтобы избежать циклической зависимости.

Я думал по следующим направлениям ->

class HydrationNamer(
                 server: String,
                 srStats: StatsReceiver = NullStatsReceiver,
                 metrics: MetricsTree
  ) extends Namer {

  private[this] val log = Logger.get("com.usf.twitter.hydration")
  val cfg:  Hydration.conf = new Hydration.conf(srStats, server)
  Hydration.init(cfg)
  val hydration: Hydration = new Hydration()

  val m = metrics.mkStat(Verbosity.Default)

// Теперь, как мне связать srStats.stat("Моя метрика") с metrics.mkStat(Verbosity.Default), чтобы увидеть мои показатели статистики и процентили внутри /admin/metrics.json???

2) Это простое продолжение предыдущего вопроса. Некоторые из моих показателей являются числами с плавающей запятой или двойными. Как отобразить показатели с плавающей запятой так же, как для счетчиков? Я не хочу просто добавлять +1, как я делаю для счетчиков, я хочу специально отображать значения в определенное время, или я могу добиться этого только с помощью вашего Linkerd Metric/Stat? Нужно ли для этого использовать датчик из StatsReceiver? Если да, у вас есть пример для этого случая?

0 ответов

Другие вопросы по тегам