博客
关于我
084、Prometheus 到底NB在哪里?(2019-05-06 周一)
阅读量:798 次
发布时间:2023-04-16

本文共 1155 字,大约阅读时间需要 3 分钟。

Prometheus的多维数据模型:灵活满足监控需求

Prometheus作为一款优秀的开源监控工具,其核心优势在于其强大的多维数据模型。传统的监控方法往往面临着数据过于单一化的困扰,而Prometheus通过层次化的数据模型,能够更灵活地满足各种监控需求。

以内存使用情况监控为例,传统方法通常需要为每个容器定义独立的指标。比如,为了监控容器webapp1的内存使用情况,需要定义指标container_memory_usage_bytes_webapp1,并定期采集数据。然而,当需求扩展到监控所有webapp容器时,就需要定义大量类似的指标(如container_memory_usage_bytes_webapp2、container_memory_usage_bytes_webapp3等),这显然不够高效。

Graphite等更高级的监控方案提出了更优雅的层次化数据模型。通过在指标名称中引入多个维度(dimension),可以一次定义多个指标。例如,定义container.memory_usage_bytes.webapp1、container.memory_usage_bytes.webapp2等指标后,就可以通过container.memory_usage_bytes.webapp*的过滤方式,轻松获取所有webapp容器的内存使用数据。

随着监控需求的不断扩展,用户可能会提出更复杂的查询需求。例如,监控所有镜像版本的webapp容器内存使用情况,或者按运行环境(如生产环境、测试环境)对比某一组容器的内存使用趋势。Prometheus的多维数据模型能够轻松应对这些复杂需求。通过在原始数据中引入更多维度(如image、env等),可以在查询时灵活组合满足不同业务需求。

例如:

  • 获取webapp2的平均内存使用量:avg(container_memory_usage_bytes{container_name="webapp2"})

  • 获取运行镜像webapp1.2的所有容器内存使用总量:sum(container_memory_usage_bytes{image="webapp1.2"})

  • 按运行环境统计webapp容器内存使用总量:sum(container_memory_usage_bytes{container_name="webapp"} by (env))

  • 这种灵活的数据模型不仅能够满足当前业务需求,还能通过引入更多维度(如user等),支持未来可能出现的新查询场景。

    Prometheus的查询语言功能强大,仅仅是avg、sum、by这几个基本聚合函数,便能展示其对多维数据进行分片、聚合的强大能力。这种灵活性使得Prometheus成为现代监控系统的理想选择。

    转载地址:http://tugfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>