grafana - 具有相关字段但标签不同的 promql 示例
问题描述
我正在使用 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( 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"}
但是分母可以有不同的返回码,所以我必须将它们相加,我需要做一些忽略或打开或其他事情,但我还没有找到一个可以帮助我的例子,而且我真的很陌生。
任何人?
解决方案
好吧,我继续玩。因为我只担心一条路,所以我想我可以总结费率。我认为这有效:
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 小时内变化的速度。
我很想发表评论。
如果我想要一个图表包含其他路径,此解决方案将不起作用,我仍然不确定该怎么做,所以这解决了我当前的问题,但仍然不能帮助我弄清楚如何做类似的事情忽略或打开。
推荐阅读
- javascript - 如何将数据从组件1内部的方法传递到组件2
- arrays - 如何使用 JOLT 规范从一个根元素向嵌套数组中添加 2 个元素?
- php - 我的网站根文件夹的哪个用户:组能够运行作曲家更新?
- rust - 如何在 Rust 中获取具有条件的可变切片
- android - 在 Retrofit API 中使用 FormUrlEncoded 时发布默认值
- c# - 如何使用 mvvm 管理列表视图行中按钮的可见性?
- php - 如何将数组和变量从 php 发送到 android 应用程序?
- objective-c - 在不同增益的 AVAudioPlayerNode 中调度缓冲区
- reactjs - 无法从后端获取数据
- jquery - 窗口关闭导致错误“未定义”在 jquery 中未定义