具有相关字段但标签不同的 promql 示例
Posted
技术标签:
【中文标题】具有相关字段但标签不同的 promql 示例【英文标题】:promql example with related fields but different labels 【发布时间】:2019-08-18 10:58:49 【问题描述】:我正在使用 Prometheus 和 Grafana,并且正在尝试跟踪 Web 服务器应用。
我想绘制特定查询的平均持续时间(以毫秒为单位)。我想我可以从下面的数据中到达那里,但我很挣扎。
我的两组价值观:
rate(http_server_request_duration_seconds_sum[5m])
Element Value
instance="dbserver:5000",job="control-tower",method="get",path="/api/control/v1/node/config.json" 0.0010491088980113385
instance="dbserver:5000",job="control-tower",method="get",path="/api/schedule/v1/programs/:id.json" 0
instance="dbserver:5000",job="control-tower",method="get",path="/api/schedule/v1/users.json" 0
instance="dbserver:5000",job="control-tower",method="get",path="/metrics" 0.00009133616130826839
instance="dbserver:5000",job="control-tower",method="post",path="/api/caption/v1/messages.json" 0
instance="dbserver:5000",job="control-tower",method="post",path="/api/caption/v1/sessions.json" 0
instance="dbserver:5000",job="control-tower",method="post",path="/api/schedule/v1/programs.json" 0
instance="dbserver:5000",job="control-tower",method="put",path="/api/caption/v1/sessions/captioners.json" 0
instance="dbserver:5000",job="control-tower",method="put",path="/api/control/v1/agents/:id.json"
rate(http_server_requests_total[5m])
Element Value
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="get",path="/api/control/v1/node/config.json" 0.03511075688258612
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="get",path="/api/schedule/v1/programs/:id.json" 0
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="get",path="/api/schedule/v1/users.json" 0
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="get",path="/metrics" 0.06671043807691363
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="post",path="/api/caption/v1/sessions.json" 0
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="post",path="/api/schedule/v1/programs.json" 0
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="put",path="/api/caption/v1/sessions/captioners.json" 0
code="200",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="put",path="/api/control/v1/agents/:id.json" 0
code="422",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="post",path="/api/schedule/v1/programs.json" 0
code="502",host="dbserver:5000",instance="dbserver:5000",job="control-tower",method="post",path="/api/caption/v1/messages.json"
他们有不同的标签。为此,我只关心 path="/api/caption/v1/messages.json" 的位置。
我认为我需要使用 rate、sum 和“on”或“ignore”的组合,但我根本无法继续或忽略工作。
我可以得到分子(以秒为单位):
rate( http_server_request_duration_seconds_sum path="/api/caption/v1/messages.json" [5m])
然后返回:
instance="dbserver:5000", job="control-tower", method="post", path="/api/caption/v1/messages.json"
但是分母可以有不同的返回码,所以我必须将它们相加,并且我需要做一些忽略或打开或其他操作,但我还没有找到可以帮助我的示例,而且我真的很新在这。
有人吗?
【问题讨论】:
【参考方案1】:好的,我继续玩。因为我只担心一条路,所以我想我可以总结费率。我认为这可行:
sum( rate( http_server_request_duration_seconds_sum path="/api/caption/v1/messages.json"[2h])) / sum( rate( http_server_requests_total path="/api/caption/v1/messages.json"[2h]))
我更改了采样率,因为我的样本数据超出了 5 分钟的窗口,结果为零。
我认为这是在对费率求和,从而消除了所有标签。我认为它也在使用 2 小时的数据。我认为速率值是该值在 2 小时内变化的速度。
我会喜欢 cmets。
如果我希望一个图表包含其他路径,此解决方案将不起作用,我仍然不确定该怎么做,所以这解决了我当前的问题,但仍然无法帮助我弄清楚该怎么做与 ignore 或 on 类似的东西。
【讨论】:
以上是关于具有相关字段但标签不同的 promql 示例的主要内容,如果未能解决你的问题,请参考以下文章
Prometheus 查询 promql 以在同一字段上进行平均