如何使用 Prometheus 进行此查询?
How to make this query using Prometheus?
我是 Prometheus 的新手,目前我想对查询进行一些测试,以便更加熟悉它。
所以对于查询 container_last_seen[10s]
它 returns 我是一个数组 :
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]
但是我有一个解析错误。那么我该如何进行查询呢?
这是不可能的,因为像 'name' 这样的标签与指标值是分开的。您应该查看 JSON 查询和 query_range 端点 return 以了解这是如何公开的。
这似乎有点违反直觉,但 aggregation operators 允许使用 by
和 without
子句减少标签。
sum by(name) (container_last_seen{..criteria..})
应该通过返回仅包含名称键的对象来让您更接近您想要的东西。
我认为您想要更进一步——您不需要值,也不需要对象部分——您只需要字符串。不幸的是,Prometheus 处理可以带有标签的数字指标,特别是不处理字符串指标。
虽然它需要额外的软件,但它是 Prometheus 官方推荐的,所以我会在这里提到它,因为它让你非常接近我认为是你想要的解决方案:
如果您要在 Grafana 中绘制该查询的图表,无论是使用所有键还是仅使用名称键,图例格式 {{name}}
应该都能满足您的需求。 Grafana 还提供 label_values 来帮助实现此目的的过滤。
最后,如果这不是您的正确方向,对于密集的基于字符串的指标,ELK/EFK 堆栈可能更合适。像 prometheus-es-exporter 这样的项目可以将 ElasticSearch 查询的结果报告为指标。
我是 Prometheus 的新手,目前我想对查询进行一些测试,以便更加熟悉它。
所以对于查询 container_last_seen[10s]
它 returns 我是一个数组 :
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]
但是我有一个解析错误。那么我该如何进行查询呢?
这是不可能的,因为像 'name' 这样的标签与指标值是分开的。您应该查看 JSON 查询和 query_range 端点 return 以了解这是如何公开的。
这似乎有点违反直觉,但 aggregation operators 允许使用 by
和 without
子句减少标签。
sum by(name) (container_last_seen{..criteria..})
应该通过返回仅包含名称键的对象来让您更接近您想要的东西。
我认为您想要更进一步——您不需要值,也不需要对象部分——您只需要字符串。不幸的是,Prometheus 处理可以带有标签的数字指标,特别是不处理字符串指标。
虽然它需要额外的软件,但它是 Prometheus 官方推荐的,所以我会在这里提到它,因为它让你非常接近我认为是你想要的解决方案:
如果您要在 Grafana 中绘制该查询的图表,无论是使用所有键还是仅使用名称键,图例格式 {{name}}
应该都能满足您的需求。 Grafana 还提供 label_values 来帮助实现此目的的过滤。
最后,如果这不是您的正确方向,对于密集的基于字符串的指标,ELK/EFK 堆栈可能更合适。像 prometheus-es-exporter 这样的项目可以将 ElasticSearch 查询的结果报告为指标。