我正在Google Kubernetes Engine上使用Spinnaker,并将Stackdriver用作日志和统计信息源。我无法在Spinnaker自动金丝雀分析设置中使用计时/分配指标。
我的应用程序记录每个API请求的请求信息。它们包含所有请求详细信息,因此我可以创建基于日志的统计信息。
一个相当截断的日志条目如下所示:
{
"jsonPayload": {
"format_parameters": {
"ElapsedMilliseconds": "4.9541",
"Method": "POST",
"NormalizedPath": "api/add",
"StatusCode": "200"
}
},
"labels": {
"kubernetes/labels/app.kubernetes.io/name": "calculator",
"kubernetes/labels/track": "production",
"kubernetes/namespace": "calculator"
}
}
我已经使用如下所示的日志过滤器为请求延迟创建了基于日志的统计信息:
resource.type="container" AND
jsonPayload.format_parameters.NormalizedPath != ""
并指定它是基于jsonPayload.format_parameters.ElapsedMilliseconds
的“分发”指标。我将其称为api/request_latency
,并且能够查看数据图,按路径和请求方法将其分解等。
我想设置Spinnaker(Kayenta),以便在延迟增加的情况下使Canary分析失败。 This article from Netflix shows they're doing that,但我也看到他们正在按第5、50和99%的百分数来判断。
我已经设置了我的金丝雀配置来查看logging.googleapis.com/user/api/request_latency
,并且得到了这样的过滤器:
metric.label.name="${location}" AND
metric.label.track="${scope}"
track
标签在canary
和production
之间切换,并且location
被设置为应用程序名称。
执行金丝雀分析时,出现此错误:
Field aggregation.perSeriesAligner had an invalid value of "ALIGN_MEAN": The aligner cannot be applied to metrics with kind DELTA and value type DISTRIBUTION."
我发现这来自Stackdriver和针对统计数据has ALIGN_MEAN
hardcoded as the per-series aligner运行的Kayenta查询。
我不是统计学家,老实说,我不得不弄清楚“每系列对齐器”之类的含义,实在不知所措。
如何从日志中获取请求延迟并将其用于金丝雀分析?