Как записывать пользовательские показатели производительности с помощью GCP Monitoring из приложений python3

Я работаю над декоратором, который можно добавить к методам Python, которые отправляют метрику в мониторинг GCP. Подход подтвержден, но вызовы API для отправки метрик завершатся ошибкой, если я попытаюсь отправить более 1 наблюдения. Шаблон собирает метрики и сбрасывает их после завершения процесса, чтобы упростить этот тест. Код для захвата встроенной метрики находится здесь:

    def append(self, value):
        now = time.time()
        seconds = int(now)
        nanos = int((now - seconds) * 10 ** 9)
        interval = monitoring_v3.TimeInterval(
            {"end_time": {"seconds": seconds, "nanos": nanos}}
        )
        point = monitoring_v3.Point({
            "interval": interval,
            "value": {"double_value": value}
            }
        )
        self.samples[self.name].append(point)

Приведенный ниже код принимает набор точек данных в PerfMetric.samples dict, указывающих на массивы класса monitoring_v3.Point, которые были присоединены в методе append через декоратор, не показанный здесь, для вызова RPC с именем create_time_series с использованием класса MetricServiceClient. Мы указываем на массив массивов, так что, возможно, это неправильно или что-то не так в добавлении наших метаданных?

 @staticmethod
 def flush():
     client = monitoring_v3.MetricServiceClient()
     for x in PerfMetric.samples:
         print('{} has {} points'.format(x, len(PerfMetric.samples[x])))
         series = monitoring_v3.TimeSeries()
         series.metric.type = 'custom.googleapis.com/perf/{}'.format(x)
         series.resource.type = "global"
         series.points = PerfMetric.samples[x]
         client.create_time_series(request = {
             "name": PerfMetric.project_name,
             "time_series": [series]}
         )

Спасибо заранее за любые предложения!

За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
TL;DR: Angular Signals может облегчить отслеживание всех выражений в представлении (Component или EmbeddedView) и планирование пользовательских...
Sniper-CSS, избегайте неиспользуемых стилей
Sniper-CSS, избегайте неиспользуемых стилей
Это краткое руководство, в котором я хочу поделиться тем, как я перешел от 212 кБ CSS к 32,1 кБ (сокращение кода на 84,91%), по-прежнему используя...
1
0
346
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это задокументированное ограничение в вызове TimeSeries из Cloud Monitoring API относительно объекта points[] для его точек данных:

При создании временного ряда это поле должно содержать ровно одну точку, а тип точки должен совпадать с типом значения связанной метрики.

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