Prometheus是一个开源的系统监控以及报警系统,整合zabbix的功能,系统,网络,设备
Prometheus可以兼容网络,设备,容器监控,告警系统,因为他和k8s是一个项目基金开发的产品,天生匹配k8s的原生系统,容器化和云原生适配性很高
Prometheus是一个服务监控系统和时序数据库,提供了通用的数据模型和快捷的数据采集,存储和接口查询
核心组件 :Prometheus server定期从静态配置的监控目标或者基于服务发现的自动配置目标中进行拉取数据,拉取到数据会持久化的保存到存储设备之中
先拉取数据,纳入到监控系统当中,才能进行时序数据采集,存储,告警和展示
能够直接把api server作为服务发现服务系统使用,动态监控,动态发现
1、多维的数据模型,根据不同的函数计算方法,对同一数据可以做出不同的结论(promQL)
2、时间序列的数据,按照时间顺序纪录系统,设备变化的数据,容器化的数据,每个数据都是一个样本
服务指标数据,应用程序的性能监控,网络数据都是时间序列数据
3、通过静态,也可以通过服务自动发现收集数据
4、Prometheus自带的原生数据展示不是很友好,数据化展示工具,grafana
TSDB
1、能够存储的数据量很庞大
2、大部分都是写入操作
3、写入操作是一个时序添加,大多数情况下都是按照时间排列
4、很少更新数据,采集到数据在秒级,或者分钟级就会写入数据库
5、基本数据大,一般超过了内存大小,数据按照一定的时间区间展示,缓存在这里不起作用
6、读操作,一般都是高并发的操作
7、就是为了大数据,高并发而生的
核心组件
1、服务核心组件,采用pull方式采集监控数据,通过http协议进行传输,存储时间序列的数据,基于告警规则生成告警通知
Prometheus server是核心,核心分为三部分
1、retrieval 负责在目标主机抓取监控指标数据
2、storage 存储,把采集的数据保存磁盘当中,默认只保存15天
3、promQL 负责把数据按照一定的规则,通过指定的语法形成一个结果,最后展示出来(grafana)
2、exports负责在节点收集数据,Node-Exports服务收集服务器节点的状态数据,CPU,内存,网络,磁盘等等都是他收集,默认端口9100
3、client Library客户端库,用于应用程序的内部测量系统,内部测试
4、cadvisor监控容器内部的资源信息,但是k8s从1.20之后自带这个部分组件
5、blacbox-exporter监控业务容器的存活性(一般不用)
6、altermanager告警管理,独立的告警模块,从Prometheus server收到告警通知之后,altermanager进行重组,分类,发送到对应的接收方
电子邮件 钉钉 企业微信
7、pushgatway类似于一个中转站,server端只会pull的方式拉取数据,节点的数据只能以上传(push)的方式发送,先把数据源保存在pushgatway,Prometheus server统一从pushgatway拉取数据
8、grafana图形化工具
1、Prometheus server为核心,收集和存储数据(时间序列数据),从监控目标中通过pull的方式拉取数据或者pushgateway把采集的数据,拉去到server当中
2、拉取到的数据,保存到本地的磁盘当中(监控指标数据)
3、如果监控的指标数据触发了告警,发送到altermanager模块,然后根据规则发送告警信息
4、通过Prometheus的自带的uiweb页面,通过promQL可以查询出监控用户数据
5、grafana可以介入Prometheus的数据源,把监控的数据以图形化的方式展示出来
1、Prometheus只是一款监控系统,不适合存储时间,也不适合保存日志,更多的是一种趋势性的监控和展示,并非是一个精准的数据
2、认为最近的数据才有查询的需要,保存在本地的数据默认只有15天,不支持大量的历史数据进行存储,也不支持查询过往的历史数据,基于远端存储,上传到influxDB或者openTSDB系统
3、集群化程度不高,一般都是单节点部署
zabbix:大而全系统,而且功能非常完善,机制非常成熟,具有完善的web页面,可视化和告警,在zabbix界面上可以满足绝大部分的操作,上手难度很低,可以快速掌握,集成符太高,定海比较难,扩展也比较差
Prometheus:最近几年比较火的监控系统,基于go语言开发的只是专注于监控的功能,提供一个简单的ui界面供用户查询,可视化-----grafana,告警---altermanager,第三方程序来实现,比较小巧灵活,但是门槛高
zabbix的指标收集方式:server和Agent,Agent部署在目标服务器,数据传送到server,基于tcp进行通信
Agent把数据推送到server,或者server主动发起请求,获取Agent的数据
Prometheus:基于客户端进行数据收集,server端定时于客户端交互,通过pull当时获取监控数据
zabbix使用外部的数据来保存数据
Prometheus存储内置的TSDB当中,时间序列数据库
1、zabbix的查询性能较弱,只能在web界面做一些有限的操作
2、Prometheus的查询功能强大,自带查询语句,查询结果都是以图形,表格数据展示
zabbix更成熟,上手难度低,对于传统的服务器,系统和网络都有优秀的监控能力,不适配云原生,不适配容器监控
Prometheus就是容器化监控,支持k8s的监控功能,难,不好学,promQL
把源码包拖到指定的目录
prometheus-2.45.0.linux-amd64.tar.gz
解压
tar -xf prometheus-2.45.0.linux-amd64.tar.gz
mv
scrape_interval:15s
采集数据的间隔时间,默认是一分钟 15s
evaluation_interval:15s
告警的间隔时间,默认也是1分钟 15s
scrape_timeout数据采集的超过时间,默认10s
altering:
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
配置告警模块
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
参数时序数据的源,配置采集的主机,静 动态
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: "prometheus"
每一个监控实例都是以-job_name来表示整体的集合
# metrics_path defaults to '/metrics'
指标数采集的默认路径
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
静态目标配置,固定从某个target拉取数据
vim /usr/lib/systemd/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
添加系统服务
systemctl daem-load
systemctl restart Prometheus
页面访问
20.0.0.70:9090
部署exports,添加监控主机
把源码包拖到指定目录
node_exporter-1.5.0.linux-amd64.tar.gz
解压
tar -xf node_exporter-1.5.0.linux-amd64.tar.gz
把解压的文件拖到系统目录下
mv node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin
把node_exporter添加到系统服务
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl start node_exporter
systemctl enable node_exporter
netstat -natp | grep :9100
修改 prometheus 配置文件,加入到 prometheus 监控中
vim /usr/local/prometheus/prometheus.yml
#在尾部添加
- job_name: "nodes"
metrics_path: "/metrics"
static_configs:
- targets:
- 20.0.0.70:9100
- 20.0.0.71:9100
- 20.0.0.72:9100
labels:
service: kubernetes
保存退出之后重新加载
systemctl reload prometheus
以上操作在三个节点上都要部署
页面访问
部署图形化工具(grafana)
把源码包拖到指定的目录
grafana-enterprise-7.5.11-1.x86_64.rpm
解压
rpm -ivh grafana-enterprise-7.5.11-1.x86_64.rpm
systemctl restart grafana-server.service
systemctl enable grafana-server.service
netstat -antp | grep 3000
页面访问
20.0.0.70:3000
默认账号密码
admin
修改密码(自定义)
创建用户
下载模版