我是普罗米修斯的新手。我正在使用NewCounterVec来记录传入的http请求。我根据我在 git hub 上找到的许多其他人的代码使用它。
假设这就是我的指标的定义方式(在 go 中(
httpRequests = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Incoming http requests.",
},
[]string{"path", "status"},
)
路径 传入 URL 路径和状态是 HTTP 响应状态。 我的 promQL 查询(绘制图表(将用于什么
- 每分钟的传入请求数
- 基于 http 状态的故障率 代码(状态代码>=400(
我试过rate(http_requests_total[5m])[30m:1m]
基于此,但无法在图表上显示。它抛出错误 执行查询时出错:invalid expression type "range vector" for range query, must be Scalar or instant Vector
每分钟传入请求数
rate(http_requests_total[5m]) * 60
基于 http 状态代码的故障率(状态代码>=400(
rate(http_requests_total{status=~"[45].."}[5m])
但是,这是脆弱的,如果没有 4xx 或 5xx 状态代码,则不会返回任何内容。
所有路径和状态代码的每分钟摘要请求数可以通过 increase(( 函数计算:
sum(increase(http_requests_total[1m]))
查询使用 sum(( 函数聚合所有路径和状态代码中每分钟的请求数。
以下查询返回每个path
每分钟的请求数:
sum(increase(http_requests_total[1m])) by (path)
以下查询返回所有路径中每分钟失败的 http 请求的摘要数:
sum(increase(http_requests_total{status=~"[45].."}[1m]))
以下查询每分钟返回每path
失败的 http 请求数:
sum(increase(http_requests_total{status=~"[45].."}[1m])) by (path)
有时,计算所有请求中失败请求的百分比可能很有用。这可以通过以下查询完成:
100 * (
sum(increase(http_requests_total{status=~"[45].."}[1m]))
/
sum(increase(http_requests_total[1m]))
)
每个路径失败请求的百分比:
100 * (
sum(increase(http_requests_total{status=~"[45].."}[1m])) by (path)
/
sum(increase(http_requests_total[1m])) by (path)
)
请注意,即使http_requests_total
时间序列仅包含整数值,Prometheus 也可能从函数返回increase()
分数结果。这是由于所选的数据模型 - 有关详细信息,请参阅此问题和此注释。