Prometheus 入门教程(一):Prometheus 快速入门
文章首发于【陈树义】公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A
Prometheus 是任何一个高级工程师必须要掌握的技能。那么如何从零部署一套 Prometheus 监控系统呢?本篇文章将从 Prometheus 的原理讲起,手把手带你用一个最简单的例子部署一套 Prometheus 监控系统。
基本原理
Prometheus的基本架构如下图所示:

从上图可以看到,整个 Prometheus 可以分为四大部分,分别是:
- Prometheus 服务器
 
Prometheus Server 是 Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
- NodeExporter 业务数据源
 
业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server。
- AlertManager 报警管理器
 
Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理。
- 可视化监控界面
 
Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示。
简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。 但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。

文章首发于【陈树义】公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A
快速入门
下面我们通过一个简单的例子来实现对服务器 CPU、内存等硬件信息的监控。
安装运行 Prometheus 服务端
Prometheus 服务端负责数据的收集,因此我们应该首先安装并运行 Prometheus Server。
从 https://prometheus.io/download/ 找到最新版本的Prometheus Sevrer软件包:

下载后解压,可以看到如下目录结构:

其中 data 目录是数据的存储路径,也可以通过运行时的 --storage.tsdb.path="data/" 命令另行指定。Prometheus.yml 是 Prometheus的配置文件,prometheus 是运行的命令。
启动prometheus服务,其会默认加载当前路径下的prometheus.yaml文件。当然我们也可以手动指定配置文件地址:
./prometheus --config.file=prometheus.yml
文章首发于【陈树义】公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A
正常的情况下,你可以看到以下输出内容:
level=info ts=2020-07-18T06:48:52.454Z caller=main.go:694 fs_type=18
level=info ts=2020-07-18T06:48:52.454Z caller=main.go:695 msg="TSDB started"
level=info ts=2020-07-18T06:48:52.454Z caller=main.go:799 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2020-07-18T06:48:53.056Z caller=main.go:827 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2020-07-18T06:48:53.056Z caller=main.go:646 msg="Server is ready to receive web requests."
输入 http://localhost:9090/graph 可以看到如下页面,这个是 Prometheus 自带的监控管理界面。

运行 NodeExporter 客户端数据源
NodeExporter 是 Prometheus 提供的一个可以采集到主机信息的应用程序,它能采集到机器的 CPU、内存、磁盘等信息。
我们从 https://prometheus.io/download/ 获取最新的 Node Exporter 版本的二进制包。

下载解压后运行 Node Exporter,我们指定用 8080 端口运行:
./node_exporter --web.listen-address 127.0.0.1:8080
启动成功后,可以看到以下输出:
level=info ts=2020-07-18T06:52:42.132Z caller=node_exporter.go:191 msg="Listening on" address=127.0.0.1:8080
level=info ts=2020-07-18T06:52:42.132Z caller=tls_config.go:170 msg="TLS is disabled and it cannot be enabled on the fly." http2=false
访问 http://localhost:8080/ 可以看到以下页面:

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

每一个监控指标之前都会有一段类似于如下形式的信息:
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125
其中 HELP 用于解释当前指标的含义,TYPE 则说明当前指标的数据类型。
在上面的例子中 node_cpu 的注释表明当前指标是 cpu0 上 idle 进程占用 CPU 的总时间,CPU 占用时间是一个只增不减的度量指标,从类型中也可以看出 node_cpu 的数据类型是计数器(counter),与该指标的实际含义一致。
又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。
除了这些以外,在当前页面中根据物理主机系统的不同,你还可能看到如下监控指标:
node_boot_time:系统启动时间
node_cpu:系统CPU使用量
nodedisk*:磁盘IO
nodefilesystem*:文件系统用量
node_load1:系统负载
nodememeory*:内存使用量
nodenetwork*:网络带宽
node_time:当前系统时间
go_*:node exporter中go相关指标
process_*:node exporter自身进程相关运行指标
配置 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: ['localhost:8080']
上面配置文件配置了两个任务。一个是名为 prometheus 的任务,其从「localhost:9090」地址读取数据。另一个是名为 node 的任务,其从「localhost:8080」地址读取数据。
配置完成后,我们重新启动 Prometheus。
./node_exporter --web.listen-address 127.0.0.1:8080
查询监控数据
配置完 Prometheus 读取的数据源之后,Prometheus 便可以从 Node Exporter 获取到数据了。那么接下来我们如何查看到这些数据呢?答案是:Prometheus UI!
Prometheus UI 是 Prometheus 内置的一个可视化管理界面,我们通过 http://localhost:9090 就可以访问到该页面。
通过 Prometheus UI 可以查询 Prometheus 收集到的数据,而 Prometheus 定义了 PromQL 语言来作为查询监控数据的语言,其余 SQL 类似。
接下来我们访问 http://localhost:9090,进入到 Prometheus Server。如果输入「up」并且点击执行按钮以后,可以看到如下结果:

可以看到 Element 处有几条记录,其中 instance 值为 localhost:8080 的记录,value 是 1,这代表对应应用是存活状态。
up{group="production",instance="localhost:8080",job="node"}	1
例如查看我们所运行 NodeExporter 节点所在机器的内存使用情况,可以输入 node_memory_active_bytes/(1024*1024*1024) 查看。

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

到这里,我们基本上为完成了数据的收集过程,即数据从业务侧收集到 Prometheus 侧,并且还学会了如何使用 Prometheus 自带的控制台。
文章首发于【陈树义】公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A
总结
这篇文章我们从 Prometheus 的原理入门,剖析了 Prometheus 实现的原理,并且用一个简单的例子从零实现了一套业务监控系统。通过 Prometheus UI,我们可以实时获取到机器的存活信息、CPU、内存信息。
文章首发于【陈树义】公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A
Prometheus 入门教程(一):Prometheus 快速入门的更多相关文章
- JasperReports入门教程(一):快速入门
		
JasperReports入门教程(一):快速入门 背景 现在公司的项目需要实现一个可以配置的报表,以便快速的适应客户的需求变化.后来在网上查资料发现可以使用JasperReports + Jaspe ...
 - spring boot入门教程——Spring Boot快速入门指南
		
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...
 - Spring Boot 2 快速教程:WebFlux 快速入门(二)
		
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 02:WebFlux 快速入门实践 文章工程: JDK 1.8 ...
 - Expression Blend实例中文教程(9) - 行为快速入门Behaviors
		
在Blend强大的设计功能支持下,设计人员和开发人员可以无代码实现Silverlight/WPF动画效果,例如上文介绍的StoryBoard,就是一个典型例子,设计人员和开发人员仅需提供必要元素,即可 ...
 - Expression Blend实例中文教程(2) - 界面快速入门
		
上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...
 - .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
		
写在前面 上篇文章我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概念!如果大家把前面几张都理解了 ...
 - .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
		
写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...
 - .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
		
写在前面 上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现.但 ...
 - Druid入门(1)—— 快速入门实时分析利器-Druid_0.17
		
一.安装准备 本次安装的版本是截止2020.1.30最新的版本0.17.0 软件要求 需要Java 8(8u92 +)以上的版本,否则会有问题 Linux,Mac OS X或其他类似Unix的操作系统 ...
 - emWin 2天速成实例教程000_如何快速入门ucGUI/emWin
		
备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...
 
随机推荐
- python3之range()
			
python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法(左闭右开) Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以 ...
 - java中变量在内存的位置
			
package day02; /* * 成员变量:在堆内存中,因为对象的存在,才在内存中存在:作用于整改类中 * 局部变量:在栈内存中:作用于函数中,或者语句中 * */ class car{ //描 ...
 - Redis Sentinel结构 及相关文档
			
Redis Sentinel是一个用来监控redis集群中节点的状态,不用来存储数据.当集群中的某个节点有故障时,可以自动的进行故障转移的操作.通常为了保证sentinel的高可用,sentinel也 ...
 - Tomcat源码分析(下载、启动)
			
1.下载Tomcat源代码: https://tomcat.apache.org/download-80.cgi 2. 解压以及创建必要目录和配置 解压.新建catalina-home目录,同时将目录 ...
 - Python基础 读取二进制文件
			
问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- ""&q ...
 - Combine 框架,从0到1  —— 4.在 Combine 中使用计时器
			
本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 4.在 Combine 中使用计时器. 内容概览 前言 使用计时器执行周期性的工作 将计时器转换为计时 ...
 - Charles抓包工具的用途及应用
			
Charles抓包工具的用途: 排查问题,测试异常情况 注意:Charles不能直接抓https请求的包,需要用https://www.jianshu.com/p/ec0a38d9a8cf这个方法去配 ...
 - CentOS 7安装SeaweedFS
			
1.从GitHub下载编译好的SeaweedFS 地址:https://github.com/chrislusf/seaweedfs/releases 选择linux_amd64.tar.gz的压缩包 ...
 - ribbon源码(3) 配置模块
			
ribbon的很多功能可以通过配置进行调整,ribbon通过IClientConfig来获取配置信息,用户可以通过实现IClientConfig来管理配置. ribbon也提供了默认的实现(Defau ...
 - 栈的Java实现-分别使用数组和链表
			
栈是非常重要的数据结构,栈具有后进先出的特点. 在JVM内部,每个线程维护一个栈,对于每个方法调用,入栈一个元素,成为栈帧,当方法执行完成后,对应的栈帧出栈. 栈帧中,也包含一个栈,称为操作数栈. 一 ...