promethues是一个开源的系统监控以及报警系统。整和zabbix的功能,系统,网络,设备promethues可以兼容网络,设备。容器监控。告警系统。因为他和k8s是一个项目基金开发的产品,天生匹配k8s的原生系统。对容器化和云原生服务适配性很高。
prometheus是一个服务监控系统和时序数据库,提供了通用的数据模型和快捷数据采集,存储和接口查询。
核心组件: prometheus server定期从静态配置的监控目标或者基于服务发现的自动配置目标中进行拉取数据。拉取到的数据会持久化的保存到存储设备中
先拉取数据,纳入到监控系统当中,才能进行时序数据采集,存储,告警和展示。
S
10
15
能够直接把api server作为服务发现系统使用。动态监控,动态发现。
Promethues的特点:
1、多维的数据模型
可以根据 不同的函数计算方法,对一个数据进行多维度分析,做出不同的结论
2、时间序列的数据
按照时间的顺序记录系统,设备变化的数据,容器化的数据。每个数据都是一个样本。
服务器指标数据、应用程序的性能监控、网络数据数据 都是时间序列数据
3、通过静态,也可以通过服务自动发现收集数据
4、promethues自带的原生数据展示不是很友好,数据化展示工具,grafana
prometheus的存储引警: TSDB
1、能够存储的数据量很庞大
2、大部分都是写入操作
3、写入操作是一个时序添加,大多数情况下都是按照时间排列
4、很少更新数据,采集到数据在秒级,或者是分钟级就会被写入数据库
5、基本数据大,一般超过了内存的大小
数据按照一定的时间区间展示,缓存在这里不起作用
6、读操作,一般都是高并发操作
7、就是为了大数据,高并发而生的。
prometheus的组件:
核心组件:
prometheus server
服务核心组件,采用pull方式采集监控数据,通过http协议进行传输,存储时间序列的数据。基于告警规则生成告警通知
核心分为三部分:
① retrieval:负责在日标主机抓取监控指标数据
② Storage:存储,把采集的数据保存盘当中,默认只保存15天
③ PromQL:负责把数据按照一定的规则,通过指定的语法形成一个结果,最后展示出来 (grafana)
Node-Exports
exports负责在节点收集数据,Node-Exports负责收集服务器节点的状态数据(CPU,内存,网络,磁盘等等都是他收集),默认端口:9100
client Library 客户端库
用于应用程序的内部测量系统。内部测试
cadvitor
监控容器内部的资源信息.但是K8S从1.20之后自带这个部分的组件
blackbox-exporter
监控业务容器的存活性。(一般不用)
Altermanager
独立的告警模块,从prometheus server 收到告警通知之后,Altermanager进行重组、分类,发送到对应的接受方
电子邮件 钉钉 企业微信
pushgateway
类似于一个中转站,server端只会pull的方式拉取数据,节点的数据只能以上传(push)的方式发送,先把数把源保存在pushgatway,prometheus server统一从pushgatewav拉取数据。
grafana
图形化工具
prometheus的工作流程
1、prometheus server为核心,收集和存储数据(时间序列数据),从监控标中通过pull方式拉取数据。或者通过pushgateway把采集到的数据,拉取到server当中
2、拉取到的数据,保存到本地的磁盘当中。(监控指标数据)
3、如果监控的指标数据触发了告整,发送到altermanager模块,然后根据规则发送告警信息。
4、通过proetheus的自带uiweb页面,通过promql可以查询出监控户数据
5、grafana可以介入prometheus数据源,把监控数据以图形化的方式展示出来
Prometheus的局限性,以及和zabbix的对比:
局限性:
1、只是一款指标监控系统,不适合存储时间,也不适合保存日志,更多的是一种趋势性的监控和展示。并非是一个精准的教据。
2、认为最近的数据才有查询的需要,保存在本地的数据默认只有15天,不支持大量的历史数据进行存储。也不支持查询过往的历史数据。基于远端存储,上传了到influxDB或者openTSDB系统。
3、集群化程度不高,一般都是单节点部暑
概念的对比:
zabbix:大而全系统,而且功能非常完善,机制非常成熟。具有完善的web页面。可视化和告警。在界面上可以满足绝大部分的操作上手难度很低,可以快速掌握。集成度台盖,定制化比较难,扩展也比较差。
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的监控功能。
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
[Service]
Type=simpleExecStart=/opt/prometheus/prometheus \ --config.file=/opt/prometheus/prometheus.yml \
--storage .tsdb .path=/opt/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP SMAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
[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/kil -HUP SMAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
普罗米修斯
prometheus: 就是一个监控,时序数列的图形化监控的工具。不在意数据的持久化,只关注最近的需要查询的数据。更适配k8s集群,当然了,也可以对服务器进行一般监控 (内存,Spu,硬盘,网络。)数据要复现,每天都会出现某种情况,占了大量的cpu等等,这个需要关注但是不是复现的情况,可以不管。
某时刻突然增高,但是可以下降,如无特殊需求,也可以不管。
但是必须记录在案