目录
前言
一.Prometheus特性
二.Prometheus优缺点
三.prometheus监控体系
四.Prometheus特点
五.使用场景
六.不适合的场景
七.prometheus生态组件
八.Prometheus部署
1.设置基础环境
2.安装并开启服务
3.查看采集数据
4.部署监控其他节点
5.开启服务
6.node1和node2安装控制节点
7.开启服务
Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
1.多维的数据模型(基于时间序列的Key、value键值对)
2.灵活的查询和聚合语言PromQL
3.提供本地存储和分布式存储
4.通过基于HTTP和HTTPS的Pull模型采集时间序列数据(pull数据的推送,时间序列:每段
时间点的数据值指标,持续性的产生。横轴标识时间,纵轴为数据值,一段时间内数值的动态变化,所有的点连线形成大盘式的折线图)
5.可利用Pushgateway (Prometheus的可选中间件)实现Push模式
6.可通过动态服务发现或静态配置发现目标机器(通过consul自动发现和收缩)
7.支持多种图表和数据大盘
1.提供多维度数据模型和灵活的查询方式,通过将监控指标关联多个tag,来将监控数据进行任意维度的组合,并且提供简单的PromQL查询方式,还提供HTTP查询接口,可以很方便地结合Grafana等GUI组件展示数据
2.在不依赖外部存储的情况下,支持服务器节点的本地存储,通过Prometheus自带的时序数据库,可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus可以对接第三方时序数据库和OpenTSDB等。
3.定义了开放指标数据标准,以基于HTTP的Pull方式采集时序数据,只有实现了Prometheus监控数据才可以被Prometheus采集、汇总、并支持Push方式向中间网关推送时序列数据,能更加灵活地应对多种监控场景
4.支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前已经支持Kubernetes、etcd、Consul等多种服务发现机制
5.易于维护,可以通过二进制文件直接启动,并且提供了容器化部署镜像。
6.支持数据的分区采样和联邦部署,支持大规模集群监控
监控体系
(1)系统层监控(需要监控的数据)
1.CPU、Load、Memory、swap、disk i/o、process等
2.网络监控:网络设备、工作负载、网络延迟、丢包率等
(2)中间件及基础设施类监控
1.消息中间件:kafka、RocketMQ、等消息代理
2.WEB服务器容器:tomcat
3.数据库/缓存数据库:MySQL、PostgreSQL、MogoDB、es、redis
redis监控内容
redis所在服务器的系统层监控
redis 服务状态
RDB AOF日志监控
日志——>如果是哨兵模式——>哨兵共享集群信息,产生的日志——>直接包含的其他节点哨兵信息及mysql信息
(3)应用层监控
用于衡量应用程序代码状态和性能
监控的分类:黑盒监控,白盒监控
PS:
白盒监控,自省指标,等待被下载
黑盒指标:基于探针的监控方式,不会主动干预、影响数据
(4)业务层监控
用于衡量应用程序的价值,如电商业务的销售量,ops、dau日活、转化率等,业务接口:登入数量,注册数、订单量、搜索量和支付量
自定义多维数据模型(时序列数据由metric名和一组key/value标签组成)
非常高效的储存平均一个采样数据占大约3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G
在多维上灵活且强大的查询语句(PromQL)
不依赖分布式储存,支持单主节点工作
通过基于HTTP的pull方式采集时序数据
可以通过push gateway进行时序列数据库推送(pushing)
可以通过服务发现或静态配置去获取要采集的目标服务器
多种可视化图表及仪表盘支持
Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。(k8s)
Prometheus是为可靠性而设计的,它是您在中断期间要使用的系统,可让您快速诊断问题。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它,并且无需设置广泛的基础结构即可使用它
Prometheus重视可靠性。即使在故障情况下,您始终可以查看有关系统的可用统计信息。如果您需要100%的准确性(例如按请求计费),则Prometheus并不是一个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视。
prometheus生态圈中包含了多个组件,其中部分组件可选
Prometheus Server:收集和储存时间序列数据
通过scraping以刮擦的方式去获取数据放入storge(TSDB时序数据库),制定Rules/Alerts:告警规则,service discovery是自动发现需要监控的节点
Client Library:客户端库目的在于为那些期望原生提供Instrumentation功能的应用程序提供便捷的开发途径;
Push Gateway:接收那些通常由短期作业生成的指标数据的网关,并支持由Prometheus Server进行指标拉取操作;
Exporters:用于暴露现有应用程序或服务(不支持Instrumentation)的指标给Prometheus Server而pro内建了数据样本采集器,可以通过配置文件定义,告诉prometheus到那个监控对象中采集指标数据,prometheus 采集过后,会存储在自己内建的TSDB数据库中,提供了promQL 支持查询和过滤操作,同时支持自定义规则来作为告警规则,持续分析一场指标,一旦发生,通知给alerter来发送告警信息,还支持对接外置的UI工具(grafana)来展示数据
采集、抓取数据是其自身的功能,但一般被抓去的数据一般来自于:export/instrumentation (指标数据暴露器) 来完成的,或者是应用程序自身内建的测量系统(汽车仪表盘之类的,测量、展示)来完成
Alertmanager:由告警规则对接,从Prometheus Server接收到"告警通知"后,通过去重、分
组、路由等预处理功能后以高效向用户完成告警信息发送
Data Visualization(Dashboards): 与TSDB对接并且展示数据库中的数据,Prometheus web UI (Prometheus Server内建),及Grafana等;
Service Discovery:动态发现待监控的Target,从而完成监控配置的重要组件,在容器化环境中尤为有用;该组件目前由PropetheusServer内建支持
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
vim /etc/reslove.conf
nameserver 114.114.114.114
时间同步
ntpdate ntp1.aliyun.com
tar zxvf prometheus-2.27.1.linux-amd64.tar.gz -C /usr/local
cd /usr/local/prometheus-2.27.1.linux-amd64
直接开启Prometheus
./prometheus
prometheus想要监控其他节点,则需要借助node_exporter,下载地址http://prometheus.io/download/
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64
复制命令让系统可以识别
cp node_exporter /usr/local/bin
vim /usr/lib/systemd/system/node_exporter.service
systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter
若需要加入其他节点监控端,则需要在192.168.10.20 prometheus服务端停止prometheus修改配置文件添加静态targets才能使得nodes节点加入
netstat -nautp | grep prometheus
killall -9 prometheus
cd /opt
安装node_exporter-1.1.2.linux-amd64.tar.gz包
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64/
cp node_exporter /usr/local/bin/
./node_exporter
在主服务上添加节点
vim /usr/local/prometheus-2.27.1.linux-amd64/prometheus.yml
计算过去5分钟内的CPU使用速率
irate(node_cpu_seconds_total{mode="idle"}[5m])
irate:速率计算函数(灵敏度非常高的)
node_cpu_seconds_total:node节点CPU使用总量
mode=“idle” 空闲指标
5m:过去的5分钟内,所有CPU空闲数的样本值,每个数值做速率运算