专栏首页yeedomliu《Prometheus监控实战》第2章 Prometheus简介

《Prometheus监控实战》第2章 Prometheus简介

第2章 Prometheus简介


2.1 Prometheus起源

  • Prometheus的灵感来自谷歌的Borgmon。它最初由前谷歌SRE Matt T.Proud开发,并转为一个研究项目。在Proud加入SoundCloud之后,他与另一位工程师Julius Volz合作开发了Prometheus。后来其他开发人员陆续加入了这个项目,并在SoundCloud内部继续开发,最终于2015年1月将其发布
  • Facebook发现85%的查询是针对26小时内的数据

2.2 Prometheus架构

  • Prometheus通过抓取或拉取应用程序中暴露的时间序列数据来工作。时间序列数据通常由应用程序本身通过客户端库或称为exporter(导出器)的代理来作为HTTP端点暴露
  • Prometheus还有一个推送网关(push gateway)[3],可用于接收少量数据——例如,来自无法拉取的目标数据(如临时作业或者防火墙后面的目标)
  • Prometheus架构(图)

资料

  • [1] https://github.com/Lusitaniae/apache_exporter
  • [2] https://github.com/prometheus/mysqld_exporter
  • [3] https://github.com/prometheus/pushgateway

2.2.1 指标收集

  • Prometheus称其可以抓取的指标来源为端点(endpoint)。端点通常对应单个进程、主机、服务或应用程序。为了抓取端点数据,Prometheus定义了名为目标(target)的配置

2.2.2 服务发现

  1. 用户提供的静态资源列表
  2. 基于文件的发现。例如,使用配置管理工具生成在Prometheus中可以自动更新的资源列表
  3. 自动发现。例如,查询Consul等数据存储,在Amazon或Google中运行实例,或使用DNS SRV记录来生成资源列表

2.2.3 聚合和警报

  • Prometheus还可以定义警报规则。这些是为系统配置的在满足条件时触发警报的标准,例如,资源时间序列开始显示异常的CPU使用率。Prometheus服务器没有内置警报工具,而是将警报从Prometheus服务器推送到名为Alertmanager(警报管理器)[1]的单独服务器。Alertmanager可以管理、整合和分发各种警报到不同目的地
  • https://prometheus.io/docs/alerting/alertmanager/

2.2.4 查询数据

  • Prometheus服务器还提供了一套内置查询语言PromQL、一个表达式浏览器(如图2-2所示)以及一个用于浏览服务器上数据的图形界面
  • Prometheus表达式浏览器(图)

2.2.5 自治

  • 每个Prometheus服务器都设计为尽可能自治,旨在支持扩展到数千台主机的数百万个时间序列的规模。数据存储格式被设计为尽可能降低磁盘的使用率,并在查询和聚合期间快速检索时间序列

2.2.6 冗余和高可用性

  • 冗余和高可用性侧重弹性而非数据持久性。Prometheus团队建议将Prometheus服务器部署到特定环境和团队,而不是仅部署一个单体Prometheus服务器
  • Prometheus冗余架构(图)

2.2.7 可视化

  • 可视化通过内置表达式浏览器提供,并与开源仪表板Grafana集成。此外,Prometheus也支持其他仪表板

2.3 Prometheus数据模型

  • Prometheus收集时间序列数据。为了处理这些数据,它使用一个多维时间序列数据模型。这个时间序列数据模型结合了时间序列名称和称为标签(label)的键/值对,这些标签提供了维度。每个时间序列由时间序列名称和标签的组合唯一标识

2.3.1 指标名称

  • 时间序列名称[1]通常描述收集的时间序列数据的一般性质——例如,website_visits_total为网站访问的总数

2.3.2 标签

  • 标签为Prometheus数据模型提供了维度
  • 标签共有两大类
    • 插桩标签(instrumentation label):插桩标签来自被监控的资源——例如,对于与HTTP相关的时间序列,标签可能会显示所使用的特定HTTP动词。这些标签在由诸如客户端或exporter抓取之前会被添加到时间序列中
    • 目标标签(target label):目标标签更多地与架构相关——它们可能会识别时间序列所在的数据中心。目标标签由Prometheus在抓取期间和之后添加
  • 时间序列由名称和标签标识(尽管从技术上讲,名称本身也是名为__name__的标签)
  • 带有__前缀的标签名称保留给Prometheus内部使用

2.3.3 采样数据

  • 时间序列的真实值是采样(sample)的结果
    1. 一个float64类型的数值
    2. 一个毫秒精度的时间戳

2.3.4 符号表示

  • 时间序列表示为符号(notation)
  • 时间序列示例
  • 首先是时间序列名称,后面跟着一组键/值对标签。通常所有时间序列都有一个instance标签(标识源主机或应用程序)以及一个job标签(包含抓取特定时间序列的作业名称)

2.3.5 保留时间

  • Prometheus专为短期监控和警报需求而设计。默认情况下,它在其数据库中保留15天的时间序列数据。如果要保留更长时间的数据,则建议将所需数据发送到远程的第三方平台

2.4 安全模型

  • Prometheus可以通过多种方式进行配置和部署,关于安全有以下两个假设
    1. 不受信任的用户将能够访问Prometheus服务器的HTTP API,从而访问数据库中的所有数据
    2. 只有受信任的用户才能访问Prometheus命令行、配置文件、规则文件和运行时配置
  • 从Prometheus 2.0开始,默认情况下某些HTTP API的管理功能被禁用

2.5 Prometheus生态系统

  • 生态系统的核心是Prometheus服务器,此外还有Alertmanager,它为Prometheus提供警报引擎并进行管理
  • Prometheus项目还包括一系列exporter[1],用于监控应用程序和服务,并在端点上公开相关指标以进行抓取。核心exporter支持常见工具,如Web服务器、数据库等。许多其他exporter都是开源的,你可以从Prometheus社区查看

链接

  • [1] https://prometheus.io/docs/instrumenting/exporters/
  • [2] https://prometheus.io/docs/instrumenting/clientlibs/。(Prometheus客户端库)

2.6 参考链接

  • 官网:https://prometheus.io/
  • 文档:https://prometheus.io/docs/
  • GitHub主页:https://github.com/prometheus
  • GitHub源码:https://github.com/prometheus/prometheus
  • 参考视频:大规模Prometheus和时间序列设计(https://www.youtube.com/watch?v=gNmWzkGViAY)
  • Grafana官网:https://grafana.com

本文分享自微信公众号 - yeedomliu(yeedom_liu),作者:yeedomliu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Prometheus监控实战》第7章 可靠性和可扩展性

    yeedomliu
  • 《Prometheus监控实战》第10章 探针监控

    yeedomliu
  • 《Prometheus监控实战》第8章 监控应用程序

    yeedomliu
  • prometheus基础

    Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公...

    行 者
  • GitHub 热榜:适合初学者学习的 Prometheus 监控系统

    在前面的《GitHub 热榜:轻量级无 Agent 的自动化运维平台!》文章中,简单的描述了下传统运维以及到现在的运维所接触的监控平台,spug 是面向中小型企...

    杰哥的IT之旅
  • 一文了解Prometheus

    Prometheus 是一套开源的监控系统。设计思路来自于Google的borgmon 监控系统(由工作在 SoundCloud的Google 前员工在2012...

    用户1278550
  • Kubernetes上的“火眼金睛”——Prometheus的安装实录

    Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了集群化部署运行、自动资源调度,和动态水平伸缩等一系列完整功能。虽然Kube...

    JFrog杰蛙科技
  • 理解OpenShift(7):基于 Prometheus 的集群监控

    理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

    SammyLiu
  • 开源监控利器Prometheus初探

    Kubernetes作为当下最炙手可热的容器管理平台,在给应用部署运维带来便捷的同时,也给应用及性能监控带来了新的挑战。本文给大家分享一款十分火热的开源监控工具...

    yuanyi928
  • Prometheus HA详解

    以下所有操作都是在k8s集群中完成,如果你是VM或者物理机在配置方面不会有太大区别;

    笨兔儿

扫码关注云+社区

领取腾讯云代金券