【问题标题】:How to make this query using Prometheus?如何使用 Prometheus 进行此查询?
【发布时间】:2017-02-07 10:10:42
【问题描述】:

我真的是 Prometheus 的新手,目前我想对查询进行一些测试以更加熟悉它。

所以使用查询 container_last_seen[10s] 它会返回一个数组:

container_last_seen{container_label_com_docker_compose_config_hash="dc8a2ab1347ad16ab37ff0ad03f3a00f86b381ea2d85d45a11367331526c3640",container_label_com_docker_compose_container_number="1",container_label_com_docker_compose_oneoff="False",container_label_com_docker_compose_project="dockprom",container_label_com_docker_compose_service="cadvisor",container_label_com_docker_compose_version="1.10.0",container_label_org_label_schema_group="monitoring",id="/docker/2b448d19a33b50411941a55435b03f5a4af19e3b3e9581054a67e4da3363ef19",image="google/cadvisor:v0.24.1",instance="cadvisor:8080",job="cadvisor",name="cadvisor"}  

我只想获取属性name
所以我的想法是做这样的事情:

container_last_seen[10s][name]

但是我有一个解析错误。那么我该如何进行这个查询呢?

【问题讨论】:

    标签: database grafana prometheus


    【解决方案1】:

    出于此目的,这似乎有点违反直觉,但aggregation operators 允许使用bywithout 子句减少标签。

    sum by(name) (container_last_seen{..criteria..})
    

    应该通过仅返回名称键的对象来让您更接近您想要的。

    我认为你想要更进一步 - 你不想要值并且你不想要对象部分 - 你只想要字符串。不幸的是,Prometheus 处理可以有标签的数字指标,特别是字符串指标。

    虽然它需要额外的软件,但它是 Prometheus 官方推荐的,所以我会在这里提到它,因为它让您非常接近我认为您想要的解决方案:

    如果您要在 Grafana 中绘制该查询图表,无论是使用所有键还是仅使用名称键,图例格式 {{name}} 应该会得到您想要的。 Grafana 还提供了label_values 来帮助实现过滤方面的目的。

    最后,如果这对您来说不是正确的方向,那么对于密集的基于字符串的指标,ELK/EFK 堆栈可能更适合。像 prometheus-es-exporter 这样的项目可以将 ElasticSearch 查询的结果报告为指标。

    【讨论】:

    • 这么好的和完整的答案!是的,目标是在 Grafana 中显示所有名称。现在我对 Prometheus 和 Grafana 更有信心了,因为我使用了 2 个月。谢谢你的好意见
    • 我的荣幸!我很高兴你想要 Grafana 的方向。它们真的是很棒的工具,只有当我们越过学习曲线时才会变得更好。 :) 显然我切断了答案的结尾,所以我要重新编辑它。
    【解决方案2】:

    这是不可能的,因为像“名称”这样的标签与指标值是分开的。您应该查看 query 和 query_range 端点返回的 JSON 以了解它是如何公开的。

    【讨论】:

    • 我真的不明白你的答案的结尾,但为什么我无法访问查询返回的标签?它返回我一个 JSON 对象,所以我应该能够访问项目没有?
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2020-12-17
    • 2013-05-15
    • 1970-01-01
    • 2013-05-30
    • 2013-02-20
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多