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
- Histograms: Histogram统计数据的分布情况。比如1分钟内调用了很多次update(hehe, x), 则会根据x的计算分布。
- Timer: Meters & Histogram 的结合。
metrics,底层使用的可以是opentsdb
opentsdb
opentsdb是一个时间序列的数据库。就是一段时间内某些特定指标量的一些列数据点。
这里结合metrics来讲
调用顺序:
1.解析并验证,保证格式正确。
2.扫描底层数据,抓取匹配metric_name×tamp的数据
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等