Prometheus介绍安装和快速入门

news2024/11/16 3:29:37

Prometheus介绍安装和快速入门

1、Prometheus介绍

1.1 什么是 Prometheus?

Prometheus(普罗米修斯)是古希腊的一个神明,名字的意思是「先见之明」。从它的名字可以看出,

Prometheus 是做「先见之明」的监控告警用途。维基百科简单写了它的作用:Prometheus is a free software

application used for event monitoring and alerting(Prometheus 是用来监控、报警的免费软件)。

Prometheus 官网则是用「From metrics to insight」(用指标洞察系统的意思)描述了 Prometheus 的用途。

看到这里我们大概知道 Prometheus 其实就是一个数据监控解决方案,它能帮你简单快速地搭建起一套可视化

的监控系统。但这么说还是有点抽象,下面我举几个简单的例子,帮助大家理解 Prometheus 究竟能做什么?

对于运维人员来说,他们需要监控机器的 CPU、内存、硬盘的使用情况,以此来保证运行在机器上的应用的稳定

性。对于研发人员来说,他们关注某个异常指标的变化情况,从而来保证业务的稳定运行。对于产品或运营来说,

他们更关心产品层面的事情,例如:某个活动参加人数的增长情况,活动积分的发放情况。

对于上面说到的这些功能,Prometheus 都能够实现。Prometheus 能根据这些收集的数据实现告警功能。

例如:运维希望在 CPU 达到 80% 的时候给值班的运维人员发送邮件,产品希望活动积分发放数量超过10万的时

候发送告警邮件。这些都可以通过 Prometheus 实现。

除了数据收集、告警功能之外,Prometheus 还有很多强大的功能,例如:强大的 ProQL 查询、许多客户端库

等。因为 Prometheus 功能强大、构建成本低,所以现在越来越多的公司都使用 Prometheus 作为其数据监控的

解决方案。

Prometheus 是一个开源的监控和报警系统,它将我们关心的指标值通过 PULL 的方式获取并存储为时间序列数

据。如果单从它的收集功能来讲,我们也可以通过 mysql、redis 等方式实现。然而,这些数据是在每时每刻产生

的,其庞大的规模需要我们好好的考虑其存储方式。另外,这些监控数据大多数时候是跟统计相关的,比如数据与

时间的分布情况等,这需要有专业的度量知识。而这些正是 Prometheus 的擅长所在。由于 Prometheus 的关注

重点在于指标值以及时间点这两个因素,所以外部程序对它的接入成本非常的低。这种易用性可以让我们对数据进

行多维度、多角度的观察和分析,使得监控的效果更加具体化,例如内存消耗、网络利用率、请求连接数等。

除此之外,Prometheus 还具备了操作简单、可拓展的数据收集和强大的查询语言等特性,这些特性能帮助我们在

问题出现的时候,快速告警并定位错误。所以现在很多微服务基础设施都会选择接入 Prometheus,像 k8s、云原

生等。

1.2 为什么要学 Prometheus?

对于一直在一线开发的同学而言,你可能只需要把自己的需求做好、没有 bug、顺利上线,那么你的任务就完成

了。但是如果你是一个 leader,那么你是对整个业务系统负责,这个业务系统出了什么问题,都是你的责任。这

个时候,你需要时刻关注这个系统是否正常运行。

对于流量不是很大的系统来说,出现几分钟的故障可能造成不了多少损失。但是对于像淘宝、美团、字节跳动这样

的巨无霸来说,宕机 1 分钟损失的金额可能就是几百万!

所以弄清楚此时此刻系统的运行是否正常?各项业务指标是否超过阈值?这些问题是每个经验丰富的研发人员所需

要关注的事情!

那么如何监控你的系统?如何得知系统目前是正常还是异常?甚至如何预知未来一段时间系统可能出问题?

Prometheus 正是这么一套数据监控解决方案。它能让你随时掌控系统的运行状态,快速定位出现问题的位置,快

速排除故障。

只要按照 Prometheus 的方式来做,按部就班地学习和部署,我们就可以监控机器的 CPU、内存等资源的使用情

况、Java 应用的运行情况以及业务各项指标的实时数据。

当然有一些公司会自己使用 Kafaka 收集监控数据,并且存储在 Hive 中,最终通过页面聚合数据,同样能够实现

数据监控。但是这种解决方案需要开发人员掌握 Hive + Hadoop 等大数据框架,并且在前端展示上比较局限。

而通过 Prometheus 则可以直接部署使用,并且其与 Grafana 配套使用可以呈现出非常多样化的图表配置。对于

中小规模的团队来说,可以极大地减少成本,加快研发速度。

而对于个人来讲,掌握 Prometheus 可以增加你当 leader 的竞争力。毕竟如果一个研发对自己的系统运行状况

都不了解,那么他怎么做 leader,怎么带领一个团队往前冲呢?

1.3 总结

对于工作多年的研发人员,对自己负责的系统必须了然于胸。而要做到了然于胸,单靠一味的自信是不够的,必须

借助一套功能强大的业务监控系统。Prometheus 作为这其中的翘楚,凭借其完善的功能、海量数据支持,可以让

我们较低成本地实现业务监控。

2、Prometheus安装和快速入门

Prometheus 是任何一个高级工程师必须要掌握的技能。那么如何从零部署一套 Prometheus 监控系统呢?本篇

文章将从 Prometheus 的原理讲起,手把手带你用一个最简单的例子部署一套 Prometheus 监控系统。

2.1 基本原理

Prometheus 的基本架构如下图所示:

在这里插入图片描述

从上图可以看到,整个 Prometheus 可以分为四大部分,分别是:

  • Prometheus 服务器

Prometheus Server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

  • NodeExporter 业务数据源/Targets Discover

业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server。

  • AlertManager 报警管理器

Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理。

  • 可视化监控界面

Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行

调用数据展示,也可以直接使用 Grafana 解决方案来展示。

其它组件:

  • Pushgateway

为监控节点提供 Push 功能,再由 Prometheus server 到 Pushgateway 集中 Pull 数据。

  • PromQL

针对指标数据查询的语言,类似 SQL。

简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进

行报警处理。但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研

发成本。

下面我们通过一个简单的例子来实现对服务器 CPU、内存等硬件信息的监控。

2.2 安装运行 Prometheus 服务端

Prometheus 服务端负责数据的收集,因此我们应该首先安装并运行 Prometheus Server。

https://prometheus.io/download/ 找到最新版本的 Prometheus Sevrer 软件包:

在这里插入图片描述

下载 prometheus-2.34.0-rc.2.linux-amd64.tar.gz 安装包,上传到服务器:

在这里插入图片描述

使用 tar -xvf prometheus-2.34.0-rc.2.linux-amd64.tar.gz 解压,可以看到如下目录结构:

在这里插入图片描述

新建一个 data 目录,用来作为数据的存储路径,也可以通过运行时的 --storage.tsdb.path="数据存放路径"

命令另行指定路径,如果不指定默认是data目录。

在这里插入图片描述

prometheus.yml 是 prometheus 的配置文件,prometheus 是运行的可执行文件。

启动 prometheus 服务,其会默认加载当前路径下的 prometheus.yaml 文件,当然我们也可以手动指定配置文件

地址:

# 前台启动
$ ./prometheus --config.file=prometheus.yml
# 后台启动
$ nohup ./prometheus --config.file=prometheus.yml >> nohup.out 2>&1 &

正常的情况下,你可以看到以下输出内容:

在这里插入图片描述
在这里插入图片描述

输入 http://192.168.2.186:9090/graph 通过浏览器进行访问,如果没有开放端口需要先开放9090端口:

# 查看开放的端口号 
firewall-cmd --list-all
# 设置开放的端口号
firewall-cmd --add-port=9090/tcp --permanent
# 重启防火墙 
firewall-cmd --reload

可以看到如下页面,这个是 Prometheus 自带的监控管理界面:

在这里插入图片描述

2.3 将 Prometheus 设置为服务

创建service并设置自动启动:

$ vim /usr/lib/systemd/system/prometheus.service

配置如下内容:

[Unit]
Description=prometheus
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/home/zhangshixing/prometheus/prometheus-2.34.0-rc.2.linux-amd64/prometheus --config.file=/home/zhangshixing/prometheus/prometheus-2.34.0-rc.2.linux-amd64/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target

设置自动启动:

$ systemctl enable prometheus

启动服务并查看启动状态:

# 重新加载某个服务的配置文件
$ systemctl daemon-reload
# 启动prometheus
$ systemctl start prometheus
# 查看prometheus状态
$ systemctl status prometheus
[root@zsx ~]# systemctl status prometheus
● prometheus.service - prometheus
   Loaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-03-01 10:28:26 CST; 19s ago
     Docs: https://prometheus.io/
 Main PID: 108411 (prometheus)
    Tasks: 6
   Memory: 23.2M
   CGroup: /system.slice/prometheus.service
           └─108411 /home/zhangshixing/prometheus/prometheus-2.34.0-rc.2.linux-amd64/promet...

Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.099Z caller=head.go:53…43µs
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.099Z caller=head.go:54...e"
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.107Z caller=tls_config...se
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.107Z caller=head.go:61...=0
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.107Z caller=head.go:61…55ms
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.111Z caller=main.go:95...IC
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.111Z caller=main.go:96...d"
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.111Z caller=main.go:11...ml
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.497Z caller=main.go:1179…µs
Mar 01 10:28:27 zsx.com prometheus[108411]: ts=2023-03-01T02:28:27.498Z caller=main.go:91...."
Hint: Some lines were ellipsized, use -l to show in full.

其它的服务都类似,只需要修改相应 service 文件的一些参数。

2.4 运行 NodeExporter 客户端数据源

NodeExporter 是 Prometheus 提供的一个可以采集到主机信息的应用程序,它能采集到机器的 CPU、内存、磁

盘等信息。

我们从 https://prometheus.io/download/ 获取最新的 Node Exporter 版本的二进制包:

在这里插入图片描述

下载 node_exporter-1.3.1.linux-amd64.tar.gz 上传到服务器:

在这里插入图片描述

使用 tar -xvf node_exporter-1.3.1.linux-amd64.tar.gz 进行解压:

在这里插入图片描述

运行 Node Exporter,我们指定用 8080 端口运行:

# 前台运行
$ ./node_exporter --web.listen-address 192.168.2.186:8080
# 后台运行
$ nohup ./node_exporter --web.listen-address 192.168.2.186:8080 >> nohup.out 2>&1 &

启动成功后,可以看到以下输出:

在这里插入图片描述
在这里插入图片描述

访问 http://192.168.2.186:8080/ ,如果没有开放端口需要先开放8080端口:

# 查看开放的端口号 
firewall-cmd --list-all
# 设置开放的端口号
firewall-cmd --add-port=8080/tcp --permanent
# 重启防火墙 
firewall-cmd --reload

可以看到以下页面:

在这里插入图片描述

访问 http://192.168.2.186:8080/metrics,可以看到当前 node exporter 获取到的当前主机的所有监控数

据,如下所示:

在这里插入图片描述

每一个监控指标之前都会有一段类似于如下形式的信息:

# HELP node_cpu_guest_seconds_total Seconds the CPUs spent in guests (VMs) for each mode.
# TYPE node_cpu_guest_seconds_total counter
node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0
node_cpu_guest_seconds_total{cpu="0",mode="user"} 0

其中 HELP 用于解释当前指标的含义,TYPE 则说明当前指标的数据类型,node_cpu_guest_seconds_total

监控的具体指标。

除了这些以外,在当前页面中根据物理主机系统的不同,你还可能看到其它的一些监控指标。

2.5 配置 Prometheus 的监控数据源

现在我们运行了 Prometheus 服务器,也运行了业务数据源 NodeExporter。但此时 Prometheus 还获取不到任

何数据,我们还需要配置下 prometheus.yml 文件,让其去拉取 Node Exporter 的数据。

我们配置一下 Prometheus 的配置文件,让 Prometheus 服务器定时去业务数据源拉取数据。编辑

prometheus.yml并在 scrape_configs 节点下添加以下内容:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  # 采集node exporter监控数据
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.2.186:8080']

在这里插入图片描述

上面配置文件配置了两个任务。一个是名为 prometheus 的任务,其从「localhost:9090」地址读取数据。另一个

是名为 node 的任务,其从「192.168.2.186:8080」地址读取数据。

备注:每次修改配置完成,用promtool检测配置文件是否正确

$ ./promtool check config ./prometheus.yml

在这里插入图片描述

配置完成后,我们重新启动 Prometheus。

$  systemctl restart prometheus

重新访问浏览器:

在这里插入图片描述
在这里插入图片描述

2.6 查询监控数据

配置完 Prometheus 读取的数据源之后,Prometheus 便可以从 Node Exporter 获取到数据了。那么接下来我们

如何查看到这些数据呢?答案是:Prometheus UI!

Prometheus UI 是 Prometheus 内置的一个可视化管理界面,我们通过 http://192.168.2.186:9090 就可以

访问到该页面。

通过 Prometheus UI 可以查询 Prometheus 收集到的数据,而 Prometheus 定义了 PromQL 语言来作为查询监

控数据的语言,其余 SQL 类似。

接下来我们访问 http://192.168.2.186:9090,进入到 Prometheus Server。如果输入「up」并且点击执行

按钮以后,可以看到如下结果:

在这里插入图片描述

可以看到有几条记录,其中 instance 值为192.168.2.186:8080的记录,value 是 1,这代表对应应用是存活状

态。

up{instance="192.168.2.186:8080", job="node"}        1

例如查看我们所运行 NodeExporter 节点所在机器的内存使用情况,可以输入

node_memory_Active_bytes/(1024*1024*1024) 查看。

在这里插入图片描述
在这里插入图片描述

查看 NodeExporter 节点所在机器 CPU 1 分钟的负载情况,可以输入 node_load1 即可查看。

在这里插入图片描述
在这里插入图片描述

到这里,我们基本上为完成了数据的收集过程,即数据从业务侧收集到 Prometheus 侧,并且还学会了如何使用

Prometheus 自带的控制台。

2.7 总结

这篇文章我们从 Prometheus 的原理入门,剖析了 Prometheus 实现的原理,并且用一个简单的例子从零实现了

一套业务监控系统。通过 Prometheus UI,我们可以实时获取到机器的存活信息、CPU、内存信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HJ26 字符串排序

题目: HJ26 字符串排序 题解: 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 统一转换,通过减去对应字母的起始值,得到一个相对值,抹平大小写,例如:B - A&#xff…

【Java项目】使用LruCache提高DSP广告主需求方 (Demand Side Platform)系统性能

文章目录 背景LruCache简介LruCache在DSP系统中的应用场景LruCacheRedis增加LruCache数据过期清除机制ConcurrentHashMapLruCache零拷贝机制 源码 背景 我之前工作的一家公司是一家传媒公司,公司的主要盈利方式为在公司项目中接入广告,以及自媒体广告宣…

Windows下编译安装Acise

Acise是济南友泉软件公司自主研发的一套跨平台的通用CAx(CAD/CAE)软件开发框架,本文旨在记录Windows下编译安装Acise的流程。 零、系统环境 操作系统Windows 10编译器Visual Studio 2019 CommunityCMake2.24.2Boost1.80.0Qt5.14.0OpenCASCADE7.6.0VTK9.0.0 一、依…

Linux之线程安全(下)

文章目录 前言一、Linux线程互斥1.mutex的理解锁原子性互斥锁实现原子性的原理 2.mutex的封装——Mutex.hpp3.可重入和线程安全可重入线程安全线程安全不一定是可重入的,而可重入函数一定是线程安全的。 4.死锁概念造成死锁的四个必要条件如何避免死锁 二、Linux线程…

Mendix低代码开发

Mendix低代码开发 目录概述需求: 设计思路实现思路分析1.URL管理2.LL3.Mendix 低代码可视化开发4.Mendix 低代码可视化开发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip har…

许多智能算法并不智能

数学的精髓在于不断寻找简洁而优美的解决方法,而智能的精髓也在于尽可能地避免繁琐的计算,通过更高效的方式来解决问题。从实践角度看,现代人工智能技术的发展,正是基于这个思路不断推进的。在机器学习领域中,人们通过…

【C语言复习】第二篇、VS2017软件的使用以及常用小技巧

目录 1、VS2017软件无法打开stdio.h文件的解决办法 2、VS2017软件解决scanf函数问题以及如何建立初始模板 2.1、visual Studio使用scanf函数出现报错问题 2.2、如何实现新建一个.c文件就有初始模板 3、VS2017软件如何显示代码行号? 4、VS2017软件如何快速复制…

Redis(Windows版)安装

Redis安装过程 目前只是Windows下安装,后续会添加linux下安装过程 Windows安装 下载地址:Releases tporadowski/redis (github.com) Redis安装要根据系统平台的实际情况而定,我使用的是免安装的 下载完成,解压之后打开文件夹…

怎么计算 flex-shrink 的缩放尺寸

计算公式: 子元素的宽度 - (子元素的宽度的总和 - 父盒子的宽度) * (某个元素的flex-shrink / flex-shrink总和) 面试问题是这样的下面 left 和 right 的宽度分别是多少 * {padding: 0;margin: 0;}.container {width: 500px;height: 300px;display: flex;}.left {width: 500px…

MySQL8.0安装过程中starting the server报错的解决方案(史上最详细)

MySQL8.0安装过程中starting the server报错的解决方案(史上最详细) 目录 MySQL8.0安装过程中starting the server报错的解决方案(史上最详细)报错情况:starting the server报错解决办法 报错情况:starting…

盘点开源ChatGPT建立的私有知识库

ChatGPT 可以落地的一个行业就是建立私有知识库,将ChatGPT落地TO B行业,可基于ChatGPT和私有数据构建智能知识库和个性化AI。 这个应该是ChatGPT 最热的一个创业方向。 可能出现的产品,有智能AI客服、企业内部/外部知识库、个人知识库&…

C++(9):顺序容器

顺序容器概述 所有顺序容器都提供了快速顺序访问元素的能力。 vector//可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 deque//双端队列。支持快速随机访问。在头尾位置插入/删除速度很快 list//双向链表。只支持双向顺序访问。在list中任何位置进…

oVirt 4.4.10三节点超融合集群安装配置及集群扩容(二)

在上节安装完成3节点集群后&#xff0c;在此基础上扩容到6节点<oVirt每次扩容后的容量必须是3的倍数> 操作步骤 在原始第一台服务器访问https://192.168.5.100:9090/,在"Virtualiztion"->“Hosted Engin"下点击"Manage Gluster” 点击"Ex…

「已解决」已有Umi Antd 环境下安装 formily v2 依赖报错问题

背景 在一个项目中想引入 formily v2 试一下这个针对复杂表单的解决方案&#xff0c;结果发现安装后报错&#xff0c;目前已有的第三方库大致为 “ant-design/icons”: “^5.0.1”, “ant-design/pro-components”: “^2.4.4”, “umijs/max”: “^4.0.68”, “ahooks”: “^3…

【软考程序员学习笔记】——操作系统

目录 &#x1f34a;一、操作系统的五大功能 &#x1f34a;二、操作系统的分类 &#x1f34a;三、进程三态模型 &#x1f34a;四、信号量机制 &#x1f34a;五、PV机制、互斥和同步 &#x1f34a;六、虚拟存储器 &#x1f34a;七、设备管理 直接程序控制 &#x1f34a;八…

PyQt5桌面应用开发(21):界面设计结果自动测试(二)

本文目录 PyQt5桌面应用系列TDDUI为什么&#xff1f; 开发任务任务设计小码的工作unittest函数一览表 UI单元测试代码控件代码测试报告 总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&a…

Python基础(2)——Python解释器

Python基础&#xff08;2&#xff09;——Python解释器 文章目录 Python基础&#xff08;2&#xff09;——Python解释器目标一. 解释器的作用二. 下载Python解释器三. 安装Python解释器总结 目标 解释器的作用下载Python解释器安装Python解释器 一. 解释器的作用 Python解释…

Golang每日一练(leetDay0099) 单词规律I\II Word Pattern

目录 290. 单词规律 Word Pattern &#x1f31f;  291. 单词规律 II Word Pattern ii &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 …

ubuntu 20.04 arm 平台交叉编译 glib 库

glib 是什么&#xff1f; glib 是一个比较强大的 软件库&#xff0c;类似于 libc 库 交叉编译 当前需要移植到 arm&#xff08;ARM 32位&#xff09;平台上&#xff0c;需要使用 arm 交叉编译工具链编译 glib 环境准备 ubuntu 20.04 安装较新版本的 meson &#xff1a; &g…

手写-js节流(定时器+时间差两种方式)

官方解释&#xff1a;当持续触发事件时&#xff0c;保证一定时间段内只调用一次事件处理函数。 节流实现思路: 实现节流函数, 我们使用定时器是不方便管理的, 实现节流函数我们采用另一个思路 我们获取一个当前时间nowTime, 我们使用new Date().gettime()方法获取, 在设定一个…