本文概览:如何设计表,合理使用tag和field。

1 建议

1.1 tag和field

在表设计时,最重要的就是哪些字段使用tag保存,哪些使用field来保存。这里有些建议,参考官网:https://docs.influxdata.com/influxdb/v1.3/concepts/schema_and_data_layout/#discouraged-schema-design

  • 出现在where条件中,此时可以使用tag类型来保存此值,如 select * from monitor  where uri=/app/query.json。那么uri应该就是一个tag列。
  • 如果需要进行group操作,此时也需要设置为tag。
  • 如果要用到influx的函数操作,此时需要设置为field。
  • 如果保存值类型为数字类型,不为string,此时使用filed保存,因为tag都是保存字符串类型数据。

综上,指标名称需要使用tag来保存,这样在where条件中使用时查询速度很快。指标有CPU使用信息、http接口信息、jvm信息等。以统计一个接口的成功次数、失败次数、执行时间为例来说明保存方式,

方式1:一个接口的三个指标信息在一行中保存

使用如下命令,在monitor表中保存指标名称为/app/intrest.json,对应的field属性有访问次数sucessCount、平均时间meanTime、失败次数

在查询的weher条件中可以使用如下格式

方式2 对于一个接口三个指标信息,使用三行数据来保存

如下是defaultPage接口的成功访问次数、失败次数和成功时执行时间

比较两种方式

这两种方式都是可以的。都保证where条件中使用了tag。因为tag是有索引的,查询速度特别快。

1.2 database和measurements划分策略

1、每一个服务的监控信息对应一个databases。

2、每一个服务一类监控信息对应一个measuerements,如业务类、JVM类、系统类等,这是因为一类监控信息的需要字段属性是一样的。

在使用Micrometer时,对于一个应用监控信息建立的表有如下:

2 注意事项

1、不要使用tag的like操作,要使用”=”操作。

一般使用like操作时,都是因为建表时,tag没有设计好,上面的问题就是由于使用了如下sql建表,将多个信息放在同一个tag中。

可以通过如下sql进行建表:

此时上面的查询就可以改下为:

分类&标签