多次测量的模式设计

时间:2017-03-01 18:57:57

标签: performance database-schema influxdb collectd

我正在使用collectd和Influxdb。

collectd v5.5允许以百分比形式报告内存和CPU值。 但是,所有百分比值都被写入称为“percent_values”的度量中。测量具有标签type_instance,它具有来自内存(已使用,缓存...)的标签值和来自cpu(idle,user,irq)的标签。

=============================================== ======================= 测量:percent_value

标签:type_instance = [缓存,免费,使用,缓冲,空闲,不错,softirq,窃取,系统,用户...]

字段:值  ================================================== ====================

为什么所有值都写入单个测量而不是进行2次单独测量?以下是否会更有意义或有更好的表现?

=============================================== =======================

测量:mem_percent_value

标签:type_instance = [缓存,免费,使用,缓冲]

字段:值

测量:cpu_percent_value

标签:type_instance = [idle,nice,softirq,steal,system,user ...]

字段:值  ================================================== ====================

就具有良好性能的架构设计而言,使用多个标签值进行单次测量或使用属于测量的标签值进行多次测量更好。我将设计一些新的测量值,我是否应该将它们存储在具有所有标记值的单个测量值中,还是将它们分开?

1 个答案:

答案 0 :(得分:3)

tl; dr使用较少的测量值和标记来表示您需要编制索引的内容,以及其他所有内容的字段。标签必须是字符串。

我建议先阅读关于系列基数https://docs.influxdata.com/influxdb/v1.2/concepts/glossary/#series-cardinality

的内容

与要求您进行大量测量的Graphite施加的约束不同,Influx建议采用较少数量的测量。然后,使用标签来帮助您编写更高性能的查询。关于性能:给定恒定数量的可索引"属性",如果您有许多没有标签的测量,或者很少有多个标签的测量,则无关紧要。换句话说,在任何一种情况下,你都应该以相同的基数结束。

这也是一个有用的部分:https://docs.influxdata.com/influxdb/v1.2/concepts/schema_and_data_layout/#discouraged-schema-design

我将为您提供一个关于JVM内存的具体示例。

  • 选项1:许多测量
    • jvm.memory.heap.used [jmxport = 1099,...] value = 1024
  • 选项2:更少的测量
    • jvm.memory [metric_type = heap,jmxport = 1099,...] value = 1024

这是同样的例子,只是更全面一点 https://github.com/jmxtrans/jmxtrans/wiki/StatsDTelegrafWriter#schema-design