我有统计所有传入请求的指标
http_server_requests_seconds_count
。我的要求是在 grafana 仪表板中创建 4 列的表,第一列显示 uri,第二列显示 uri 状态代码 500 的请求计数,第三列显示 uri 状态代码 400 的请求计数,第二列显示状态代码请求不是 400 和 500 但不是 200 或 300 的请求计数,最后一列应显示 uri 的平均计数。
我如何使用表格可视化来创建它?
我尝试使用
http_server_requests_seconds_count
为每种情况添加多个查询,但无法将每个查询映射到不同的列
我将做出一些假设来填补一些空白:
uri
和 status_code
的标签。我们解决这个问题的方法是为每个 URI 计算几个不同的数量,将它们合并在一起,然后格式化结果。
首先,让我们设置一个表格可视化。
接下来,我们需要创建一个 prometheus 查询来获取目标时间段内 uri 的请求计数。让我们使用
sum(increase(http_server_requests_seconds_count[$__range])) by (uri)
。以下是查询的工作原理:
http_server_requests_seconds_count
是你的指标,我假设它是一个计数器。$__range
是右上角时间下拉列表中给出的持续时间,[$__range]
告诉普罗米修斯从时间序列中获取与该大小相等的切片。rate
或 increase
对其进行处理以使其有用。 increase
将告诉我们在 $__range
给出的时间范围内发生了多少个请求。sum(...) by (uri)
将按 uri
对数据进行细分,并告诉我们每个数据发生了多少个请求。结果应该是目标时间窗口内发生的每个端点的请求总数。
接下来,我们需要对您关心的其他数量重复此过程。
500
请求。我们可以通过使用相同的计算并仅通过过滤 status_code=500
上的初始指标来完成此操作,如下所示:sum(increase(http_server_requests_seconds_count{status_code="500"}[$__range])) by (uri)
400
请求执行类似的操作:sum(increase(http_server_requests_seconds_count{status="400"}[$__range])) by (uri)
sum(increase(http_server_requests_seconds_count{status!~"200|300|400|500"}[$__range])) by (uri)
为了获得表中同一页上的所有这些值,我们需要进行合并操作。在“转换”选项卡下,添加“合并系列/表”转换。结果应该是一个表格,其中按 URI 提供了您要查找的四个值的详细信息。
最后,我们需要进行一些清理以使表格更具可读性。我们可以通过添加另一个重新组织列转换来做到这一点。我建议采取以下清理措施
这是设置屏幕截图:
最终结果如下: