Metrics

Metrics即为度量,主要用于监控和服务度量。以key-values的方式进行存储。

Metrics支持以下几种类型:

   - Gauges:  某个key的value为特定值。 如Guages(haha, 3), 则haha这个key对应的value即为3.

   - Counter:  某个key的value进行变更。如Counter(haha, +1), 则haha这个key对应的value从3变成了4.

   - Meters:   度量某件事情发生的速率。如,1分钟内调用Meter(haha)5次,则haha这个key对应的value为5/min

Histogram统计数据的分布情况。比如1分钟内调用了很多次update(hehe, x), 则会根据x的计算分布。

   - Timer: Meters & Histogram 的结合。 

 

metrics,底层使用的可以是opentsdb

opentsdb

opentsdb是一个时间序列的数据库。就是一段时间内某些特定指标量的一些列数据点。

这里结合metrics来讲

 

调用顺序:

 1.解析并验证,保证格式正确。

2.扫描底层数据,抓取匹配metric_name&timestamp的数据

3.分组

4.降采样

5.使用特定聚合器聚合每组数据

6.检查是否使用rate

7.返回数据

 

一、降采样

比如metrics 30s一个点,但是当我查询一天或者几天的数据的时候,我觉得30s一个点太多了,我

想5min一个点,就可设置降采样区间为5m。

设置5m,它显示的时间戳表示的是它的时间以及之后5min的值聚合成一个值。

这里可以设置聚合方法,比如使用avg.如原本是30s一个点,那么5min有10个点,那使用avg,就是把这10点的值相加,然后除以10。

 

二、查询过滤器

3.1、literal_or ,或查询,区分大小写。类似sql的in,使用时用|分割

  • host=literal_or(web01|web02|web03),类似于SQL:where host in(‘web01’,’web02’,’web03’)

3.2、iliteral_or 大致同上,不区分大小写。所以效率低,因为他是处理存储中的所有行。

3.3、not_literal_or 类似not in

3.4、not_iliteral_or 同

3.5、wildcard 区分大小写,类似sql的like,host=wildcard(*mysite.com), SQL: where host=’%mysite.com’,使用*

3.6、iwildcard同上 ,不区分大小写

3.9 、regexp 使用正则表达式匹配.例:regexp(web[0-9].com)

 

三、聚合器

这里说下它的存储方式,以metrics为例

我们使用的时候,会设置它的metric_name ,多个(tagk,tagv)对,时间戳,值.

格式类似于:metric_name,tagk1=tagv1,tagk2=tagv2,时间戳,值这种形式

metrics中默认,除了你设置的tag外,会加上host和dc

这里和过滤器配合使用。

当使用降采样后,比如这个时间点有4点,他们的metric_name 和时间戳是一致的。tag不一样,分别是:

1.host=h1,dc=lf value=1 
2.host=h1,dc=hl value=2 
3.host=h2,dc=lf value=3 
4.host=h2,dc=hl value=4

这里,当我们不选择过滤器的时候,默认是出来一条线的,也就是说把这里的4个点聚合成一个点。假设这里使用avg ,那值就是:(1+2+3+4)/4=2.5

 

这里假如我们选择过滤器host,那会出来两条线,分别是h1线和h2线。

这里假如选择avg ,  h1:(1+2)/2=1.5     h2:(3+4)/2=3.5

mertic:metric_name,aggregator,选择聚合方式

dev:求标准差

zimsum:求和,但是少数据的不进行插值,而是用0替代

mimmin:最小值,但是当缺少数据时,会返回数据类型的最大值,比如long.maxvalue

minmax:最大值,但是当缺少数据时,会返回数据类型的最小值,比如long.minvalue

 

alias:线条名,当和filters结合使用的时候,使用$tag_key的方式,可以用filters中的key,作为线条名

 

downsample:降采样,interval:降采样的时间范围,格式有:30s,1m,5m,1h等