Не удается получить данные пользовательских метрик при использовании OpenCensus

Я следую этому руководству monitoring_opencensus_metrics_quickstart-go. Кроме того, я также пробовал способ из этого ответа.

Код здесь:

package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "path"
    "time"

    "google.golang.org/api/option"

    "contrib.go.opencensus.io/exporter/stackdriver"
    "go.opencensus.io/stats"
    "go.opencensus.io/stats/view"
    "golang.org/x/exp/rand"
)

var (
    // The task latency in milliseconds.
    latencyMs = stats.Float64("task_latency", "The task latency in milliseconds", "ms")
)

func main() {
    ctx := context.Background()
    v := &view.View{
        Name:        "task_latency_distribution",
        Measure:     latencyMs,
        Description: "The distribution of the task latencies",
        Aggregation: view.Distribution(0, 100, 200, 400, 1000, 2000, 4000),
    }
    if err := view.Register(v); err != nil {
        log.Fatalf("Failed to register the view: %v", err)
    }

    exporter, err := stackdriver.NewExporter(stackdriver.Options{
        ProjectID: os.Getenv("GOOGLE_CLOUD_PROJECT"),
        MonitoringClientOptions: []option.ClientOption{
            option.WithCredentialsFile(path.Join("./.gcp/stackdriver-monitor-admin.json")),
        },
    })
    if err != nil {
        log.Fatal(err)
    }
    view.RegisterExporter(exporter)
    view.SetReportingPeriod(60 * time.Second)
    // Flush must be called before main() exits to ensure metrics are recorded.
    defer exporter.Flush()

    if err := exporter.StartMetricsExporter(); err != nil {
        log.Fatalf("Error starting metric exporter: %v", err)
    }
    defer exporter.StopMetricsExporter()

    // Record 100 fake latency values between 0 and 5 seconds.
    for i := 0; i < 100; i++ {
        ms := float64(5*time.Second/time.Millisecond) * rand.Float64()
        fmt.Printf("Latency %d: %f\n", i, ms)
        stats.Record(ctx, latencyMs.M(ms))
        time.Sleep(1 * time.Second)
    }

    fmt.Println("Done recording metrics")
}

Я запускаю вышеуказанный код локально, а НЕ в средах GCE, GAE и GKE.

В веб-интерфейсе обозревателя метрик вот условие запроса метрики:

  • Тип ресурса: Consumed API
  • Метрика: custom.googleapis.com/opencensus/task_latency_distribution

Полный запрос:

fetch consumed_api
| metric 'custom.googleapis.com/opencensus/task_latency_distribution'
| align delta(1m)
| every 1m
| group_by [],
    [value_task_latency_distribution_aggregate:
       aggregate(value.task_latency_distribution)]

Учетная запись службы имеет Monitoring Admin роль.

Но получил No data is available for the selected time frame.

введите описание изображения здесь


comment
Вы дважды подтвердили, что все эти шаги были выполнены? забота о?   -  person Aarti S    schedule 03.09.2020
comment
@AartiS Конечно. opencensus и служба облачной трассировки работают нормально, но облачный мониторинг не работает, как описано в вопросе   -  person slideshowp2    schedule 04.09.2020
comment
Я думаю, что для такого поведения лучше открыть запрос в службу поддержки Google (cloud.google.com / support / docs), то ответ будет несложным.   -  person Pralove Tandukar    schedule 08.09.2020


Ответы (1)


У меня это работает, но я старался делать что-то немного по-другому:

  • export GOOGLE_APPLICATION_CREDENTIALS=path/to/creds вместо MonitoringClientOptions{};
  • Раньше (!?) у меня были проблемы с дистрибутивами с 0 ведром; попробуйте удалить это начальное (0) ведро и повторите попытку;
  • Отбросьте resource.type из проводника метрик; из обозревателя API, если таковой имеется, это должно быть global

Google APIs Explorer - отличный способ диагностировать проблемы с API Stackdriver. Вы можете использовать его для отображения метрик и таймсерий (замените your-project-id и обновите 2 значения interval):

https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors/list?apix=true&apix_params=%7B%22name%22%3A%22projects%2Fyour-project-id%22%2C%22filter%22%3A%22metric.type%3D%5C%22custom.googleapis.com%2Fopencensus%2Ftask_latency_distribution%5C%22%22%7D

https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list?apix=true&apix_params=%7B%22name%22%3A%22projects%2Fyour-project-id%22%2C%22aggregation.alignmentPeriod%22%3A%22%2B300s%22%2C%22aggregation.crossSeriesReducer%22%3A%22REDUCE_MEAN%22%2C%22aggregation.perSeriesAligner%22%3A%22ALIGN_DLigner%22filter%22%3A%22metric.type%3D%5C%22custom.googleapis.com%2Fopencensus%2Ftask_latency_distribution%5C%22%22%2C%22interval.endTime%22%3A%222020-09-08T23%3A59%3A59Z%22%2C%22interval.startTime%22%3A%222020-09-08T00%3A00%3A00Z%22%7D

Используя консоль разработчика Chrome, вы можете найти один из вызовов API Stackdriver, чтобы его было легче воспроизвести, например

filter: metric.type="custom.googleapis.com/opencensus/task_latency_distribution"
aggregation.crossSeriesReducer: REDUCE_MEAN
aggregation.alignmentPeriod: +60s
aggregation.perSeriesAligner: ALIGN_DELTA
secondaryAggregation.crossSeriesReducer: REDUCE_NONE
interval.startTime: 2020-09-08T23:59:59Z
interval.endTime: 2020-09-08T00:00:00Z
person DazWilkin    schedule 08.09.2020