-
什么是Prometheus
-
官网:Overview | Prometheus
-
是一个开源的系统监控和警报工具,多数Prometheus组件是Go语言写的
-
为用户提供可视化仪表板、警报、告警等功能,以帮助用户快速定位和解决问题
-
现在已经成为一个独立于企业级的开源项目和一个独立的基金会(Cloud Native Computing Foundation)的一部分
-
用途
-
Kubernetes集群监控
-
使用Prometheus可以收集和监控Kubernetes集群的指标数据,例如CPU、内存、网络等。
-
使用Prometheus Operator部署Prometheus,然后通过Grafana可视化工具展示监控指标的仪表板
-
-
网络监控
-
Prometheus可以监控网络的状态和性能,例如TCP连接数、网络延迟和带宽利用率等
-
使用Prometheus的Blackbox Exporter插件来执行网络探测,检查网络服务是否可用
-
-
应用程序性能监控
-
通过Prometheus的客户端库可以在应用程序中嵌入指标收集代码,并收集应用程序的性能指标数据
-
例如请求数、响应时间、错误率等,帮助开发人员监控应用程序的性能,并进行调试和优化
-
-
数据库监控
-
可以使用Prometheus的Exporter插件监控各种类型的数据库,例如MySQL、PostgreSQL、Redis和MongoDB
-
Exporter可以将数据库的指标数据转换为Prometheus可以处理的格式,并将其发送到Prometheus进行监控和警报
-
-
服务器监控
-
使用Prometheus可以监控服务器的CPU、内存、磁盘和网络使用情况等指标,服务器上运行的各种服务的状态和性能
-
能够实时地存储和查询系统和服务的各种指标,如性能、CPU利用率、内存使用和请求计数等。
-
-
-
-
架构图
-
什么是时序数据库
-
是一种特定类型的数据库,随时间流逝而不断产生的数据,主要用来存储时序数据
-
常见的有InfluxDB、Kdb+、Prometheus、Graphite、TSDB
-
主要分为时间戳(timestamp)、标签(tag)、存档(filed)三大部分,按照时间顺序记录数据
-
-
核心组成部分
-
Prometheus server
-
核心组件,负责抓取、存储和查询指标数据,提供API以供访问
-
Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中
-
内置的UI界面,通过这个UI可以直接通过PromQL实现数据的查询以及可视化
-
-
Exporter
-
Prometheus插件或独立组件,负责抓取指定服务或系统的性能指标数据
-
Prometheus原理是通过 HTTP 协议周期性抓取被监控组件的状态,输出这些被监控的组件的 Http 接口为 Exporter
-
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,将其公开为HTTP端点或指定的格式
-
Prometheus server通过轮询或指定的抓取器从Exporter提供的Endpoint端点中提取数据
-
-
Alertmanager
-
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,就会产生一条告警
-
Prometheus告警管理器组件,负责管理告警规则、通知和报警策略的设置,提供第一类和第二类警报的分类管理服务
-
-
PushGateway
-
Prometheus数据采集基于Pull模型进行设计,在网络环境必须要让Prometheus Server能够直接与Exporter进行通信
-
当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转
-
通过PushGateway将内部网络的监控数据主动Push到Gateway当中
-
Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据
-
-
Service Discovery
-
服务发现功能,动态发现待监控的Target,完成监控配置的重要组件
-
-
-
总结
-
Prometheus服务直接通过目标拉取数据,或者间接地通过中间网关拉取数据
-
并通过一定规则进行清理和整理数据,把得到的结果存储到新的时间序列中
-
利用PromQL和其他API可视化地展示收集的数据
-