有关prometheus监控系统(一)
prometheusprometheus基本介绍prometheusprometheus基本介绍Prometheus 是由 SoundCloud 开源监控告警解决方案,是由谷歌研发的一款开源的监控软件,目前已经被云计算本地基金会托管,是继k8s托管的第二个项目。prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。优点:易于管理轻易获取服务内部状态高
prometheus
prometheus基本介绍
Prometheus 是由 SoundCloud 开源监控告警解决方案,是由谷歌研发的一款开源的监控软件,目前已经被云计算本地基金会托管,是继k8s托管的第二个项目。
prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。
优点:
易于管理
轻易获取服务内部状态
高效灵活的查询语句
支持本地和远程存储
采用http协议,默认pull模式拉取数据,也可以通过中间网关push数据
支持自动发现
可扩展
易集成
prometheus根据配置定时去拉取各个节点的数据,默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。将获取到的数据存入TSDB,一款时序型数据库。此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。它的报警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和发送报警的一个组件。prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。
prometheus
prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。
时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。
-
metric名字:表示metric的功能,如http_request_total。时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*, 其名字应该具有语义化,一般表示一个可以度量的指标,例如 http_requests_total, 可以表示 http 请求的总数。
-
样本:按照某个时序以时间维度采集的数据,称之为样本。实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳
一个 float64 值
一个毫秒级的 unix 时间戳 -
格式:Prometheus时序格式与OpenTSDB相似:
<metric name>{<label name>=<label value>, ...}
Metric类型:
-
Counter: 一种累加的metric,如请求的个数,结束的任务数,出现的错误数等
-
Gauge: 常规的metric,如温度,可任意加减。其为瞬时的,与时间没有关系的,可以任意变化的数据。
-
Histogram: 柱状图,用于观察结果采样,分组及统计,如:请求持续时间,响应大小。其主要用于表示一段时间内对数据的采样,并能够对其指定区间及总数进行统计。根据统计区间计算
-
Summary: 类似Histogram,用于表示一段时间内数据采样结果,其直接存储quantile数据,而不是根据统计区间计算出来的。不需要计算,直接存储结果
PromQL
PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言。
查询结果类型:
-
瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total
-
区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如:http_requests_total[5m]
-
纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如:count(http_requests_total)
查询条件:通过名称及标签进行查询,如http_requests_total等价于{name=“http_requests_total”}
查询level="info"的event: logback_events_total{level=“info”}
查询条件支持正则匹配:
http_requests_total{code!="200"} // 表示查询 code 不为 "200" 的数据
http_requests_total{code=~"2.."} // 表示查询 code 为 "2xx" 的数据
http_requests_total{code!~"2.."} // 表示查询 code 不为 "2xx" 的数据
内置函数:
- 如将浮点数转换为整数:
floor(avg(http_requests_total{code="200"}))
ceil(avg(http_requests_total{code="200"}))
- 查看每秒数据 :
rate(http_requests_total[5m])
基本查询:
1.查询当前所有数据
logback_events_total{level=~"in.."}
logback_events_total{level=~"in.*"}
2.模糊查询: level=“inxx”
logback_events_total{level=~"in.."}
logback_events_total{level=~"in.*"}
3.比较查询: value>0
logback_events_total > 0
4.范围查询: 过去5分钟数据
logback_events_total[5m]
时间范围单位有以下:
-
s: 秒
-
m: 分钟
-
h: 小时
-
d: 天
-
w: 周
-
y: 年
在瞬时向量表达式或者区间向量表达式中,都是以当前时间为基准。
如果想查询5分钏前的瞬时样本数据,则需要使用位移操作,关键字:offset, 其要紧跟在选择器{}后面。如:
sum(http_requests_total{method="GET"} offset 5m)
rate(http_requests_total[5m] offset 1w)
聚合、统计高级查询:
-
count查询: count(logback_events_total)
-
sum查询: sum(logback_events_total)
-
svg查询:
-
topk: 如查询2的值:topk(2, logback_events_total)
-
irate: 如查询过去5分钟的平均值: irate( logback_events_total[5m])
更多推荐
所有评论(0)