Prometheus监控系统(1)Prometheus基础概念
一、监控系统介绍
监控的作用是持续不间断对系统或服务进行监视,确保被监控的对象处于一个正常稳定的运行状态。监控系统是确保系统稳定、高效运行的关键手段,能帮助运维人员提前发现问题、快速定位问题以及解决问题。一个合格的监控系统要包含事前预警、事后追溯、趋势分析、对比分析、数据可视化等核心特性。
在复杂的IT环境中,需要监控的指标非常多,可以分为硬件监控、系统监控、中间件监控、应用监控、业务监控。在云原生时代,监控系统从可观测性来说分为了指标监控(Metrics)、日志监控(Logging)、链路跟踪(Tracing)。指标监控记录的是一些随时间推移产生的可聚合数据,代表产品有老牌Zabbix和当下最火的Prometheus;日志监控记录了离散式的日志或事件,代表产品为ELK;链路跟踪则是对分布式应用调用链跟踪,代表产品有Zipkin、Jaeger、Pinpoint等。
监控系统可以分为白盒监控和黑盒监控,白盒监控是通过被监控对象的内部指标来分析问题的根本原因,通常能一眼快速定位到问题,而黑盒监控关注的是问题的表面现象,更多是站在用户的角度,关注他们在实际应用中可能发生的问题。
在监控过程中需要明确哪些指标是核心指标,需要重点关注。目前业界广泛采用了由谷歌提出的监控黄金指标,它们分别是延迟、流量、错误、饱和度。延迟是指服务请求成功的所需时长;流量是衡量服务的容量需求,如每秒处理的HTTP请求数或者数据库QPS;错误则是请求失败的情况;饱和度通常用来衡量资源的使用情况,如CPU、内存、磁盘资源情况。
二、Prometheus主要特性
Prometheus作为一款时序数据库(所谓时序数据是指按照固定时间周期对某些指标反复测量,最终得到一个数据集合,这些数据随着时间推移形成一个连续的序列,因此叫做时序数据),结合Alertmanager和Grafana构造出了目前最火的监控系统体系,其主要优势包含以下几点:
· 监控指标按照时间顺序排列存储,每个数据点都有一个时间戳,当要查询特点时间点的数据时可以非常快速找到,而不用遍历整个数据库
· 多种服务发现方式,对于动态资源的监控非常方便,并且原生支持K8S
· 可以结合Grafana绘出漂亮图形大盘,通过AlertManager或Grafana实现报警
· 不依赖分布式存储和额外的数据库,数据直接保存在本地。存储的数据格式是Key/Value形式,对存储消耗低,根据官方数据,每30秒记录百万条时间序列,并且保留60天,仅需要200G左右的磁盘空间(如果对历史数据有较高要求,可以结合Open TSDB)
· 周边插件丰富,如果对监控要求不是特别严格的话,默认的几个成品插件已经足够使用
· 本身基于数学计算模型,有大量的函数可用,可以实现很复杂的监控(需要有一定数学思维,独有的数学命令行导致上手难度较高)
· 可以嵌入很多开源工具的内部去进行监控,数据更可信
三、Prometheus数据采集方式
在Prometheus中,被监控端无需安装专门的agent,它只需要通过HTTP协议开放符合Prometheus规范的指标数据就可以让Prometheus顺利完成数据抓取。由于不是所有服务都能通过HTTP协议提供符合Prometheus规范的指标数据,所以Prometheus设计了3种数据采集方式
· Instrumentation:应用程序原生支持通过HTTP协议开放符合Prometheus规范的指标数据
· Exporer(导出器):使用exporter从应用中抓取到数据,然后完成数据转换,最后提供给Prometheus
· PushGateway:一些因为生命周期较短不方便被Prometheus抓取数据的应用,可以通过PushGateway主动将数据推送给Prometheus
四、Prometheus作业与实例
在Prometheus中被监控的对象被称为实例(Instance)、目标(Target)或者端点(Endpoint)。每个实例代表着一个独立的监控目标,通常由IP地址加端口号组合而成,如 localhost:9090。为了便于管理这些被监控对象,通常会将功能相似或者类型相同的对象放到同样一个组中,这个组被称为Job。比如可以将多个分布在不同服务器上的MySQL归类为同一个 mysql 的Job中,而后按照Job分组后的维度进行分析。
评论