跟踪状态代码响应以便未来的未知代码可以在时间序列图表上可视化的好做法是什么?

What's a good practice for tracking status code responses so that future, unknown, codes can be visualized on a time series chart?

假设我有一个 API 客户端,我跟踪得到的响应代码如下: “some_api_client.#{response.code}”导致任意数量的指标,例如:some_api_client.200、some_api_client.400、some_api_client.123456whatever

我如何构建一个面向未来的时间序列图表。也就是说,我不想在创建时添加所有可能的代码。我想添加一个通配符。我今天要做的最好的过程是猜测出现了哪些代码并定期进入图表并寻找要添加的新指标。

该过程会导致漏码。例如有一天弹出一个新代码,但我们没有 see/notice 因为我们没有添加指标。

这个问题的答案将明确解决那个场景——新的、未知的代码会在他们认为适合展示自己的时候自动出现在图表中。

使用 Datadog,从标签中分离指标名称是一个很好的方法。

在您的示例中,状态代码嵌入在指标名称中,这正是您所描述的问题 - 您必须提前知道指标名称才能添加到仪表板。

更改发出的指标以将响应代码放置为标签将有助于涵盖所有可能的值,然后您可以将其转化为更清晰的仪表板查询。

例如,如果这是从 Ruby dogstatsd client

发出的
statsd.increment('some_api_client.response', tags: ['response_code:#{response.code}'])

然后仪表板中的指标查询将如下所示:

...
"q": "sum:some_api_client.response{*} by {response_code}.as_count()",
"type": "bars",
...

然后会生成 所有 响应的堆叠图,由 response_code 堆叠。将自动包含新的 response_code 值!

使用最近发布的 Wildcard filter 功能,您可以将查询的范围更改为一组特定的响应代码,例如,如果您想要在单个图表中查看所有 4xx 响应代码,您可以为这些代码创建另一个具有标记范围的图表:

sum:some_api_client.response{4*} by {response_code}.as_count()

注意查询中的 {4*} 范围。