1

我正在尝试使用 MQL 查询将数据从 Google Cloud Monitoring 导出到 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)]
4

2 回答 2

4

使用语法: metadata.user_labels.c'wdl-call-alias'

元数据使用与列标签相同的语法(它是一种伪列),并且不是标识符的列标签组件需要使用c'....'orc"...."语法引用。

所以:

| 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
于 2021-03-08T22:52:37.717 回答
1

您可以在单独的map调用中重命名您的行,也可以内联group_by

来自https://cloud.google.com/monitoring/mql/examples#qlx-groupby-aggr

group_by操作采用两个参数,以逗号分隔,。这些参数决定了精确的分组行为。

第一个参数控制时间序列的分组。这是一个地图表达式,[...] 地图表达式可以做的不仅仅是列表标签;有关详细信息,请参阅map参考页

您可以在那里阅读完整的文档,但 TLDR 是:

mapis的语法,map : [ modifier ] '[' [ maplet { ',' maplet } ] ']'你需要的“修饰符”是rename,“maplet”应该是:

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

即:可以引用的“column_name”!

所以,

| map rename ['metadata.user.wdl-call-alias': 'metadata.user.wdl_call_alias']应该给你你想要的结果。

但我现在没有 GCP 帐户来测试它。

于 2021-03-02T06:00:01.180 回答