监控的重要性,相信大家都是非常有体会的,监控能力对于所有的软件系统来说也是必不可少的。有的监控能力是产品内置的,有的是基于 SaaS 提供的。监控是系统上线之后,保证系统稳定性的重要手段,运维的主要的工作入口就是监控和告警。随着云原生的广泛使用,以及最近这些年微服务体系的建设,各种业务系统的微服务化,部署规模,运维难度等因素对业务运行的可观测性要求是越来越高了。

在这个背景下,我们需要更好的利用监控,日志,链路等技术帮助平台和业务系统搭建可用的观测能力,结合观测性以及统一的告警能力就可以辅助打造出企业级的统一运维平台。接下来,我们就来聊聊监控的成熟技术 - Prometheus,以及分享一些我们使用 Prometheus 的方式方法。

为什么要使用 Prometheus

首先,Prometheus 是目前社区最热的开源监控告警解决方案,2016 年加入 CNCF(Cloud Native Computing Foundation),成为了继 Kubernetes 后的第二个明星项目。截止目前,最新版本 2.30,有超 5000 的代码合并请求,8967 次代码提交记录,GitHub 的 star 已经达到了 38.8k。

相比较于老牌的监控告警解决方案,Prometheus 有如下优势:

  • CNCF 已经毕业的明星产品;

  • 对云原生的支持是所有监控方案里最好的;

  • 几乎所有的云原生内置的监控能力都是基于 Prometheus;

  • 已经被很多的公司采用,并得到了大规模使用验证;

  • 部署方便,不依赖外部组件,能适用企业各种场景;

  • 采集精度高,可以精确到 1~5 秒;

  • 支持很多实用的计算函数;

  • 可以快速集成社区已经成熟 exporter;

  • 能跟 Grafana 很好的结合,绘制各种高大上的图;

  • 可根据自身业务快速自定义 metrics;

  • 定义了适用各种场景的数据类型。

Prometheus 架构

以上是 Prometheus 的架构图,我理解它主要分为三个部分:采集层、数据处理层、数据查询层。

采集层

数据的采集之前,首先需要解决的是采集目标是怎样知道的,Prometheus 提供了比较丰富的采集目标发现机制,比如基于配置文件的发现机制,基于 Kubernetes 的发现机制等等。对于数据采集的方式,主要分为两种方式,一种是 exporter 的 pull 机制,是指应用本身暴露能获取监控指标能力的接口,或者特定能采集应用数据的 exporter,然后 Prometheus server 通过访问 exporter 获取到监控数据信息,这种方式是主流的使用方式,也就是 pull 模式。另一种是通过 Push Gateway 的 push 机制,是用户主动将数据推送到 Push Gateway 组件,然后 Prometheus server 通过 Push Gateway 获取到数据,这种是比较传统的 push 模式。

数据处理层

数据处理层主要是指 Prometheus server 本身,主要分为三个部分,Retrieval 负责定时去暴露监控指标的目标上抓取数据,Storage 负责将数据写入磁盘,promQL 暴露查询数据的 http server 能力。同时他也会根据告警规则,一旦达到阈值,那么就会向 Alertmanager 推送告警信息,然后由 Alertmanager 对接到外部平台,将应用异常信息推送给用户。

数据查询层

数据查询层是指,可以通过 Prometheus UI 访问 Prometheus server 能力。或者结合 Grafana,将 Prometheus 作为数据源接入,在 Grafana 自定义模版,以图表的方式展示应用指标的状态变化,以便于更加直观地观测应用的变化。

Prometheus数据类型有哪些?

Counter(只增不减的计数器)、 Gauge(可增可减的仪表盘)、 Summary(分析数据分布情况)以及 Histogram(分析数据分布情况)。

Counter

社区:A counter is a cumulative metric that represents a single monotonically increasing counter whose value can only increase or be reset to zero on restart. For example, you can use a counter to represent the number of requests served, tasks completed, or errors.

Counter 一个累加指标数据,这个值随着时间只会逐渐的增加,比如程序完成的总任务数量,运行错误发生的总次数。常见的还有交换机中 snmp 采集的数据流量也属于该类型,代表了持续增加的数据包或者传输字节累加值。

Gauge

社区:A gauge is a metric that represents a single numerical value that can arbitrarily go up and down.

Gauge 代表了采集的一个单一数据,这个数据可以增加也可以减少,比如 CPU 使用情况,内存使用量,硬盘当前的空间容量等等。

Summary & Histogram

场景:在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统API调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在 0~10ms 之间的请求数有多少,而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在。通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。

企业监控需求怎样借助社区力量?

开箱即用的社区 exporter,如使用 node_exporter,就可以轻松采集主机信息,如下图所示:

更多 exporter 使用,可以参考:https://prometheus.io/docs/instrumenting/exporters/#third-party-exporters

对于社区没有 exporter 支持的,可以自己实现 exporter 的方式,来完成系统监控能力。

对于需要兼容传统 push 方式的 metrics 收集,可以使用 Push Gateway,将数据推送到 Push Gateway,即可快速实现指标采集,以下为采集本机进程数的脚本实现,如下图所示:

云原生平台 - 监控能力体系

以下就以一个云原生平台自身监控能力建设为例,为大家展示如何利用 Prometheus 构建云原生可观测能力。

需求来源

云原生监控所需要的能力是,能监控平台所管理的不同类型集群,如 OCP(Openshift Container Platform)、Kubernetes。监控指标需要涵盖集群整体资源使用情况、集群组件运行状态、集群主机运行状态、命名空间的资源使用情况、运行在集群上的应用的运行情况、应用所包含的容器组的运行情况等。

需求分析

根据需求,需要的是多集群管理能力下,能查看集群的监控信息。所以可以将监控能力划分为如下的监控粒度,同时拓展了平台组件监控能力,即本云原生自身平台所包含的组件的运行情况,也就会有如下图所示的结构。

云原生平台引入 Prometheus

云原生平台 需要异构多种类型集群的监控,并且要自定义 Grafana 模版。因为每种类型集群的架构设计是不同的,所包含的组件也是不同的,如 OCP 相对于 Kubernetes 来说,Scheduler 和 Controller Manager 是在一个组件中的。这就需要针对每种类型集群,根据集群组件所暴露不同指标键值,使用不同的模版。

当然,如果是 Prometheus 联邦将多个类型集群监控数据汇总到一个 Prometheus,那么只需要一个 Grafana 接入 Prometheus 汇聚层即可。如果需要将多个数据源接入到一个 Grafana,也是可以的,在这种条件下,就需要平台制定数据源名称规则,在数据查询时,传入数据源属性。

云原生平台已有设计是一个类型的集群拥有一个 Grafana 属性,需要建设的主要能力是集群监控。在纳管集群时,需要在集群中安装云原生平台自定义的监控模版。对于集群本身的监控,我们形成了自己的指标说明文档,针对模版图展示,提供了中文化的界面,方便用户查看监控图表。

所以结合现有情况,方案如下:

用户访问的时序图

  1. 集群管理员在安装集群时,将自定义的 Grafana 安装到集群中,并配置 Prometheus-operator 安装的 Prometheus server 作为 Grafana 的数据源;

  2. 集群管理员访问云原生平台,纳管集群,根据对应集群安装的 Grafana,填写 Grafana 根地址,作为集群属性;

  3. 云原生UI提交集群信息到云原生服务端,服务端验证集群信息,并验证 Grafana 访问可达性;

  4. 云原生服务端验证信息后,将数据做持久化存储;

  5. 用户访问云原生平台监控中心,选择纳管集群查看监控信息;

  6. 云原生 UI 根据用户界面选择,向服务端发送请求;

  7. 服务端根据集群标识获取对应的集群 Grafana 属性,并根据用户查询参数,转换为 Grafana 模版访问地址;

  8. 云原生 UI 根据服务端返回的 Grafana 地址,访问获取到自定义模版,界面展示。

云原生平台监控中心

集群概览

如集群概览监控信息,展示集群当前 CPU 内存使用情况、最近 CPU 使用、 CPU 配额、 内存使用、 内存配额,并且在集群整体概览下,以命名空间为维度,如下图所示:

集群组件监控

如集群组件监控,根据集群下拉选择要查看的集群组件,即可查看组件监控信息,以下为 Kubernetes 类型集群中的 controller manager 组件监控信息,除了基本的如 CPU、内存、存储的监控信息,还包括了组件特有信息,如队列的监控信息。

平台组件监控

如平台组件监控,主要展示的是自身组件的一些基本信息,如启动时间,CPU 使用,内存使用,堆栈信息,如下图所示:

应用如何实现监控能力?

Prometheus 对主流语言实现了客户端库的封装,通过客户端库,企业可以根据自己的业务需求,实现不同维度,适合自身应用业务的监控体系。以我们自己的实践来和大家分享一下,Golang 和 Python 开发语言来构建监控能力的方法。

Golang 客户端库构建监控能力

社区案例代码

Golang 应用程序构建监控能力,用到的客户端主要是 client_golang,示例代码如下图所示,详细使用见:https://github.com/prometheus/client_golang

案列代码

Python 客户端库构建监控能力

社区代码案例

Python 应用程序构建监控能力,pip 安装客户端包后,导入包,即可快速自定义监控指标。同时,客户端还对 WSGI、ASGI 等做了特定支持。如果使用 Push Gateway,可以使用 “push_to_gateway” 方法,指定 Push Gateway 地址和端口,即可将数据 Push 到 Push Gateway。更多详细使用可以参考:https://github.com/prometheus/client_python

案例代码

社区发展

Prometheus 能力已经慢慢为大家所熟知,基于社区各种成熟的 exporter,企业能快速集成,开箱即用。同时在云原生领域还有一些和 Prometheus 密切相关的技术,比如为了更加方便的安装和使用 Prometheus,社区发起了 Prometheus Operator 的项目, 比如为了解决 Prometheus 的高可用性,社区引入了 Thanos 和 Prometheus Federation 方案。除此之外,观测性方向的技术和方案也在不断的发展,其中,具有代表性的就是 OpenTelemetry,其中也涵盖了 metrics 相关的能力,但是这些能力和 Prometheus 本身是可以互补的,共同打造社区完整的可观测性方案和能力。

文章来源:道客船长,点击查看原文

Kubernetes线下实战与CKA培训

本次培训在北京开班,基于最新考纲,理论结合实战,通过线下授课、考题解读、模拟演练等方式,帮助学员快速掌握Kubernetes的理论知识和专业技能,并针对考试做特别强化训练,让学员能从容面对CKA认证考试,使学员既能掌握Kubernetes相关知识,又能通过CKA认证考试,理论、实践、考证一网打尽,学员可多次参加培训,直到通过认证。点击下方图片或者阅读原文链接查看详情。

Prometheus 监控案例详解相关推荐

  1. Prometheus监控系统详解

    一.监控原理简介 监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警. 从监控对象的角度来看,可以将监控分为网络监控.存储监控.服务器监控和应用监控等. 从程序设计的角度 ...

  2. rsync+inotify实现实时同步案例详解

    rsync+inotify实现实时同步案例详解 转自:http://chocolee.blog.51cto.com/8158455/1400596 随着应用系统规模的不断扩大,对数据的安全性和可靠性也 ...

  3. python代码案例详解-我用Python抓取了7000 多本电子书案例详解

    安装 安装很简单,只要执行: pip install requests-html 就可以了. 分析页面结构 通过浏览器审查元素可以发现这个电子书网站是用 WordPress 搭建的,首页列表元素很简单 ...

  4. python代码案例详解-第7.20节 案例详解:Python抽象类之真实子类

    第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义了图形 ...

  5. java同步方法完成案例_Java同步代码块和同步方法原理与应用案例详解

    本文实例讲述了java同步代码块和同步方法.分享给大家供大家参考,具体如下: 一 点睛 所谓原子性WOmoad:一段代码要么执行,要么不执行,不存在执行一部分被中断的情况.言外之意是这段代码就像原子一 ...

  6. 《微信小程序:开发入门及案例详解》—— 3.4 小结

    本节书摘来自华章出版社<微信小程序:开发入门及案例详解>一 书中的第3章,第3.4节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.4 小 ...

  7. Zabbix5.0监控系统安装详解

    Zabbix5.0监控系统安装详解 一.Zabbix介绍 二.Zbbix的LAMP环境安装 1.防火墙和SElinux配置 2.安装LAMP环境 三.安装Zabbix软件 四.Zabbix的Mysql ...

  8. 代码检查规则:Python语言案例详解

    在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...

  9. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

最新文章

  1. 云计算,能回答地球最终流浪到哪里吗?
  2. 项目中使用oracle序列
  3. python【数据结构与算法】动态规划详解从背包到最长公共子序列(看不懂你来打我)
  4. yolov5 v3.0训练出现KeyError错误
  5. 用云服务器实现janus之web端与web通话!
  6. maven 打包jar_Maven一定要会的这几个知识!
  7. 为eclipse在线安装svn
  8. Linux集群在银行信息化中的应用(2)
  9. win10搭建无盘服务器配置,win10电脑搭建无盘工作站
  10. 《房地产周期》pdf、mobi、epub、txt下载
  11. Unable to establish SSL connection.
  12. DIY ROV系列(五)水下机器人通信系统
  13. 在国内外市场均遭遇挫折的OPPO和vivo该反思了
  14. 常见编程代码命名风格
  15. Google Earth Engine(GEE)提取不透水面的方法
  16. linux中grep的用法
  17. bulldog-1靶机 write up 源码 MD5解密得到密码到后台 命令执行绕过 反弹shell string分析文件得到密码提权
  18. ACLR 相邻频道泄漏比
  19. php 银行卡归属,银行卡归属地查询
  20. 如何理解线性判别分类器(LDA)?

热门文章

  1. 小鹤双拼鹤形教程-by小鹤双拼输入法QQ群友-45℃的回忆
  2. 百度盈利模式的弱点在哪里
  3. 雷军 50 岁身价破 1000 亿:决定人生胜负的,是这 5 条规律
  4. Python+ASAquick+PSIPred蛋白质序列特征计算,ASAquick安装调用(Linux)
  5. 喜报云报销与携程商旅达成战略合作 联手打造一站式差旅管理服务
  6. 快速将MP3音频转换为WAV的软件
  7. 唉~看看google搜索的两个关键字的结果吧
  8. FFplay文档解读-7-比特流过滤器
  9. 回忆2018年高教杯数学建模大赛
  10. 《游戏机制——高级游戏设计技术》一2.4 渐进型游戏