注:本文虽以 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 等的详细内容。

监控系统简介:使用 Prometheus 与 Grafana相关推荐

  1. 普罗米修斯监控系统_基于Prometheus和Grafana的监控平台 - 环境搭建

    导读 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据.比如 ...

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

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  3. 几款流行监控系统简介

    由于业务的多样性,平台和系统也变得异常的复杂.如何对其进行监控和维护是我们 IT 人需要面对的重要问题.就在这样一个纷繁复杂的环境下,监控系统粉墨登场了. 今天,我们会对 IT 监控系统进行介绍,包括 ...

  4. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)

    一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip influxdb-1.2.2_windows_amd64.zip grafana-4.2.0.wind ...

  5. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)--转

    原文地址:http://www.cnblogs.com/liugh/p/6683488.html 一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip in ...

  6. 运维监控系列(1)- IT监控系统简介

    运维监控系统 监控系统是实现自动化运维的基础,在一个IT环境中会存在各种各样的设备,例如,硬件基础设施需要监控:软件运行状态需要监控:程序中的API需要监控:程序执行脚本需要监控:以及数据库的慢查询需 ...

  7. ZABBIX 企业级分布式监控系统 1 监控系统简介

    了解复杂IT系统的运行状态 监控系统分为两部分:     数据采集         主动模式(上报)(服务器开销小)         被动模式(采集)(服务器开销大)(专用客户端或公用协议)     ...

  8. 城市地下综合管廊环境监控系统简介

    地下综合管廊是将电力.电信.燃气等各种管线集于一体,从而保证城市的正常运转的"主动脉". 城市中的地下综合管廊在使用的过程中,为了保证所有的项目能够平稳地运行,要对综合管廊的环境做 ...

  9. Prometheus( 普罗⽶修斯) 监控系统----介绍安装、Grafana出图

    Promethus(普罗⽶修斯)监控系统 能够安装prometheus服务器 能够通过安装node_exporter监控远程linux 能够通过安装mysqld_exporter监控远程mysql数据 ...

最新文章

  1. 【BZOJ3196】Tyvj 1730 二逼平衡树
  2. 解读高效的神经架构搜索ENAS
  3. 中国汽车零部件行业需求预测及投资前景建议报告2022-2028年版
  4. Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)
  5. ajax 乱码问题 以及Response.charset=GB2312
  6. unable to execute dex:GC overhead limit exceeded unable to execute dex:java heap space 解决方案
  7. 重载运算符操作_学习
  8. ps中如何同图层获取css代码
  9. Git在windows环境下的使用教程
  10. npumpy.insert(arr, obj, values[, axis])
  11. C 编译器、链接器、加载器详解
  12. Sequence operation3397
  13. 记一次网络访问故障排查
  14. 软工网络15团队作业4-DAY2
  15. python 密度聚类_Python密度聚类算法-DBSCAN实践
  16. qq微信连不上服务器6,手机wifi连接上了只有QQ微信能联网其他软件都上不了网是什么原因...
  17. Ruoyi 整合Flowable UI Modeler 6.7.2
  18. 接口管理平台 - APIPOST和APIfox使用 - PUSDN
  19. 《Python编程:从入门到实践》配套资源 官方网站免费下载
  20. 大趋势:科技赋能产业

热门文章

  1. 通过java类的反射机制获取类的属性类型
  2. Linux 常用命令:文本查看篇
  3. solidity事件详解
  4. npm 安装 chromedriver 失败的解决办法
  5. 关于电商购物车与订单
  6. 研究生计划-心得征程
  7. jq select操作全集
  8. head rush ajax chapter4 DOM
  9. javasript 面向对象
  10. 食疗去除头屑的小偏方 不错!