原文作者:IT有意思

原文地址:Prometheus(普罗米修斯)——适合k8s和docker的监控系统

目录

1、介绍

2、监控原理

3、监控指标

4、系统架构

5、功能用途

6、面临挑战


1、介绍

Prometheus(普罗米修斯)是一套由SoundCloud公司开发的开源的监控、报警、时间序列数据库的组合,近几年随着k8s的流行,prometheus成为了一个越来越流行的监控工具,是现在重要的云原生监控平台之一,它允许企业从任何基础设施或应用组件收集和处理指标数据,用于监控容器化工作负载。它以较低的系统资源要求实现了丰富的自定义和灵活的查询。如果需要,它还可以通过一台服务器同时从数千台计算机中获取大量数据。

2、监控原理

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。普罗米修斯由保存在单个服务器上的三个主要组件构成:时间序列数据库、数据检索worker、Web服务器。数据检索worker用于发现Kubernetes中的目标,并从正在进行的作业或用于短期作业的推送网关中获取指标,然后将这些指标推送到数据库,从那里可以通过HTTP访问指标以进行查询和警报。

3、监控指标

它与Kubernetes和云原生生态系统中的其他组件集成,通过监控数据可以帮助企业收集和处理四种类型的指标:

  • 计数器(counter)只能增加或重置为零的累积指标。对于完成任务,错误或请求数量之类的措施很有用。
  • 量规(gauge)可以增加或减少的时间点指标。对于并发请求或当前内存使用情况等措施很有用。
  • 直方图(histogram)一种指标,用于对数据进行采样并将观察结果分类为自定义组。对于诸如请求持续时间,或响应大小之类的聚合指标很有用。它还可以显示Apdex分数,用于评估应用程序的性能和用户满意度。
  • 摘要(summary)一种指标标准,可对数据进行采样并返回观测值的总数,值的总和以及观测值的四分位数。普罗米修斯摘要对于获得具有统计意义的四分位数的指标概述非常有用。

4、系统架构

为了稳定运行,普罗米修斯必须将各种组件集成到其架构中。由于它的灵活性,这些组件会因我们的具体实现而异,但是应始终包含以下的元素。架构如下图所示:

  • 客户端库:客户端库可以将直接检测添加到服务代码中,然后它会根据普罗米修斯的指标类型返回指标数据,可以用于大多数流行语言包括Go,Java,Python和Ruby。
  • 导出器(Exporter):导出器能够从无法添加直接检测的服务和组件中收集数据,例如:数据库、操作系统内核、路由器、云资源。有众多官方支持的导出器以及第三方导出器。导出器与服务同时运行,并充当普罗米修斯与服务之间的代理。这些Exporter接受普罗米修斯请求,从服务中收集数据,将数据转换为正确的格式,然后将其返回给数据检索worker。
  • 服务发现:普罗米修斯既可以静态配置指标目标,也可以通过服务发现机制动态定位目标。这样可以确保在整个系统中收集指标,同时涵盖业务流程创建者动态创建,以及停用的所有组件和资源。为了完成服务发现,普罗米修斯允许我们与许多现有方法集成,包括Kubernetes,HashiCorp Consul和所有主要云提供商所使用的方法。
  • 抓取(Scraping):在普罗米修斯中,抓取是从端点收集指标的实际过程。当普罗米修斯的数据检索worker通过HTTP发送抓取请求时,即可完成这项操作。当仪器库(instrumentation)或导出器收到这些请求时,将发送包含适当数据的响应。通常,响应还附带特定的抓取数据。该数据可以包括请求花费了多长时间,以及抓取是否成功。
  • 存储:普罗米修斯包括在本地磁盘时间序列数据库上的持久存储,还可以通过远程读/写API将其与远程存储集成。在持久性存储中,数据被分为两个小时的块,最终进行压缩。收集数据时,会将其存储在内存中并通过预写日志(WAL)进行记录,以防止由于服务器故障而造成的丢失。
  • PromQL:PromQL是一种查询功能的查询语言,用于从普罗米修斯数据库中选择和汇总时间序列数据。
  • 记录规则和警报规则:普罗米修斯支持以下两种类型的规则,每种规则基于针对两个不同用例的PromQL查询记录规则会定期评估PromQL表达式,并将结果存储为单独的时间序列。这有助于分发汇总指标所需的工作,并加快计算复杂查询的可视化呈现时间。警报规则再次定义构成警报的条件,就像PromQL查询一样。通过与外部警报工具集成来发出实际警报。普罗米修斯发送规则中定义的PromQL查询的结果,并通过我们首选的通信路径分发这些结果,或者以任何其他方式“处理”警报。用于通知管理员特定情况发生的最常见的警报工具有Slack,PagerDuty,OpsGenie和VictorOps等。
  • 仪表板:普罗米修斯能够以几种不同的方式访问所收集时间序列数据的可视化。如可以使用内置的表达式浏览器进行即时查询和调试。但是,对于更广泛的报告,应该使用Grafana,控制台模板或其他能够从普罗米修斯检索数据的可视化工具。

5、功能用途

作用 解释 具体使用方法
监控业务层 Prometheus支持各个主流开发语言(Go、java、python、ruby官方提供客户端,其他语言有第三方开源客户端),可以通过客户端对核心业务进行埋点 Prometheu—监控Java应用
监控应用层 一些主流应用可以通过官方或第三方的导出器,来对这些应用做核心指标的收集,如监控redis、mysql

Prometheus应用—监控Redis

监控系统层 除了常用软件, prometheus也有相关系统层和网络层exporter,用以监控服务器或网络  
集成其他监控 prometheus还可以通过各种exporte,集成其他的监控系统,收集监控数据,如AWS CloudWatch,JMX,Pingdom等等。  
不要用Prometheus做什么 prometheus也提供了Grok exporter等工具可以用来读取日志,但是prometheus是监控系统,不是日志系统。应用的日志还是应该走ELK等工具栈。  

6、面临挑战

普罗米修斯用于监控Kubernetes和其他环境的强大工具,但并非没有挑战。这里总结了一些,供大家参考。

  • 存储。Prometheus所需的存储容量与要收集的指标标准和频率有直接关系。根据Kubernetes部署的大小,所需的存储量可能会迅速超过现有资源。解决这个问题没有绝对的办法。在预估资源时请注意这点。通过专用的普罗米修斯适配器使用第三方存储时,可以应用各种数据维护和生命周期策略。
  • 冗余。普罗米修斯使用单节点数据库来确保数据完整性。但是,这不允许冗余,并且如果磁盘发生故障,则可能导致数据丢失。要解决此问题,可以通过异步方法在外部复制数据,也可以运行普罗米修斯服务器的镜像。虽然都不是最佳的解决方案,但是两者都可以提供冗余。此外,还存在更复杂的普罗米修斯服务器集成的技术。
  • 没有事件驱动的指标。由于指标是被抓取(而不是推送)的,因此我们无法轻松实现事件驱动的指标。但是,可以使用普罗米修斯的Push Gateway收集由短期作业或批次推送的指标。为了模拟事件驱动的指标,可以频繁地scrape网关,尽管这可能会使服务器承压,但可以产生有用的数据。
  • 分段网络访问。根据我们的服务,可能会遇到访问限制或缺少外部访问的情况。对于指标范围,这通常需要多个普罗米修斯实例。要查看这些指标,然后需要访问不同的Grafana仪表板以使用联邦(Federation)将指标从你的实例聚合到单个服务器。
  • 长期存储。普罗米修斯提供本地存储,但不适用于长期存储。如果选择长期保留指标,则可能会严重降低查询性能。为避免这种情况,需要使用记录规则对指标数据进行细分,或者可以集成Thanos或Cortex等分布式数据库。

同系列文章推荐阅读:

监控工具—Prometheus—基础介绍

监控工具—Prometheus—安装部署

监控工具—Prometheus—监控Java程序

监控工具—Prometheus—监控Redis

监控工具—Prometheus—基础介绍相关推荐

  1. 监控工具—Prometheus—监控Redis

    原文作者:wyl9527 原文地址:Grafana Prometheus系统监控Redis服务 目录 1.下载redis_exporter安装包 2.解压安装 3.systemd管理redis_exp ...

  2. 监控工具—Prometheus—监控Java程序

    原文作者:青蛙小白 原文地址:Prometheus监控实践:使用Prometheus监控Java应用 目录 1.Prometheus JVM Client 2.Prometheus的服务发现 3.Gr ...

  3. 监控工具—Prometheus—安装部署

    原文作者:虎纠卫 原文地址:监控神器-普罗米修斯Prometheus的安装 目录 步骤1:安装go 语言环境 步骤2:在监控服务器上安装prometheus 步骤3:在系统层用作系统监控 步骤4:安装 ...

  4. Kubernetes更优雅的监控工具Prometheus Operator

    Kubernetes更优雅的监控工具Prometheus Operator [TOC] 1. Kubernetes Operator 介绍 在 Kubernetes 的支持下,管理和伸缩 Web 应用 ...

  5. 监控工具——Prometheus

    监控工具--Prometheus 普罗米修斯介绍 易于管理 监控服务的内部运行状态 强大的数据模型 强大的查询语言PromQL 高效 可扩展 易于集成 可视化 开放性 架构 服务端下载安装 安装包 测 ...

  6. golang roadrunner中文文档(一)基础介绍

    2021年5月24日14:34:05 golang roadrunner中文文档(一)基础介绍 golang roadrunner中文文档(二)PHP Workers golang roadrunne ...

  7. y70.第四章 Prometheus大厂监控体系及实战 -- Prometheus监控介绍(一)

    1.监控简介 亚马逊副总裁.CTO 沃纳 · 沃格斯(Werner Voegls)说过:"You build it,you run it,you monitor it." (你构建 ...

  8. day23:shell基础介绍 alias及重定向

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell基础介绍: shell是一个命令解释器,用于用户与机器的交互: 也支持特定的语法(逻辑判断,循环): 每个用户都 ...

  9. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

最新文章

  1. SharePoint 2010 各个常用级别对象的获取
  2. 谭浩强课后题之----输出10个数中最大的
  3. linux内核杂记(4)-线程(1)
  4. PHP中echo与print和print_r
  5. arcgis flex aqi 3大util
  6. zynqNet整体思路框架
  7. [tools]notepad++当前文件路径不是工作路径
  8. RSA客户端js加密服务器C#解密(含源码)
  9. openpyxl 列 插入_openpyxl 基本使用
  10. WINDOWS是如何在注册表里记录盘符分配的
  11. sql转化为int类型
  12. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案
  13. php图片存储内容读取,php读取和保存base64编码的图片内容
  14. AutoCAD二次开发(.Net)之加载某种线型(LineType)
  15. 计算机网络校园网网络设计报告,计算机网络课程设计报告-校园网的组建和应用...
  16. 研究私域玩法?你可以试试拼团模式
  17. IMS+金蝶K3搭建简易版本供应商协同管理平台(SRM)
  18. mysql repeat 游标_mysql循环结构 Repeat ... until循环中使用游标
  19. Ubuntu下安装为知笔记
  20. 三色螺旋线 -《跟小海龟学Python》案例代码

热门文章

  1. no persister for
  2. 关于程序设计语言(贴吧里很有意思的一个帖子)
  3. Java操作excel工具easyExcel
  4. Leetcode 77.组合
  5. 关于linux中的 秘钥认证 ,最清晰解读
  6. bzoj 3218: a + b Problem
  7. maven工程如何引用css和js文件
  8. [9]UITableView表视图1
  9. EF中的那些批量操作
  10. cocos2d-x 消类游戏,类似Diamond dash 设计