>我在 GCP 中创建了 3 个指标1) 成功请求计数2) 重定向请求计数和3)失败请求计数。所有 3 个指标都是从 Kubernetes 日志上基于日志的指标创建的。
这里基本上是一个指标"成功请求"的 Terraform 资源定义。
resource "google_logging_metric" "success_requests" {
filter = <<-EOT
resource.type="k8s_container"
jsonPayload.message:"Request success"
EOT
name = "success_requests"
project = var.gcp_project_id
metric_descriptor {
metric_kind = "DELTA"
unit = "1"
value_type = "INT64"
}
}
另外 2 个基本上只是用Request redirected
和Request failed
过滤jsonPayload.message
。
我想创建一个仪表板,显示使用此公式的成功率
success_rate = success_requests / (success_requests + redirected_requests + failed_requests)
我已成功创建一个仪表板,该仪表板使用以下 MQL 显示三个指标。
k8s_container | {
t_0:
metric logging.googleapis.com/user/success_requests;
t_1:
metric logging.googleapis.com/user/redirected_requests;
t_2:
metric logging.googleapis.com/user/failed_requests
} | union
但是,如前所述,如何创建一个显示公式成功率的仪表板呢?
要使用指标执行一些算术运算,您需要使用算术计算来处理时间序列
若要对两个时序求和,请将查询配置为提取两个表 时序,联接这些结果,然后调用 Add 函数。这 以下示例演示了一个查询,该查询计算 从计算引擎实例读取和写入的字节数:
fetch gce_instance
| { metric 'compute.googleapis.com/instance/disk/read_bytes_count'
; metric 'compute.googleapis.com/instance/disk/write_bytes_count' }
| outer_join 0
| add
汇总三个时间序列后,可以使用div 函数。
以下查询使用 time_shift、join 和div 来计算从现在到一周前每个区域中的平均利用率的比率。
fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
| group_by [zone], mean(val())
| {
ident
;
time_shift 1w
}
| join | div
您可以在此链接中查看更多使用 MQL 的查询示例。
您可以在此链接中查看更多在 MQL 中实现算术运算符的函数。
我相信你需要的是一个outer_join而不是工会。请注意,MQL 的outer_join仅支持连接两个指标。但是,您可以使用两个outer_join操作来联接三个表,如下所示。
加入指标后,您可以简单地通过success_requests
、failed_requests
等名称来引用它们。
请注意,outer_join 0,0
对两个表执行完全外部联接,如果其中一个输入流在给定时间戳处没有值,则替换 0。
例:
{
{k8s_container :: logging.googleapis.com/user/success_requests ;
k8s_container :: logging.googleapis.com/user/redirected_requests}
| outer_join 0,0 ;
k8s_container :: logging.googleapis.com/user/failed_requests
}
| outer_join 0,0
| value [success_rate: success_requests / (success_requests + redirected_requests + failed_requests)]