prometheus命令_Prometheus入门教程(一):Prometheus 快速入门

点击蓝色“陈树义”关注我哟

e6e794edb02512a2965be6f4bdf0b2fe.png

Prometheus 是任何一个高级工程师必须要掌握的技能。那么如何从零部署一套 Prometheus 监控系统呢?本篇文章将从 Prometheus 的原理讲起,手把手带你用一个最简单的例子部署一套 Prometheus 监控系统。

基本原理

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

959f6d58b45bbe843281cb8e18ea25d7.png

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

  • Prometheus 服务器

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

  • NodeExporter 业务数据源

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

  • AlertManager 报警管理器

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

  • 可视化监控界面

Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示。

简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。 但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。

d69536a1284046ebbdab0a5c9ccada3e.png

快速入门

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

安装运行 Prometheus 服务端

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

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

a83d3ce2ca9254df3785ea918058472a.png

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

0b9ec31c491395eab09dedb5dffdfad1.png

其中 data 目录是数据的存储路径,也可以通过运行时的 --storage.tsdb.path="data/" 命令另行指定。Prometheus.yml 是 Prometheus 的配置文件,prometheus 是运行的命令。

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

./prometheus --config.file=prometheus.yml

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

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 自带的监控管理界面。

f7fbc8f45e8a57f034b54d7e83bfdcfc.png

运行 NodeExporter 客户端数据源

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

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

7b0dc500443e90b47ce44770686ac71e.png

下载解压后运行 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/ 可以看到以下页面:

2b5987c4d795a48776e462f2816b75c4.png

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

7f106ae2b35239da99f99232e62896f1.png

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

# 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」并且点击执行按钮以后,可以看到如下结果:

fe0ff79a8f014af95cd61b0973a2a88a.png

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

up{group="production",instance="localhost:8080",job="node"} 1

例如查看我们所运行 NodeExporter 节点所在机器的内存使用情况,可以输入 node_memory_active_bytes/(1024*1024*1024) 查看。

b996a88b98b7e52e81786c4235f02aa6.png

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

f9bed94d41bfd5b0532b363bc555b3b1.png

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

总结

这篇文章我们从 Prometheus 的原理入门,剖析了 Prometheus 实现的原理,并且用一个简单的例子从零实现了一套业务监控系统。通过 Prometheus UI,我们可以实时获取到机器的存活信息、CPU、内存信息。


推荐阅读

  • Prometheus 系列开篇:为什么要学 Prometheus ?

  • 你总是遗憾,是因为你还没想好,你的一生想怎么过?

  • 搞 Java 的年薪 40W 是什么水平?

  • 闪送,为何能比顺丰送得更快?

  • 类似SMART原则的思考模型,到底有什么用?

  • 我是高敏感的人,你呢?

  • 矫枉必须过正

  • 为什么用Markdown,而不用Word?

  • 你解决的问题,比你写的代码更重要!

  • 如何做到长远思考?

3fc3aa092458b007e2598159870de0ad.png

公众号@陈树义,用最简单的语言,分享我的技术见解。

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

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

相关文章

WordPress在前台文章页添加后台编辑该文章按钮

在完善主题(wpsite 主题)的过程中,碰到这样一个问题,如何给 wordpress 文章页面添加一个编辑按钮呢?也就是当用户登录并有权限的时候,可以直接点击该按钮去后台编辑该文章,这对于陌小雨这种有一…

android的progressDialog 的使用。android数据异步加载 对话框提示

在调用的Activity中定义一个全局的 progressDialog 点击按钮的时候调用下面这句 progressDialog ProgressDialog.show(SearchActivity.this, "请稍等...", "获取数据中...", true); 在异步加载完成的时候 progressDialog.dismiss()转载于:https://www.cnb…

Java不定参数

先看两个简单的例子,来感受一下Java的不定长度参数 第一个例子: Java代码 public class VariArgs { public static void main(String[] args) { test(); test("aaa"); test("aaa", "bbb&q…

参数估计_随机微分方程的参数估计(一)

随机微分方程,俗称SDE,相信点进来的同学们肯定对这个概念不感到陌生。SDE呢,是对现实生活中一些随机波动的事物的建模,比如可以用几何布朗运动(GBM)来模拟股价变化,用CIR模型来模拟利率波动。然而一个很现实的问题就是…

「mysql优化专题」主从复制面试宝典!面试官都没你懂得多!(11)

内容较多,可先收藏,目录如下: 一、什么是主从复制 二、主从复制的作用(重点) 三、主从复制的原理(重中之重) 四、三步轻松构建主从 五、必问面试题干货分析(最最重要的点&#xff09…

为什么WordPress网站应尽量避免使用过多插件

前几天,我们在给一个客户优化其企业网站时,发现其网站使用了太多的WordPress插件。WP插件可以扩展网站的功能;然而如果使用不当,也会给网站带来一些负面的影响。在这篇文章中,WPChina.org就给大家介绍一下,…

OracleApps Dropship 流程

做的一个Dropship流程的实录(包括流程期间遇到问题的解决)What are the advantages of Drop Shipment Orders?These are the benefits: No inventory is required Reduced order fulfillment processing costs Reduced flow times Elimination of losses on non-sellable …

word取消下一页_word文档页码设置及文中小箭头清除办法

在很长一段时间里,朋友圈流传的这样一段话:世人慌慌张张,不过图碎银几两;可偏偏就是这几两碎银,能免饥荒,能定安康 ,能解世人惆怅。。。问:word怎么从第二页开始加页码答&#xff1a…

html语义

1、<Hx> <h1>、<h2>、<h3>、<h4>、<h5>、<h6>,作为标题使用&#xff0c;并且依据重要性递 减。 <h1>是最高的等级。 2、<p>作为段落 利用行高(line-height)很容易的定义出行间距 3、<ul>、<ol>、<li>…

一起写框架-Ioc内核容器的实现-对象的调用-属性注入容器的对象(十)

实现功能 需求&#xff1a;在类的成员属性使用Autowirde注解注入容器中的对象。 实现思路 要实现这个功能。我们首先要思考一个问题&#xff1a;类与类的关系是在调用的建立的&#xff0c;还是说在创建对象的时候就就将建立了&#xff1f; ---我实现的方案是&#xff0c;在在程…

2064: 分裂 - BZOJ

Description 背景&#xff1a; 和久必分&#xff0c;分久必和。。。 题目描述&#xff1a; 中国历史上上分分和和次数非常多。。通读中国历史的WJMZBMR表示毫无压力。 同时经常搞OI的他把这个变成了一个数学模型。 假设中国的国土总和是不变的。 每个国家都可以用他的国土面积代…

android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集

一、前言近年来&#xff0c;混合开发越来越流行&#xff0c;App 与 H5 的打通需求也越来越迫切。那什么是 App 与 H5 打通呢&#xff1f;所谓 “打通”&#xff0c;是指 H5 集成 JavaScript 数据采集 SDK 后&#xff0c;H5 触发的事件不直接同步给服务端&#xff0c;而是先发给…

渐渐褪色的彩虹 好像一个梦

渐渐褪色的彩虹 好像一个梦 ——初梦 好像从来没写过游记呢...就权当记流水账随便写一些吧 11.10 Day 0 期待又紧张&#xff0c; 像以前一样坐高铁&#xff0c; 车上打了打几个板子&#xff0c;抵达广州&#xff0c; 时间过的真快啊... 到达酒店&#xff0c; 这也许又(?)是我…

php 开发框架 (资料收集)

PHP最流行的框架是Laravel, Symfony, CodeIgniter, Yii 1 and 2&#xff0c;Phalcon 和其他一些&#xff0c;这些工具能帮你创建功能强大而整洁的应用程序 Laravel与thinkPHP的异同点 主要区别:(thinkPHP更适合国人的编码习惯) TP5更简单实用&#xff0c;文档丰富&#xff0c;…

Android的Button按钮,ACTION_UP事件不触发解决方案

在android 编程时&#xff0c;有时候要实现当Button一直按下的时候&#xff0c;执行一些逻辑代码&#xff0c;当按钮弹起的时候&#xff0c;终止这些逻辑代码的执行。 比如在 设置页面的滑动开关时&#xff0c;如果不监听ACTION_CANCEL&#xff0c;在滑动到中间时&#xff0c;如…

简单人物画像_你真的理解用户画像吗?| 船说

“「设计师沙龙」是ARK下半年开始逐渐形成的传统&#xff0c;由ARKers自发组织&#xff0c;分为视觉和交互两类&#xff0c;每月各举办一次。大家围绕一个话题展开&#xff0c;聊聊行业最新案例和工作上的心得&#xff0c;帮助大家共同进步。ARKers表达的观点均为个人见解&…

try catch线程问题???

try。。。catch 在遇见异常是会开启一个新的线程&#xff0c;用来处理异常&#xff0c;转载于:https://www.cnblogs.com/Flyrun/p/7828788.html

thinkphp 3 升到 thinkphp 5 或更高 ( 资料收集)

https://www.cnblogs.com/shy-/p/10447827.html thinkphp3.2升级至thinkphp5.0.24 view文件# 修改文件名# 把tp3.2.3\app\module\view文件夹下所有文件夹拷贝至tp5\app\module\view打开cmd命令窗口&#xff0c;cd至view文件夹下&#xff0c;执行dir /b 1.bat使用notepad打开…

emoji表情引发的JNI崩溃

今天突然接到客服那边的反馈说&#xff0c;有玩家反馈进游戏后不久就崩溃了&#xff0c;我先是怀疑网络问题&#xff0c;因为一连接聊天成功后就挂了。之后用logcat抓日志&#xff0c;发现挂在jni那里了 JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8…