目录
Promethues简介:
prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundcloud以开源形式进行研发,并且与2015年早起对外发布早期版本。 2016年5月继kubernetes之后成为第二个加入CNCF基金会的项目,同年6月正式发布1.0版本。2017年底发布基于全兴存储层的2.0版本,能更好地与容器平台、云平台配合。
Promethues优势:
prometheus是基于一个开源的完整监控方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。
相对传统的监控系统有如下几个优点:
- 易于管理: 部署使用的是go编译的二进制文件,不存在任何第三方依赖问题,可以使用服务发现动态管理监控目标。
- 监控服务内部运行状态: 我们可以使用prometheus提供的常用开发语言提供的client库完成应用层面暴露数据, 采集应用内部运行信息。
- 强大的查询语言promQL: prometheus内置一个强大的数据查询语言PromQL,通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如grafana)以及告警中的。
- 高效: 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。 而Prometheus可以高效地处理这些数据。
- 可扩展: prometheus配置比较简单, 可以在每个数据中心运行独立的prometheus server, 也可以使用联邦集群,让多个prometheus实例产生一个逻辑集群,还可以在单个prometheus server处理的任务量过大的时候,通过使用功能分区和联邦集群对其扩展。
- 易于集成: 目前官方提供多种语言的客户端sdk,基于这些sdk可以快速让应用程序纳入到监控系统中,同时还可以支持与其他的监控系统集成。
- 可视化: prometheus server自带一个ui, 通过这个ui可以方便对数据进行查询和图形化展示,可以对接grafana可视化工具展示精美监控指标。
Promethues优缺点:
优点:
- 基于时间序列模型,时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而形成的序列 ,时间序列分析的主要目的是根据已有的历史数据对未来进行预测。
- 基于K V的数据模型
- 采样数据的查询,完全基于数学运算
- 采用HTTP pull/push两种对应的数据采集传输方式
- 本身自带图形调试
缺点:
- 因其数据采集的精度 如果集群数量太⼤,那么单点的监控有性能瓶颈
- 对磁盘资源也是耗费的较⼤,这个具体要看 监控的集群量 和 监控项的多少 和保存时间的长短
Promethues核心组件:
Prometheus-server:
Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
exporters:
exporter简单说是采集端,通过http服务的形式保留一个url地址,prometheus server 通过访问该exporter提供的endpoint端点,即可获取到需要采集的监控数据。
exporter分为2大类:
- 直接采集:这一类exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes等。原生监控
- 间接采集: 原有监控目标不支持prometheus,需要通过prometheus提供的客户端库编写监控采集程序,例如Mysql Exporter, JMX Exporter等。 非原生监控
AlertManager:
在prometheus中,支持基于PromQL创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入AlertManager进行处理。可以集成邮件,Slack或者通过webhook自定义报警。
PushGateway:
pushgateway是另一种数据采集的方式,采用被动推送来获取监控数据的
Promethues架构图:

Prometheus工作流程:
- 指标采集:prometheus server 通过 pull 形式采集监控指标,可以直接拉取监控指标,也可以通过 pushgateway 做中间环节,监控目标先 push 形式上报数据到 pushgateway;
- 指标处理:prometheus server 将采集的数据存储在自身 db 或者第三方 db;
- 指标展示:prometheus server 通过提供 http 接口,提供自带或者第三方展示系统;
- 指标告警:prometheus server 通过 push 告警信息到 alert-manager,alert-manager 通过"静默-抑制-整合-下发"4个阶段处理通知到观察者。
pull和pash的区别:
pull模式:客户端使用library,变成exporter,然后prometheus server定时从exporter pull数据。
push模式:使用pushgateway,所有客户端push数据到pushgateway,然后prometheus server定时从pushgateway pull数据。
比较:
push模式的缺点:采用pushgateway的方式,如果某一个上报方挂了,pushgateway无法感知上报方的状态,所以这时候如果不做任何操作,那么prometheus依旧会从pushgateway中获取到旧的、不正确的数据。
pull的优点:采用exporter的方式,如果某一个exporter挂掉了,那么prometheus就pull不到数据,那么时序数据库没有新的数据产生。这是正确的。
Prometheus的四种数据类型:
- counter (只增不减 计数)
- Gauge (常规数值 可变化大小)
- histogram (柱状图 小于上边界的 总数与次数)
- summary (分位数 小于自定义值的百分比 总数与次数)
Promethues实验:
实验环境:
| 主机名称 | Ip地址 | 安装软件 |
| prometheus | 192.168.100.2 | prometheus |
实验过程:
在prometheus的官网的download页面,可以找到prometheus的下载二进制包。


# 上传包并解压
tar zxvf prometheus-2.43.0-rc.0.linux-amd64.tar.gz
#移动到/usr/local/promethues
mv prometheus-2.43.0-rc.0.linux-amd64 /usr/local/promethues/
#cd进去
cd /usr/local/promethues/
#Promtheus作为一个时间序列数据库,其采集的数据会以文件的形似存储在本地中,默认的存储路径为data/,因此我们需要先手动创建该目录:
mkdir data
#将prometheus、promtool软连接到/usr/local/sbin
ln -sv prometheus /usr/local/sbin/
ln -sv promtool /usr/local/sbin/
#创建用户
useradd -s /sbin/nologin prometheus
chown -R prometheus:prometheus /usr/local/prometheus/
#cd到/usr/lib/systemd/system
cd /usr/lib/systemd/system
#编写启动脚本
[Unit]
Description=prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target
#重载
systemctl daemon-reload
#启动
systemctl enable prometheus.service --now
#查看端口号9090
netstat -anpt |grep 9090
访问192.168.100.2:9090

默认情况下prometheus会将采集的数据存储到本机的data目录, 存储数据的大小受限和扩展不便,这时使用influxdb作为后端的数据库来存储数据。
#下载
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
#安装
yum -y install influxdb-1.7.8.x86_64.rpm
#备份influxdb
cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
#启动
systemctl enable influxdb --now
登录查看:输入influx

#创建prometheus库
create database prometheus;
#查看
show databases;
#退出
exit
配置prometheus集成influxdb:
官方的帮助文档在这里:Prometheus endpoints support in InfluxDB | InfluxDB OSS 1.7 Documentation
#备份配置文件
cp /usr/local/prometheus/prometheus.yml /usr/local/prometheus/prometheus.yml.bak
#编辑配置文件
vim /usr/local/prometheus/prometheus.yml
#末尾添加,意义是将prometheus的数据保存到prometheus数据库
remote_write:
- url: "http://localhost:8086/api/v1/prom/write?db=prometheus"
remote_read:
- url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
#重启prometheus
systemctl restart prometheus
注意: 如果influxdb配置有密码, 请参考上面的官方文档地址进行配置。
进入influx数据库查看prometheus库是否有数据
influx
use prometheus;
show MEASUREMENTS;


select * from scrape_series_added limit 5 ;

配置文件详解:


Prometheus是一个开源监控解决方案,源自Google的Borgmon系统,现为CNCF项目。它以其易于管理、强大的PromQL查询语言、高效性和可扩展性著称。Prometheus核心组件包括服务器、exporters、AlertManager和PushGateway。工作流程涉及拉取(pull)和推送(push)数据,支持多种数据类型如counter、gauge、histogram和summary。实验环境展示了如何安装和配置Prometheus,包括集成InfluxDB作为远程存储。
2460

被折叠的 条评论
为什么被折叠?



