目录
目录
目录
前言
Prometheus的相关知识
Prometheus特点
Prometheus的存储引擎:TSDB
Prometheus的组件
1.核心组件:prometheus server
Prometheus server又分为三个部分:
2.exports
3.client Library
4.cadvisor
5.blackbox-exporter
6.Altermanager:
7.pushgateway:
8.grafana
Prometheus
Promethues的局限性,以及和zabbix的对比
二者之间功能的比较:
数据存储
查询性能:
总结而言:
Prometheus的部署和搭建
(1)上传 prometheus-2.35.0.linux-amd64.tar.gz,并解压
(2) 将Prometheus加入到系统服务
(3)进行界面访问
部署 Exporters ,添加监控主机
部署 Node Exporter 监控系统级指标(对每一个node节点)
(1)上传 node_exporter-1.3.1.linux-amd64.tar.gz 进行解压
(2)将 node_exporter添加到系统服务中
(3)修改 prometheus 配置文件,加入到 prometheus 监控中
安装grafana---可视化工具
添加服务
前言
prometheus是一个开源的系统监控以及报警系统。整合zabbix的功能,系统,网络,设备。
promethues可以兼容网络,设备。容器监控。告警系统。因为他和k8s是一个项目基金开发的产品,天生匹配k8s的原生系统。容器化和云原生服务适配性很高。
Prometheus是一个服务监控系统和时序数据库,提供了通用的数据模型和快捷数据采集,存储和接口查询。
核心组件: Prometheus server定期从静态配置的监控目标或者基于服务发现的自动配置目标中进行拉取数据。
拉取到数据会持久化的保存到存储设备之中。
先拉取数据,纳入到监控系统当中,才能进行时序数据采集,存储,告警和展示。
Prometheus的相关知识
Prometheus特点
1.多维的数据模型。根据不同的函数计算方法,对统一数据可以做出不同的结论。
2.时间序列的数据,按照时间的顺序记录系统,设备变化的数据,容器化的数据。每个数据都是一个样本。
服务器指标数据,应用程序的性能监控,网络数据都是时间序列数据
3.通过静态,也可以通过服务自动发现收集数据。
4.Prometheus自带的原生数据展示不是很友好,数据化展示工具,grafana
Prometheus的存储引擎:TSDB
1.能够存储的数量很庞大
2.大部分都是写入操作
3.写入操作是一个时序添加,大多数情况都是按照时间排列
4.很少更新数据,采集到的数据在秒级或者分钟级,就会被写入数据库
5.基本数据大,一般超过了内存的大小。数据按照一定的时间区间展示,缓存在这里不起作用。
6.读操作一般的都是高并发的操作。
7.就是为了大数据,高并发而生。
他是一个实时,动态的数据
Prometheus的组件
1.核心组件:prometheus server
服务核心组件,采用pull方式采集监控数据,通过http协议进行传输,存储时间序列的数据。基于告警规则生成告警通知。
Prometheus server又分为三个部分:
-
retrieval:负责在目标主机抓取监控指标数据
-
Storage:存储,将采集到的数据保存到磁盘当中(默认保留15天)
-
PromQL:负责把数据按照一定的规则,通过指定的语法展示出来,形成一个结果,最后展示出来(grafana)
2.exports
负责在节点收集数据,Node-Exports服务收集服务器节点的状态数据,CPU,内存,网络,磁盘等都是他收集,(默认端口:9100)
3.client Library
客户端库,用于应用程序的内部测量系统,内部测试
4.cadvisor
监控容器内部的资源信息,但是k8s从1.20之后自带这个部分组件。
5.blackbox-exporter
监控业务容器的存活性。(一般不用)
6.Altermanager:
独立的告警模块,从prometheus server收到告警通知,Altermanager进行重组分类,发送到对应的接收方(电子邮件,钉钉,企业微信)
7.pushgateway:
类似于一个中转站,server端只会使用pull的方式拉取数据,节点的数据只能以上传(push)的方式发送,先把数据源保存在pushgateway ,Prometheus server统一从pushgatewayy拉取数据
8.grafana
图形化工具
Prometheus
1.Prometheus server为核心,收集和存储数据(时间序列数据),从监控目标中通过pull方式拉取数据。或者是pushgateway把采集到的数据,拉取到server当中。
2.拉取到的数据保存到本地的磁盘当中。(监控指标数据)
3.如果监控的指标数据触发了告警,发送到altermanager模块,然后根据规则发送告警信息。
4.通过promethues的自带uiweb界面,通过promql可以查询出监控数据
5.grafana可以接入promethues数据源,把监控数据以图形化的数据以图形化的方式展示出来。
Promethues的局限性,以及和zabbix的对比
1.只是一款指标监控系统,不适合 存储事件,也不适合保存日志,更多的是一种趋势性的监控和展示,并非是一个精准的数据。
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.promethues的查询功能强大,自带查询语句。查询结果都是以图形,表格数据展示。
总结而言:
zabbix更成熟,上手难度低,对于传统的服务器,系统和网络都有优秀的监控能力。不适配云原生,不适配容器监控。
Prometheus就是容器化监控。支持k8s的监控功能。但是难,不好学
Prometheus的部署和搭建
(1)上传 prometheus-2.35.0.linux-amd64.tar.gz,并解压
cd /opt/prometheus
tar xf prometheus-2.35.0.linux-amd64.tar.gz
mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus
cat /usr/local/prometheus/prometheus.yml | grep -v "^#"
global: #用于prometheus的全局配置,比如采集间隔,抓取超时时间等
scrape_interval: 15s #采集目标主机监控数据的时间间隔,默认为1m
evaluation_interval: 15s #触发告警生成alter的时间间隔,默认是1m
# scrape_timeout is set to the global default (10s).
scrape_timeout: 10s #数据采集超时时间,默认10s
altering: #用于altermanager实例的配置,支持静态配置和动态服务发现的机制
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=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus" #每个被监控实例的集合用job_name命名,支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs)
# metrics_path defaults to '/metrics'
metrics_path: '/metrics' #指标数据采集路径,默认为 /metrics
# scheme defaults to 'http'.
static_configs: #静态目标配置,固定从某个target拉取数据
- targets: ["localhost:9090"]
(2) 将Prometheus加入到系统服务
cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[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
EOF
systemctl start prometheus
systemctl enable prometheus
netstat -natp | grep :9090
(3)进行界面访问
浏览器搜索 ip:9090
部署 Exporters ,添加监控主机
部署 Node Exporter 监控系统级指标(对每一个node节点)
(1)上传 node_exporter-1.3.1.linux-amd64.tar.gz 进行解压
(2)将 node_exporter添加到系统服务中
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[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
EOF
(3)启动
systemctl start node_exporter
systemctl enable node_exporter
netstat -natp | grep :9100
(3)修改 prometheus 配置文件,加入到 prometheus 监控中
vim /usr/local/prometheus/prometheus.yml
#在尾部增加如下内容
- job_name: nodes
metrics_path: "/metrics"
static_configs:
- targets:
- 20.0.0.61:9100
- 20.0.0.62:9100
- 20.0.0.63:9100
labels:
service: kubernetes
(5)重新载入配置
curl -X POST http://20.0.0.61:9090/-/reload 或 systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets
安装grafana---可视化工具
下载地址:https://grafana.com/grafana/download
https://mirrors.bfsu.edu.cn/grafana/yum/rpm/
yum install -y grafana-7.4.0-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
netstat -natp | grep :3000
浏览器访问:http://20.0.0.61:3000 ,默认账号和密码为 admin/admin