# 什么是 Prometheus
[Prometheus](https://prometheus.io) 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF\([Cloud Native Computing Foundation](https://cncf.io/)\) 成员。
作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。
## 主要功能
* 多维 [数据模型](https://prometheus.io/docs/concepts/data_model/)(时序由 metric 名字和 k/v 的 labels 构成)。
* 灵活的查询语句([PromQL](https://prometheus.io/docs/querying/basics/))。
* 无依赖存储,支持 local 和 remote 不同模型。
* 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
* 监控目标,可以采用服务发现或静态配置的方式。
* 支持多种统计数据模型,图形化友好。
## 核心组件
* [Prometheus Server](https://github.com/prometheus/prometheus), 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
* [client libraries](https://prometheus.io/docs/instrumenting/clientlibs/),用于对接 Prometheus Server, 可以查询和上报数据。
* [push gateway](https://github.com/prometheus/pushgateway) ,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
* 各种汇报数据的 [exporters](https://prometheus.io/docs/instrumenting/exporters/) ,例如汇报机器数据的 node\_exporter, 汇报 MongoDB 信息的 [MongoDB exporter](https://github.com/dcu/mongodb_exporter) 等等。
* 用于告警通知管理的 [alertmanager](https://github.com/prometheus/alertmanager) 。
## 基础架构
一图胜千言,先来张官方的架构图

从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。
它大致使用逻辑是这样:
1. Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
3. Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
4. Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
5. 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。
## 注意
* Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
* Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个和 Prometheus 无法满足,可能需要采用专门的审计系统。
- 前言
- 修订记录
- 如何贡献
- Prometheus 简介
- Prometheus 是什么?
- 为什么选择 Prometheus?
- Prometheus 安装
- 二进制包安装
- Docker 安装
- 基础概念
- 数据模型
- Metric types
- 作业与实例
- PromQL
- PromQL 基本使用
- 与 SQL 对比
- 数据可视化
- Web Console
- Grafana
- Prometheus 配置
- 全局配置
- 告警配置
- 规则配置
- 数据拉取配置
- 远程可写存储
- 远程可读存储
- 服务发现
- 配置样例
- Exporter
- 文本格式
- Golang Sample Exporter
- Python Sample Exporter
- Node Exporter 安装使用
- Node Exporter 常用查询
- 其他 Exporter 介绍
- Pushgateway
- Pushgateway 是什么?
- 如何使用 Pushgateway?
- 数据存储
- Memory Store
- Local Store
- Remote Store
- Rule
- 如何配置
- Rule 触发逻辑
- Aleretmanager
- Aleretmanager 是什么?
- 如何实现告警分组和去噪
- 通过 Email 接收告警
- 通过 OneAlert 管理告警
- 通过 Webhooks 接收告警
- 其他告警接收方案
- 使用 Prometheus 实现主机运行状态监控的完整演示
- Target 配置
- Rule 配置
- Alertmanager 配置
- 演示功能
- Prometheus Tool
- Promu 介绍和使用
- Client SDK
- Prometheus 性能调优
- 通过 Metrics 查看 Prometheus 运行状态
- 通过日志分析 Prometheus 运行状态
- 通过调整启动参数优化性能
- Prometheus 与 JVM 监控
- JVM Exporter 安装
- JVM 数据查询
- Prometheus 与容器监控
- Docker 监控
- Rocket 监控
- Prometheus 与容器编排
- Kubernetes
- Docker Swarm
- Prometheus 与 DevOps
- 如何从 0 开发一个 exporter
- 使用 Webhooks 开发一个 alert receiver
- 产品化
- 高可用方案探讨
- 集群方案
- 主从方案
- v2.0 功能洞见
- 新功能
- 新存储架构
- 常见问题收录
- 如何热加载新配置?
- 为什么重启 Prometheus 过后,数据无法查询?
- 如何删除 Pushgateway 的数据?
- 为什么内存使用这么高?
- 为什么有数据丢失?
- Prometheus 如何通过认证后拉取数据?
