“不懂监控的运维不是好 SRE不会 Prometheus 的开发者难称云原生。”在当今微服务、容器化、Kubernetes 主导的云原生时代可观测性Observability已成为系统稳定运行的核心支柱。而在这其中Prometheus几乎是每个 DevOps 和 SRE 团队的标配工具。今天我们就用一篇保姆级、零基础、手把手的技术长文带你从“完全没听过”到“能部署、会查询、懂告警”真正掌握这个 CNCF 毕业项目——Prometheus一、Prometheus 到底是什么简单来说Prometheus 是一个开源的监控与告警系统 时间序列数据库TSDB。它由 SoundCloud 在 2012 年开发2016 年加入 CNCF云原生计算基金会成为继 Kubernetes 之后第二个毕业的项目足见其重要地位。核心定位拉取式Pull-based监控主动从目标服务抓取指标。多维数据模型每条数据由指标名 多个键值对标签labels唯一标识。自带存储引擎无需依赖外部数据库单机即可运行。强大的查询语言 PromQL支持复杂的时间序列分析。灵活的告警机制通过 Alertmanager 实现通知路由。✅ 它不是日志系统那是 ELK / Loki 的事也不是链路追踪那是 Jaeger / Zipkin 的领域而是专注于Metrics指标监控。二、Prometheus 能做什么想象一下这些场景你的 API 接口响应时间突然飙升某个 Pod 内存使用率突破 90%数据库连接池耗尽导致服务雪崩服务器 CPU 负载持续高于阈值Prometheus 就是用来提前发现、量化、预警这些问题的典型应用场景场景Prometheus 如何帮助基础设施监控监控服务器 CPU、内存、磁盘、网络等配合 Node Exporter应用性能监控APM通过埋点暴露 HTTP 请求量、延迟、错误率等指标Kubernetes 集群监控自动发现 Pod、Service、Node并采集资源使用情况自定义业务指标如订单创建数、用户活跃度、缓存命中率等自动化告警当指标异常时自动发送邮件、钉钉、企业微信通知一句话总结只要能用数字衡量的东西Prometheus 都能监控三、Prometheus 核心功能玩法1️⃣ 多维数据模型Multi-dimensional Data ModelPrometheus 中的数据不是简单的“数值”而是带有丰富上下文的时间序列。例如http_requests_total{methodPOST, handler/api/order, status200, instance10.0.0.5:8080}http_requests_total指标名Metric Name{...}标签Labels用于多维度切片、聚合每个唯一标签组合 一条独立的时间序列 这使得你可以轻松回答“过去5分钟/api/order 接口的 POST 请求成功率是多少”2️⃣ PromQLPrometheus 查询语言这是 Prometheus 的灵魂比 SQL 更适合时间序列分析。常用操作示例# 查看所有 HTTP 请求总量 http_requests_total # 过去5分钟的平均请求速率每秒 rate(http_requests_total[5m]) # 错误率 1% 的接口 rate(http_requests_total{status~5..}[5m]) / rate(http_requests_total[5m]) 0.01 # CPU 使用率需配合 node_exporter 100 - (avg by (instance) (irate(node_cpu_seconds_total{modeidle}[5m])) * 100)PromQL 支持聚合sum, avg, max, count函数rate, increase, predict_linear标签匹配,!,~,!~二元运算 - * /3️⃣ 服务发现 配置管理Prometheus 通过prometheus.yml配置文件定义监控目标。静态配置示例scrape_configs: - job_name: my-app static_configs: - targets: [localhost:8080, 192.168.1.10:9090]动态服务发现如 Kubernetes- job_name:kubernetes-pods kubernetes_sd_configs: -role:pod relabel_configs: -source_labels:[__meta_kubernetes_pod_annotation_prometheus_io_scrape] action:keep regex:true只要 Pod 注解中包含prometheus.io/scrape: true就会被自动发现并监控4️⃣ 告警AlertingPrometheus 本身不发通知而是将告警规则评估结果推送给Alertmanager。告警规则示例rules.ymlgroups: -name:example rules: -alert:HighRequestLatency expr:job:request_latency_seconds:mean5m{jobmyapp}0.5 for:10m labels: severity:warning annotations: summary:High request latency on {{ $labels.instance }}Alertmanager 负责去重、分组静默、抑制发送通知Email、Webhook、钉钉、Slack 等四、Prometheus 使用技巧避坑指南 技巧 1合理设置 scrape_interval默认 15s高频服务可设为 5s低频批处理任务可设为 60s过高频率会增加负载过低会丢失细节 技巧 2善用 relabeling通过relabel_configs动态修改标签可用于过滤、重命名、添加环境信息如 prod/staging 技巧 3控制数据保留时间默认保留 15 天可通过--storage.tsdb.retention.time30d调整长期存储建议对接 Thanos 或 Cortex 技巧 4避免高基数High Cardinality不要将用户ID、请求ID等作为标签会导致内存爆炸标签应是有限枚举值如 status200, regionus-east 技巧 5使用 Grafana 可视化Prometheus 自带 UI 较简陋Grafana Prometheus 黄金搭档社区有大量 Dashboard 模板如 Node Exporter Full、K8s Cluster五、Prometheus 学习资源 工具汇总 官方资源官网https://prometheus.ioGitHubhttps://github.com/prometheus/prometheus官方文档中文https://prometheus.fuckcloudnative.io非官方但优质 快速体验Docker 一键启动docker run -d \ --nameprometheus \ -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus访问http://localhost:9090即可进入 Web UI 常用 Exporter指标暴露器Exporter用途node_exporter监控主机资源CPU/内存/磁盘blackbox_exporter探测 HTTP/TCP/ICMP 可用性mysqld_exporterMySQL 监控redis_exporterRedis 监控 可视化工具Grafanahttps://grafana.comPrometheus 自带 Graphhttp://localhost:9090/graph 社区交流CNCF Slack #prometheus 频道中文社区知乎、掘金、微信公众号搜索 “Prometheus”Stack Overflow 标签[prometheus]结语为什么你必须学 Prometheus云原生事实标准Kubernetes 生态默认监控方案轻量、自治、易集成单二进制文件无外部依赖生态强大Exporter 丰富Grafana 支持完美职业竞争力DevOps/SRE/后端工程师必备技能行动建议今天就用 Docker 跑起来加一个 Node Exporter写一条 PromQL你会发现——“原来监控可以如此优雅”关注我下期带你实战《用 Prometheus Grafana 监控你的个人服务器》