一、系统介绍
1、什么是Prometheus?
Prometheus:不仅是一款时间序列数据库,在整个生态上还是一套完整的监控系统。同时,还涉及许多以“explore”命名的客户端数据采集工具以及pushgateway网关。
官网:https://prometheus.io/ 文献:https://prometheus.io/docs/introduction/overview/
中文文档:https://www.prometheus.wang/quickstart/
2、监控的作用
① 实时收集数据:监控工具能够实时收集关于系统、应用、网络等各方面的数据,包括性能指标、错误日志、用户行为等。
② 及时发现问题:通过实时数据收集和分析,监控系统能够在问题发生时迅速识别异常。
③ 及时处理:一旦监控系统发现问题,它可以触发报警机制,通知管理员或相关团队。
④ 为优化提供依据:监控数据不仅可以帮助发现问题,还可以为系统优化提供依据。
3、特性
由 metric 名称和 K/V 键值对标识的时间序列的多维数据模型
简单的查询语言 PromQL(TSDB数据库的查询语言)
不依赖分布式存储,单个服务节点自动治理
通过 http 的 pull 模型获取数据的时序集合
支持通过网关 push 时序数据
通过服务发现或者静态配置发现目标
支持多种图表和仪表盘模式
export : 是用来为被监控服务器开放一个数据采集端口的软件,安装在被监控主机上后会启动一个服务,允许Prometheus server端通过该端口拉取数据。
Prometheus具有自动加载配置文件的功能,无需重启整个服务程序。
二、架构及组件介绍
1、架构图
2、组件及功能说明
a、Prometheus Server
功能:数据抓取、存储、处理查询和触发告警。
子模块:
Retrieval(抓取模块):根据配置定期从监控目标(如 Exporters、应用程序)拉取指标数据。
Time Series Database(TSDB):高效存储时间序列数据(默认本地存储,支持远程写入)。
HTTP Server:提供 API 和 Web UI 用于查询(PromQL)和管理。
b、监控目标(Targets)
Exporters:将第三方系统(如 Node、MySQL、Redis)的指标转换为 Prometheus 可读格式。
示例:Node Exporter(主机监控)、cAdvisor(容器监控)。
Instrumented Applications:应用程序直接通过客户端库(如 Go、Java、Python)暴露指标。
暴露端点:http://:/metrics。
Pushgateway:处理短暂任务(如批处理作业)的指标推送。
任务将指标推送到 Pushgateway,Prometheus 再从 Pushgateway 拉取。
c、Alertmanager
Alertmanager是独立于Prometheus的一个告警组件,需要单独安装部署。Prometheus可以将多个Alertmanager配置为一个集群,通过服务发现动态发现告警集群中节点的上下线从而避免单点问题,Alertmanager也支持集群内多个实例之间的通信。
功能:接收 Prometheus Server 生成的告警,进行去重、分组、静默,并通过渠道(邮件、Slack 等)通知。
流程:
Prometheus Server 根据告警规则(alerting_rules.yml)触发告警。
告警发送至 Alertmanager。
Alertmanager 按配置的路由策略分发告警。
d、服务发现(Service Discovery)
作用:动态发现监控目标(如 Kubernetes Pods、云服务实例)。
支持的发现机制:
Kubernetes:自动发现集群内的 Pods、Services、Endpoints。
Consul/Etcd:基于服务注册中心发现目标。
文件发现:Prometheus会周期性地从文件中读取最新的target信息。通过 JSON/YAML 文件静态配置目标列表。
Prometheus可以使用Kubernetes的API获取容器信息的变化(如容器的创建和删除)来动态更新监控对象。
e、数据存储与远程集成
本地存储:会直接保留到本地磁盘,性能上建议使用SSD且不要保存超过一个月的数据。
远程存储:通过 remote_write 和 remote_read 集成外部存储(如 Thanos、Cortex、InfluxDB),解决长期存储和高可用问题。
3、工作流程
a、配置:定义抓取目标(scrape_configs)和告警规则(alerting_rules.yml)。
b、服务发现:动态识别需要监控的端点(如 Kubernetes Pod IP)。
c、数据抓取:Prometheus Server 定期(如 15s)从目标拉取指标(HTTP 请求 /metrics)。
d、存储:抓取的指标存储于本地 TSDB,支持压缩和分块管理。
e、查询与告警:
用户通过 PromQL 查询数据(如 rate(http_requests_total[5m]))。
触发告警规则时,发送告警至 Alertmanager。
f、告警处理:Alertmanager 过滤、分组并通知用户。
g、可视化:通过 Grafana 或 Prometheus Web UI 展示监控仪表盘。
4、局限及解决方案
三、安装
1、解压
Prometheus 官方提供了预编译的二进制版本,不需要进行编译,解压后就可以使用。
tar xf prometheus-2.5.0.linuxamd64.