2017-02-07 77 views
0

我对Prometheus非常陌生,现在我想对查询做一些测试,使其更熟悉它。因此,与查询container_last_seen[10s]如何使用Prometheus进行查询?

它返回我的数组:

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] 

但我有一个语法错误。那么我怎么能做这个查询呢?

回答

1

为此目的可能看起来有点违反常识,但aggregation operators允许使用bywithout子句减少标签。

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

应该通过仅使用名称键返回对象来让你更接近你想要的东西。

我想你想要更进一步 - 虽然你不想要价值观,你不想要对象的一部分 - 你只是想要字符串。不幸的是,Prometheus处理可以具有标签的数字度量,特别是不包含字符串度量。

虽然它需要额外的软件,它被正式普罗米修斯建议,所以我会,因为它可以让你非常接近我相信在这里提到它是你想要的解决方案:

如果你是用图来Grafana该查询,无论是使用所有按键还是仅使用名称键,图例格式{{name}}都应该能够完全符合您的要求。 Grafana还提供label_values以帮助实现过滤的目的。

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

+1

这样一个不错的和完整的答案!是的,目标是显示格拉法纳所有的名字。自从我用了2个月后,现在我对Prometheus和Grafana更有信心。谢谢你的好意输入 – Jerome

+1

我的荣幸!我很高兴你想要格拉法纳方向。它们是非常棒的工具,只有当我们通过学习曲线时才会变得更好。 :)显然,我切断了我的答案,所以我要编辑回来。 –

0

这是不可能的,因为像'name'这样的标签是独立于度量值的。您应该查看JSON查询和query_range端点以查看它是如何暴露的。

+0

我真的不明白你的答案的结束,但为什么我不能访问查询返回的标签?它返回给我一个JSON对象,所以我应该能够访问项目没有? – Jerome