监控系统简介:使用 Prometheus 与 Grafana

注:本文虽以 Docker 进行演示,但 Docker 并不是必须的,相关软件也可以直接安装到计算机上

背景

如果我们是Web应用的开发者,会对响应时间、接口的稳定性等比较敏感,在站点尚未部署到生产环境时,我们有充足的时间来进行调试、分析哪些接口需要优化。但当应用发布后,想要继续跟踪,可能需要通过日志记录请求和响应时间、记录响应状态码等,然后通过其它工具进行分析外,或是与其它一些分析工具进行集成。

另外现在十分流行的大屏:比如最近曝光的12306监控中心,大屏上显示出的当日售出车票数量、移动端和Web端订票比例、线路热度等信息;还有每年双十一,各大电商的大屏显示出交易总金额、热卖榜等等。

可以发现,上面列出的各点皆为指标:响应时间、成功率等我们可以理解为技术指标,当日售出车票数量、交易总金额等则是业务指标。当我们定义好指标后,需要有收集这些指标的方式,我们采用监控的方式来采集数据。当然,若是某些值超出了阈值,还需要及时发出警报,但这不在本文的讨论范围内了。最后再将监控到的内容进行展示(可视化),就需要用到本文的两个主角 —— Prometheus 和 Grafana。

Prometheus

Prometheus is an open-source systems monitoring and alerting toolkit

-- Prometheus Overview


Prometheus 是一款开源的监控和警报工具包

—— 译自 Prometheus Overview

为什么选择 Prometheus

Prometheus 的几大特点:

  • 多维数据模型,时间序列数据由指标名称和键/值对标识

  • 提供能在多维度上灵活查询的 PromQL 语言

  • 不依赖分布式存储,单服务器节点自治(single server nodes are autonomous)

  • 基于 HTTP PULL(拉取)的方式采集时序数据

  • 可通过中间网关推送时序数据

  • 可通过服务发现或静态配置要采集的目标服务器

  • 支持多种图表和仪表盘

相比 InfluxDB 等时序数据库,Prometheus 内置了时序、监控和通知等功能。

安装Exporter和Prometheus

首先安装 Exporter,Exporter 将监控的各种指标以 HTTP 的方式暴露出来。这里通过 Docker 来安装和运行

docker run -d -p 9100:9100 prom/node-exporter

然后就能通过 http://localhost:9100 来访问它,点击下方的 Metrics 链接,页面上就会将相关指标以文本的形式展示出来。

安装 Prometheus 前需要先将配置文件准备好,新建一个 prometheus.yml 文件

global:scrape_interval: 15sscrape_configs:- job_name: prometheusstatic_configs:- targets: ['localhost:9090']labels:instance: prometheus- job_name: node_exporterstatic_configs:- targets: ['10.0.0.150:9100']labels:instance: node_exporter

scrape_interval 为抓取间隔时间,下面配置了两个 job,并以 static_configs 的方式配置了两个目标: localhost:9090 (后面要安装的 Prometheus,意思是监控自己)和 10.0.0.150:9100(监控 node_exporter。注意,这里的 10.0.0.150 是计算机的内网 IP,请根据实际情况修改)

接下来安装 Prometheus,因为 prometheus.yml 配置文件需要映射到 Docker 容器中,记得把硬盘设置为共享

docker run -d -p 9090:9090 -v "D:\docker\prometheus\prometheus.yml:/etc/prometheus/prometheus.yml" --name prometheus prom/prometheus

通过浏览器访问 http://localhost:9090 就能访问 Prometheus 了,我们先看一下监控的目标是否已经上线,访问 http://localhost:9090/targets 应该能看到 node_exporter 和 prometheus 两个目标。State 是 Up 表示已经上线,如果是 Unknown 可以稍等一会儿再刷新。Labels 部分显示了配置文件中配置的 job 以及 instance,后面查询的时候会用到。

当到了抓取的时间,Prometheus 就会去访问目标的 /metrics 页面将相关指标采集并储存。

指标类型

Prometheus 提供了四种指标类型

  • Counter 计数器,只增不减,重启后清零。可用于记录请求数量、已完成任务的数量、错误数量等。

  • Gauge 仪表盘,可增可减。可用于记录当前温度、当前内存占用值等。

  • Histogram 直方图

  • Summary 摘要

关于直方图和摘要,都用于统计和分析样本的分布情况,这里引用 prometheus-book 中关于它们的介绍:

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如CPU的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统API调用的平均响应时间为例:如果大多数API请求都维持在100ms的响应时间范围内,而个别请求的响应时间需要5s,那么就会导致某些WEB页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。


为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在0~10ms之间的请求数有多少而10~20ms之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram和Summary都是为了能够解决这样问题的存在,通过Histogram和Summary类型的监控指标,我们可以快速了解监控样本的分布情况。


—— prometheus-book 使用Histogram和Summary分析数据分布情况

之前我们访问过 http://localhost:9100/metrics 指标页面,节选如下:

# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 162
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

# TYPE 一行末尾体现了指标类型,非 # 开头的行内容为:指标名称、标签(花括号内的部分)和样本值。Prometheus 以时间序列的方式储存数据,即每个样本是按照时间顺序储存的,在 Prometheus 储存的这些样本内容中包含了:指标,时间戳及样本值。

PromQL

PromQL 是 Prometheus 的查询语言,我们访问 http://localhost:9090 时能看到查询页面。在 Expression 中输入

promhttp_metric_handler_requests_total

并按下回车,可以看到这样的结果,这段 PromQL 将该指标的指标和样本值进行了返回

因为 node_exporter 和 prometheus 都提供了名为 promhttp_metric_handler_requests_total 的指标,若想只看 node_exporter 的该指标,则在 PromQL 中加上花括号来过滤 Labels 即可:

promhttp_metric_handler_requests_total{instance="node_exporter"}

当然,PromQL 的内容远不止这些,待日后再记录。

Grafana

Grafana 是一款数据可视化工具,先来直观的感受一下吧,也可以访问 Grafana Live Demo 体验。

好了,先来安装 Grafana,这里映射了一个本地文件夹到容器中

docker run -d -p 3000:3000 -v "D:\docker\grafana:/var/lib/grafana" --name grafana grafana/grafana

然后通过 http://localhost:3000 访问 Grafana,默认用户名密码均为 admin。

首先进入 Home 页面,选择 Add data source 添加我们的 Prometheus 作为 Grafana 的数据源。需要注意的是,如果和我一样使用 Docker,那么 Prometheus 的 URL 不能写 localhost,需要填写计算机的内网 IP 。

我们已经通过 Prometheus 采集了一批数据样本,现在只需要添加一个新报表来呈现。在左侧栏中依次选择 Create - Dashboard,然后选择 Add Query(如果显示的是 Panel,把鼠标移动到 Panel Title 上,会出现菜单,选择 Edit 来编辑它)。

将数据源(Query)修改为刚刚添加的 Prometheus 后,Metrics 中输入和刚刚在 Prometheus 里一样的 PromQL 语句 promhttp_metric_handler_requests_total{instance="node_exporter"} 然后按下回车,可视化的数据就生成了。

本文到此就结束了,简单的介绍了 Prometheus 和 Grafana。后面还会介绍往 ASP.NET 中添加指标,并让 Prometheus 来抓取,以及 PromQL 等的详细内容。

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

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

相关文章

7500 cpuz跑分 i5_核心硬盘 i5 7500性能测试_DIY攒机酷品测试-中关村在线

下面我们进入CPU测试环节。为保测试性准确可靠,以下测试均采用Windows 10 1周年版 64位正版系统,且不对操作系统进行任何优化,用以获取最大的系统稳定性与兼容性。Intel 酷睿i5 7500i5 7500 CPU-ZFritz Chess BenchmarkFritz Chess Benchmark…

Android Ap 开发 设计模式第七篇:生成器模式

Builder Pattern 模式解读 生活在深圳这所高速发展的城市,高楼大厦林立。所谓万丈高楼平地起,在我们感慨楼层的高耸之外,更要配服楼层的建造者和设计者。大楼首先得打稳地基、搭建骨架,再由下往上一层层盖上去。而这样的架构从程序…

MySQL 创始人:写代码比打游戏还爽,程序员应该多泡开源社区

编者按:根据StackOverflow的最新调查,MySQL仍然是全世界最流行的数据库,受访的开发者中有44.3%的人在使用,超过了第二位的SQL Server 10多个百分点。可是你知道MySQL是怎么诞生的吗?openocean 的一篇有关MySQL开发者Mi…

tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10

一、配置系统管理(Admin Web Application)大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin …

祝福!微软 46 周年生日快乐!

46 年前的今天,即 1975 年 4 月 4 日,比尔盖茨(Bill Gates)和保罗艾伦(Paul Allen)共同创立了微软公司。他们是小时候认识的朋友及高中同学,并对电脑编程充满激情。1975 年 1 月,MIT…

荐书 | 没有数学思维的程序员不是好的问题解决者

今天小木给大家推荐以下五本关于数学历史或数学思维的名家著作。读者推荐:01《这才是最好的数学书》[日] 笹部贞市郎55.00赠:《谁谋杀了希尔伯特教授》数学漫画随机一本《神笔涂绘》内容简介:有人曾请教笹部贞士郎,是如何引领近代…

java反射sethaha_Java反射深度测试

通过反射API构造对象,并使用反射调用方式访问对象的public/private方法和字段。package lavasoft.test;/*** 测试的业务类** author leizhimin 2010-5-6 20:16:10*/public class MyService {private String msg;public MyService() {System.out.println("log: …

监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

回顾在《监控系统简介:使用 Prometheus 与 Grafana》一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型、PromQL 以及 Grafana 可视化工具的基本用法。今天这一篇我们将在 ASP.NET Web API 项目中进行实战&#xf…

剧透人生!你什么时候结婚换工作甚至狗带,Facebook都知道

来源:大数据文摘即将换工作?要结婚了?有亲人朋友要去世了?你关心的这些人生重大节点,有人希望比你提前知道它们何时发生,并基于此对你精准投放广告。惊悚?这是Facebook在2010年以来提交的一系列…

如何在 NET 程序万种死法中有效的生成 Dump (下)

一:背景 上一篇我们聊到了如何通过 procdump 抓取 cpu爆高 和 内存暴涨 两种情况,这一篇再聊聊如何去抓程序 挂死 和 意外退出。二:程序挂死 1. 定义程序挂死 简单的说就是程序没有响应,既然没响应了,可能 死锁, 可能 …

C++程序运行时内存布局之--无继承情况下的虚函数

2019独角兽企业重金招聘Python工程师标准>>> 虚函数是C实现多态的关键,没有虚函数,C只能是OB,不能完成OO。 本文介绍的是没有继承情况下,带有虚函数的类在内存中布局,以及其实例(对象&#xff0…

纠结学哪种编程语言?请看这个回答

各位童鞋,如果最近/未来几年有人还纠结学习哪种编程语言,那你可以请他/她参考一下这个 Quora 帖子的最高赞回答:> 能找一份工作:Java> 能找一份高薪工作:C> 啥样工作都能找到:Python> 总能找到…

NET问答: 有最干净利落的读写文件方式吗?

咨询区 ApprenticeHacker:在 C# 中有很多种读写文件的方式 (文本文件,非二进制)。为了践行 do more, write less 的思想,现寻找一种最简单最少代码量的方式,因为在我的项目中有太多的功能需要读写文件了。回答区 vc 74&#xff1a…

写好一份数据分析报告的13个要点

先说说写一份好的数据分析报告的重要性,很简单,因为分析报告的输出是你整个分析过程的成果,是评定一个产品、一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了。我认为一份好的分析报…

oracle11g安装和基本的使用,手把手看图教你用起来。

前面技术架构和系统选型说到了使用oracle,看到园友们一些评论。我也不想卖弄,不想争论什么数据库好。喜欢就是理由,用了多年了为何不可。 我可以想象,大家没有使用oracle的原因可能有以下几点: 被oracle价格吓破胆的有…

java高并发类_Java 高并发之魂

前置知识了解Java基本语法了解多线程基本知识知识介绍Synchronized简介:作用、地位、不控制并发的后果两种用法:对象锁和类锁多线程访问同步方法的7种情况:是否是static、Synchronized方法等Synchronized的性质:可重入、不可中断原…

.NET 开源配置组件 AgileConfig 初体验

介绍在微服务大行其道的今天,系统会被拆分成多个模块,作为单独的服务运行,同时为了集中化管理,我们还需要日志中心,配置中心等,很多开发人员可能更熟悉 ApolloConfig,这个组件功能也很完善&…

来领资料咯!计算机专业教科书礼包

现在计算机行业越来越火爆,技术的更新也越来越快,不好好充实自己的话,就会被淘汰。小编这几年一直有意识地收集计算机行业相关的书籍,现在已经拥有5G左右的资料,如C、Java、Python、机器学习、网页开发Web Dev、数据分…

Asp.Net Core 5 REST API - Step by Step(一)

翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 [1]在本文中,我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序,在其中我们可以添加、编辑、删除和查看待办事项,并且将使用 SQLite 来存储数…

身为程序员碰到最奇葩的需求是怎样的?

梁大折腾部门老大:你,做个微信小游戏吧我:啥样的?老大:反正你就做个小游戏吧,这个火我:?????柔情领导:那个运维啊,你来把他…