开发者学堂课程【3天吃透 Prometheus:Prometheus 基础应用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1244/detail/18445
Prometheus 基础应用
二、 Prometheus 的部署
Prometheus 本身是构物员研发,因而在打包时自动规避了依赖性。当然大规模部署时为了便于大规模维护,应使用 RP 包的方式用包管理器进行部署,除非有特别需要,不建议编译,因为编译出来的可能不如官方 UI 编译得好。
1、程序包的选择
Prometheus 程序包都在 Prometheus 官方站点导航栏 DOWNLOAD 中,点击进入即得下面图示的页面,可以看到分为 Prometheus Service栏、Alert Manager 栏、黑盒监控中的探针 consul-exporter、haproxy-exporter 等模块。为了分层学习,首先介绍 Prometheus,其次介绍 Exporter,在理解数据采集、存储、查询使用之后才能使用 Alert Manager,因此最后讲解 Alert Manager是如何进行使用的。
本次下载一个程序包即可,程序包种类如下,打包好的独立的二进制程序包可适应不同品牌,各种环境基本均可运行,找到适用于自己平台的即可。也可在下图 Operating system 处进行过滤,找到适用于自己系统和架构的程序包。
2、prometheus 的大致使用
将下图一红色部分展开即可使用,展开到 user/local下即可,展开后附加复杂的版本路径,如下图二蓝色部分所示,为了以后更加适用,常见做法是为其创建链接,链接到 Prometheus上,结果如下图三所示,prometheus 是服务端程序包,promtool 是Q端工具,consoles 是控制台程序,console libraries 是控制台的库,这些都不需独立管理,组配文件是 prometheus.yml,不需做任何编辑,直接启动即可运行,接着输入 prometheus,默认读取此文件,回车后得到下图4所示页面,有工作前台。再次打开一终端,输入 ss.tnl,得到下图五所示页面,监听到9090端口HTTP协议,因此直接访问9090端口即可,在网址栏输入172.29.1.1:9090得到下图5表达式浏览器界面,在搜索框允许建立表达式,目前是新版的UI接口,点击Classic UI可切换回旧版。在搜索框输入表达式,有哪些监控指标就可查询哪些指标,如果勾选上 Enable autocomplete会自动补全prometheus 已抓取到的相关指标名称。Prometheus 当前的外部UI接收到的总的成就是 requests tota,点开如下图6所示界面,得到查询结果。一个指标下的所有标签都可以查询得到,查询到的数量和标签值可能会有所区别,每一种标签的独立组合都可以代表一个时序execute后获得的就是即时向量。
Code 均为200,但UI不同,每一个时序均有两个独立的标签,分别是 instance和job,因此时间序列代表着 target 的地址,统一使用 instance 标签代表着target 端点的地址,使用 job 代表定义的 job 地址,这些都定义在 prometheus 的配置文件中。如果在搜索栏中加一个花括号判断条件即可过滤,例如只看code=302,即在花括号中输入code=“302”,注意这里的=只是做等值判断,execute 后得到下图7所示结果,已过滤出只有302标签的时序,同理得出具有其他标签的时序。
也可以将一段时间内的同一指标值取出查看,如果结果是即时向量,可点击 graph 进行图形化展示,如下图8所示,由于有n个指标,每个指标都有一个数据,但它会将历史数据拟取出来以图形方式展现,每个颜色代表不同含义。默认放大窗口为1h,可通过镜头的远近拉近拉远,看到不同时间范围内的数据项,也可以显现为面积图,这都是prometheus 的内置图形,不能将查询过的时序保存下来,因此未来必须辅助一个专业展示的窗口,graph将每次查询过的记录保存下来。
图一
图二
图三
图四
图五
图六
图七
图八
3、prometheus 的自动监控
启动时 prometheus 会在http://prometheus:9090/metrics自动监控自己,在网址栏输入172.29.1.1:9090/metrics回车得到下图1所示界面,这是当前列出来的所有即使指标的数据,正常情况下数据样本是按照固定周期抓取的,在 prometheus 上默认是15s,因此一旦刷新,即时样本会发生变化。样本会有注释,注释用HELP对对应指标进行简要说明,用 TYPE 说明指标类型,指标类型包括计数器、仪表盘、直方图和摘要,对于 server 来说都展成为双精度浮点存储。点击 Status 下的 Targets 会显示出 prometheus 当前已抓取的监控目标,如下图2,每一个 target 是一个例子,也是一个指标,用很多标签识别,其中最关键的标签是 instance,指的是网络端点而非UI端点。悬浮标签中的重新打标是 prometheus 中一个十分重要的功能。可以切换 Unhealthy 端点,state 处UO表示端点处于正常工作状态。在 prometheus 主页中,可以使用up指标代表target 当前是否健康,1表示健康,因此使用up一个指标可获取所有健康的端点信息,当然也可以进行过滤。
图一
图二
Status 下 Service Discovery 可发现有哪些端点;Runtime 表示prometheus 本身在编译时的信息;Alertmanagers 是当前prometheus 对接的报警管理器,由于未做对接,Alertmanagers下信息为空,其他信息页面上均有显示。
4、默认存储文件 Configuration
Configuration 是 prometheus 默认的存储文件,如下图1所示,yml 格式的配置文件大概有以下几个配置段,global 是全局配置项,有两个十分重要的参数:scrap_interval(数据采集时间间隔),默认是一分钟。采集时间不宜过快,过快会导致数据项过多,server压力会增大。这些操作可通过告警规则转换。Alerting是对接告警系统,告警系统是什么、Alertmanagers 在哪一地址和端口。Rule files 是加载的规则,规则文件主要有两种,分别是记录规则和报警规则。最重要的是scrape_configs 配置,其中是用列表的作业进行定义的,每一个作业都是将一类暴露相似功能的应用程序归类到一起,称为一个 target,对应会显示成一个 instance。定义target的方式有两大类,第一是静态指定 target 是什么以及它的地址和端口;第二是动态发现,即 service discovery,随后会讲到。目前只能监控 prometheus本地一个程序,local 后的9090是 prometheus 自己暴露出的仪表盘,而 prometheus 自身运行的节点也要监控,因此要附加 exporter。找到 node-exporter 下摆位置,如下图2所示,直接展开部署启动即可。
5、node 的监控
如果现在要监控 node,输入代码可得到很多选项,以默认方式启动即可。使用 ss_nl 可以看到9100端口,处于监听状态,在网页上输入172.29.1.1:9100/metrics访问9100,如下图3所示,包含了 note cpu、内存、文件系统相关的数据指标,因为他们还未被识别为target因此这些指标现在还不能被 prometheus server 采集。要让prometheus server 加载并监控这些指标可采用静态的方式配置,在prometheus 目录中编辑文件,如下图4所示,在最下面定义一个job,job name 指定一个作业名称“nodes”,静态指令 static_configs 下指定 targets,localhost 是9100,默认 metrics,如果不是可以用完整的配对参数自己修改,找到 DOCS,点击 DOCS 中 prometheus 下的 configuration 得到下图5全局配置段,其中有一项 scrape config 描述了 scrape 如何定义,包括 job 内容、metrics_part 等,如果不写默认为 metrics ,若换到其他位置,则使用 metrics_path 明确指出,明确值在 job 下输入 metrics_path:’/metrics’。加减后会马上抓取指标,节点可能不存在,或者节点存在但9100端口未接听,会显示 target 处于非UP状态,保存后对应的 prometheus 可能不会自动装载,需要重新启动。
下面是 Targets 情况,刷新后彻底业务变成 DOWN 状态,但本机处于UP状态,此时再次执行UP得到的值为0。输入up{job=”nodes”}可以看某一个job;当输入up{job=”nodes”}==0时可以过滤出样本即时值等于零的有哪些。
图一
图二
图三
图四
图五
将 node01复制到 user_local 下创建链接后执行得到下图1代码,01上的状态一旦发生改变,9100端口要开放出去。Targets 中01显示为UP,只有02显示为DOWN状态。有这些节点的指标项均可查询,除了UP外,以 note 开头的有许多指标,包括 cpu 的使用状况和负载状况等。
输入 node_memory_MemFree_bytes 可以抓取两个节点字节,可直接做算数运算,在其后面接着输入1024换算成K,如下图2所示。用已用量(总量减去空闲量)再除以总量可知晓内存空间比例多大,可将表达式保存到展示系统上,也可以将规则记录下来生成一个时间序列。
Prometheus 中还有许多用来运算的复杂的内置函数,尤其是对服务器的速率计算。
图一
图二