如何使用Prometheus进行此查询?

时间:2017-02-07 10:10:42

标签: database grafana 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]

但我有一个解析错误。那我怎么做这个查询呢?

2 个答案:

答案 0 :(得分:1)

这可能看起来有点违反直觉,但aggregation operators允许使用bywithout条款减少标签。

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

通过返回只有名称键的对象,可以让你更接近你想要的东西。

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

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

如果您要使用所有键或只是名称键在Grafana中绘制该查询图表,则图例格式{{name}}应该可以为您提供所需的内容。 Grafana还提供label_values来帮助实现过滤目的。

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

答案 1 :(得分:0)

这是不可能的,因为像'name'这样的标签与指标值是分开的。您应该查看JSON查询和query_range端点返回以查看它是如何公开的。