一、概述
Prometheus本身为一种时序数据库(TSDB),还具备开源的监控、报警、时间序列、数据库的组合。其设计用于进行目标(target)监控的关键组件。
- TSDB:pro通过采集的样本以时间序列的方式保存在内存(TSDB时序数据库)中并定时保存到硬盘中(持久化)。
- target:主要指可输出、产生指标数据的组件/对象,包括但不限于主机、应用、服务、K8S ingress(逻辑组件)等
小结:能正常输出指标数据的对象称为target 或网络端点。 - 时序数据:一段时间内通过《重复》测量而获得的观测值的集合,并且可将这些观测值绘制与图形之上,以数据轴(纵轴)和时间轴(横轴)来表示随着时间流逝而产生的“渐变”变化(类似与股票)。
二、特性
- 多维的数据模型(基于时间序列的Key、value键值对)
- 灵活的查询和聚合语言PromQL
- 提供本地存储和分布式存储
- 通过基于HTTP和HTTPS的Pull模型采集时间序列数据(pull数据的拉取,时间序列:每段时间点的数据值指标,持续性的产生。横轴标识时间,纵轴为数据值,一段时间内数值的动态变化,所有的点连线形成大盘式的折线图)
- 可利用Pushgateway (Prometheus的可选中间件)实现Push模式
- 可通过动态服务发现或静态配置发现目标机器(通过consul自动发现和收缩)
- 支持多种图表和数据大盘
三、场景
一、可以使用的场景
1、Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。
2、Prometheus是为可靠性而设计的,它是您在中断期间监控使用的系统,可让您快速诊断问题。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它,并且无需设置广泛的基础结构即可使用它。
二、不可使用的场景
1、普罗米修斯重视可靠性。即使在故障情况下,您始终可以查看有关系统的可用统计信息。如果您需要100%的准确性(例如按请求计费),则Prometheus并不是一个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视。
2、数据准确性要求极高的场景,不适合使用promeetheus。
四、实验
一、实验环境
prometheus 192.168.226.128 prometheus
server1 192.168.226.129 node_exporter
server2 192.168.226.130 node_exporter
#部署环境
[root@localhost ~]# hostnamectl set-hostname prometheus #另两台:server1/2
[root@localhost ~]# su
[root@prometheus ~]# systemctl stop firewalld
[root@prometheus ~]# systemctl disable firewalld
[root@prometheus ~]# setenforce 0
[root@prometheus ~]# cat /etc/resolv.conf
nameserver 114.114.114.114
[root@prometheus ~]# ntpdate ntp.aliyun.com
21 Sep 19:41:10 ntpdate[83693]: adjust time server 203.107.6.88 offset 0.003456 sec
二、安装Prometheus并启动
#Prometheus端
[root@prometheus ~]# cd /opt
[root@prometheus opt]# rz
#上传prometheus-2.27.1.linux-amd64.tar
[root@prometheus opt]# tar zxvf prometheus-2.27.1.linux-amd64.tar.gz -C /usr/local
[root@prometheus prometheus-2.27.1.linux-amd64]# ./prometheus #启动
- 查看服务是否启动
三、访问web
- 访问192.168.238.150:9090,表达式浏览器
- 查看采集数据
四、部署其他监控节点
#两台server
[root@server1 ~]# cd /opt
[root@server1 opt]# rz
#上传node_exporter-1.1.2.linux-amd64.tar
[root@server1 opt]# tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz
[root@server1 opt]# cd node_exporter-1.1.2.linux-amd64
[root@server1 node_exporter-1.1.2.linux-amd64]# cp node_exporter /usr/local/bin #复制命令让系统可以识别
[root@server1 node_exporter-1.1.2.linux-amd64]# ./node_exporter #启动
#Prometheus端
[root@prometheus ~]# vim /usr/local/prometheus-2.27.1.linux-amd64/prometheus.yml #进入prometheus主配置文件;配置静态发现
五、访问http://192.168.238.150:9090
六、表达式浏览器常规使用
###CPU使用总量
node_cpu_seconds_total
###计算过去5分钟内的CPU空闲速率
##PromQL:
irate(node_cpu_seconds_total{mode="idle"}[5m])
解析:
irate:速率计算函数(灵敏度非常高)
node_cpu_seconds_total:node节点CPU使用总量(指标)
mode="idle" 空闲指标(标签)
5m:过去的5分钟内,所有CPU空闲数的样本值,每个数值做速率运算
{mode="idle"} :整体称为标签过滤器
###每台主机CPU在5分组内的平均使用率
##PromQL:
(1- avg (irate(node_cpu_seconds_total{mode='idle'}[5m]))by (instance))* 100
解析:
avg:平均值
avg (irate(node_cpu_seconds_total{mode='idle'}[5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点
###查询1/5/15分钟平均负载
node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'}) by(instance)
node_load5 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'}) by(instance)
node_load15 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'}) by(instance)
###内存使用率
node_memory_MemTotal_bytes
node_memory_MemFree_bytes
node_memory_Buffers_bytes
node_memory_Cached_bytes
|