小阿轩yx-Prometheus监控系统部署

小阿轩yx-Prometheus监控系统部署

前言

  • Prometheus 由 Go 语言编写而成,采用 Pull 方式获取监控信息,并提供了多维度的数据模型和灵活的査询接口。
  • Prometheus 不仅可以通过静态文件配置监控对象,还文持自动发现机制,能通过 Kubernetes、Consl、DNS 等多种方式动态获取监控对象。
  • 在数据采集方面,借助 Go 语言的高并发特性,单机 Prometheus 可以采取数百个节点的监控数据;
  • 在数据存储方面,随着本地时序数据库的不断优化,单机 Prometheus 每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远程存储。

Prometheus 的架构介绍

起源

  • Prometheus 起源于 Soundcloud ,因为微服务迅速发展,导致实例数量以几何倍数递增,不得不考虑设计一个符合以下几个功能的监控系统
  • 多维数据模型,可以按照实例,服务,端点和方法之类的维度随意对数据进行切片和切块。
  • 操作简单,可以随时随地部署监控服务,甚至在本地工作站上,而无需设置分布式存储后端或重新配置环境。
  • 可扩展的数据收集和分散的架构,以便于可以可靠的监控服务的许多实例,独立团队可以部署独立的监控服务。
  • 转化为一种查询语言,可以利用数据模型进行有效的警报和图形展示。

但是,当时的情况是,以上的功能都分散在各个系统之中

直到 2012年 Soundcloud 某位大神启动了一个孵化项目,Soundcloud 才把所有功能集合到一起,这时也就有了 Prometheus。

  • Prometheus 是用 Go 语言编写,从一开始就是开源的。
  • 2016年 Prometheus 成为继 Kubernetes 之后,成为 CNCF(Cloud Native computing Foundation)第二个成员。

什么是 Prometheus

  • Prometheus 具有足够的通用性

可以监控各个级别的实例

  • 自己的应用程序
  • 第三方服务
  • 主机或网络设备

此外 Prometheus 特别适用于监控动态云环境和 Kubernetes 云原生环境。

但是要注意 Prometheus 并不是万能的,目前并没有解决下面的一些问题

  • 日志和追踪(Prometheus 只处理指标,也称为时间序列)
  • 基于机器学习或 AI 的异常检测
  • 水平扩展、集群化的存储

Prometheus 的运行原理

  • 通过 Http 协议周期性抓取被监控组件的状态。
  • 输出被监控组件信息的 Http 接口称为 exporter。
  • 常用组件大部分都有 exporter 可以直接使用
  • 比如 haproxy,Nginx,MSOL,Linux 系统信息(磁盘、内存、CPU、网络等)

Prometheus 组件构成

  • Prometheus 生态系统由多个组件构成,架构图

Prometheus server

  • 服务核心组件,采用 pull 方式收集数据,通过 http 协议传输。并存储时间序列数据

Exporters/Jobs

  • 负责收集不支持 Instrumentation 的目标对象的性能数据,并通过 HTTP 接口供 PrometheusServer 获取。

Node-Exporter

  • 用于收集各 node 节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。

Kube-State-Metrics

  • 为 prometheus 采集 k8s 资源数据的 exporter,通过监听 APIServer 收集 kubernetes 集群内资源对象的状态指标数据
  • 同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。
  • 需要注意 kube-state-metrics 只是简单的提供一个metrics 数据,并不会存储这些指标数据,所以可以使用 Prometheus 来抓取这些数据然后存储,主要关注的是业务相关的一些元数据
  • 比如 Deployment、Pod、副本状态等

cadvisor

  • 用来监控容器内部使用资源的信息,比如CPU、内存、网络 I/0、磁盘 I/O。

blackbox-exporter

  • 监控业务容器存活性。

Service Discovery

  • 服务发现,Prometheus 支持多种服务发现机制
  • 文件
  • DNS
  • Consul
  • Kubernetes
  • OpenstackEC2
  • 基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus 查询到需要监控的 Target 列表,然后轮循这些 Target 获取监控数据。

Alertmanager

  • 是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警

常见的接收方式有

  • 电子邮件
  • 微信
  • 钉钉

Pushgateway

  • 类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的server 拉取的中转站。
  • 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从Pushgateway 拉取数据

Grafana

  • 是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。
  • 官方库中具有丰富的仪表盘插件。

Prometheus 的特性

提供多维度数据模型和灵活的查询语言

  • 通过将监控指标关联多个Tag,来将监控数据进行任意维度的组合;
  • 提供 HTTP 查询接口;
  • 可以很方便的结合Grafana等组件展示数据。

支持服务器节点的本地存储

  • 通过 prometheus 自带的时序数据库,可以完成每秒千万级的数据存储。
  • 不仅如此,在保存大量历史数据的场景中,prometheus 还可以对接第三方时序数据库
  • 如 OpenTSDB 等。

定义了开放指标数据标准

  • 以基于 HTTP 的 Pull 方式采集时序数据,只有实现了 prometheus 监控数据格式的监控数据才可以被 prometheus 采集;
  • 并支持以 Push 方式向中间网关推送时序数据,能更灵活地应对各种监控场景。

支持通过静态文件配置和动态发现机制发现监控对象

  • 自动完成数据采集。
  • prometheus 目前已经文持 Kubernetes、consul 等多种服务发现机制,可以减少运维人员的手动配置环节。

支持多种多样的图表和界面展示

  • 比如 Grafana 等。

Prometheus 的工作流程

  • 配置监控目标:在 Prometheus 配置文件中定义监控目标及其相应的指标。
  • 拉取指标数据:Prometheus 会定期从监控目标拉取指标数据,并将数据存储到本地存储中。
  • 存储指标数据:Prometheus 会使用一种自定义的时间序列数据库(TSDB)存储指标数据,以便进行分析和查询。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值