Prometheus监控系统部署配置
prometheus 相关核心概念
a)、指标
prometheus 所有的监控指标(Metric) 被统一定义为
<metric name >{
<label name>=<label value>,
...
}
prometheus 的每一个时间序列数据都由metric(指标名称)和它的标签(labels)键值对集合唯一确定指标名称: 说明了指标的含义,例如: tcp_request_total 代表 tcp 的请求总数,指标名称必须由字母、数值下画线或者冒号组成,符合正则表达式,如 [a-zA-Z:][a-zA-Z0-9:]*。标签(label) 则用于过滤和聚合;
b)、数据采集
prometheus 采用pull 方式采集监控数据,和采用push 方式采集监控数据不同,
push 方式: agent 主动上报数据,可以将采集的数据立即上报到监控中心,push 方式本地不会保存采集的数据,agent 本身是无状态的服务,master 需要维护各种agent 状态
pull 方式: master 主动拉取 agent 的数据,周期性采集,采集时间为30s 或者更长时间,
agent 本身需要一定的数据存储能力,master 只负责简单的数据拉取
c)、数据处理
prometheus 支持数据处理,主要包括 relabel 、replace、keep、drop
d)、数据存储
prometheus 支持本地存储和远程存储两种方式
e)、数据查询
prometheus 使用promQL 查询
f)、告警
prometheus 本身不会对报警进行处理、需要借助一个组件alertmanager ,prometheus 会配置alertmanager 地址,这样prometheus 发出的告警记录变可以发送到alertmanager 进行处理。
Prometheus通过配置文件中指定的服务发现方式来确定要拉取监控指标的目标(Target),接着从要拉取的目标(应用容器和Pushgateway)发起HTTP请求到特定的端点(Metric Path),将指标持久化至本身的TSDB中,TSDB最终会把内存中的时间序列压缩落到硬盘,除此之外,Prometheus会定期通过PromQL计算设置好的告警规则,决定是否生成告警到Alertmanager,后者接收到告警后会负责把通知发送到邮件或企业内部群聊中。
Prometheus的指标名称:只能由 ASCII 字符、数字、下划线以及冒号组成,而且有一套命名规范:
使用基础Unit(如seconds而非milliseconds)
指标名以application namespace作为前缀,如:
process_cpu_seconds_total
http_request_duration_seconds
用后缀来描述Unit,如:
http_request_duration_seconds
node_memory_usage_bytes
http_requests_total
process_cpu_seconds_total
foobar_build_info
prometheus 组件:
1)prometheus server 端 :
负责定时在目标上抓取metrics(指标)数据,每个抓取目标都需要暴露一个http 服务接口用于 prometheus 定时抓取,这种调用监控对象获取监控数据的方式称为pull
2)prometheus client 端:
为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server
3)Push Gateway:
主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
4)Exporters:
支持如 HAProxy,StatsD,Graphite,Redis 一类的服务;
5)Alertmanager:
从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
安装部署过程
目标:
安装部署prometheus服务监控端
监控一个远端机器
监控一个服务:mysql
docker服务端部署:
1、部署node_exporter数据采集:
docker run -d --name=node