Можно ли группировать по метке метаданных пользователя, содержащей тире, в MQL?

#google-cloud-monitoring

#google-cloud-monitoring #мониторинг-язык запросов

Вопрос:

Я пытаюсь использовать запросы MQL для экспорта данных из облачного мониторинга Google в BigQuery для долгосрочного архивирования. Я обнаружил, что запросы, которые группируются по меткам метаданных, сгенерированным пользователем, включая символ тире (например, «wdl-call-alias»), похоже, не совместимы с MQL. Я полагаюсь на стороннюю систему, которая генерирует эти метки, и их нелегко изменить.

Есть ли способ использовать MQL для группирования по меткам метаданных, содержащим тире? Я включил два примера ниже для справки.

Рабочий запрос с использованием метки «образец»:

 fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/reserved_cores'
| group_by 1m, [value_reserved_cores_mean: mean(value.reserved_cores)]
| every 1m
| group_by [metadata.user.sample: metadata.user_labels.sample],
    [value_reserved_cores_mean_aggregate: aggregate(value_reserved_cores_mean)]
 

Неработающий запрос с использованием метки «wdl-call-alias»:

 fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/reserved_cores'
| group_by 1m, [value_reserved_cores_mean: mean(value.reserved_cores)]
| every 1m
| group_by [metadata.user.wdl-call-alias: metadata.user_labels.wdl-call-alias],
    [value_reserved_cores_mean_aggregate: aggregate(value_reserved_cores_mean)]
 

Комментарии:

1. вы можете попробовать переименовать свои строки с помощью map

2. или просто попробуйте процитировать их, например: | group_by ['metadata.user.wdl-call-alias': 'metadata.user_labels.wdl-call-alias'],

Ответ №1:

Используйте синтаксис: metadata.user_labels.c'wdl-call-alias'

Метаданные используют тот же синтаксис, что и метки столбцов (это своего рода псевдоколонок), а компоненты меток столбцов, которые не являются идентификаторами, должны заключаться в кавычки с использованием синтаксиса c'....' или c"...." .

Итак:

 | group_by [metadata.user.wdl-call-alias: metadata.user_labels.c'wdl-call-alias'],
    [value_reserved_cores_mean_aggregate: aggregate(value_reserved_cores_mean)]
 

Или более компактно:

 | group_by [metadata.user_labels.c'wdl-call-alias'], .aggregate
 

Ответ №2:

Вы можете переименовать свои строки в отдельном map вызове или встроить в group_by :

Из https://cloud.google.com/monitoring/mql/examples#qlx-groupby-aggr

group_by Операция принимает два аргумента, разделенных запятой , . Эти аргументы определяют точное поведение группировки.

Первый аргумент управляет группировкой временных рядов. Это выражение карты, […] Выражение карты может делать гораздо больше, чем метки списка; для получения дополнительной информации см. map Справочную страницу.

Вы можете прочитать полный документ там, но TLDR:

Синтаксис map is map : [ modifier ] '[' [ maplet { ',' maplet } ] ']' , «модификатор», который вам нужен rename , и «maplet» должен быть:

 maplet : [ column_name ':' ] expr .
column_name : ID | QUOTED_COLUMN .
 

ie: «column_name», который можно заключать в кавычки!

итак,

| map rename ['metadata.user.wdl-call-alias': 'metadata.user.wdl_call_alias'] должно дать вам желаемый результат.

Но у меня сейчас нет учетной записи GCP, чтобы протестировать ее.