
1) 【一句话结论】
构建Web服务监控体系需精准定义指标(如QPS、错误率、响应时间拆分阶段)、选型工具(Prometheus+Grafana)、设计告警规则(结合业务阈值)、通过Jaeger实现链路追踪,以平衡性能与监控效果,确保服务稳定并快速定位问题。
2) 【原理/概念讲解】
老师口吻解释核心概念:
3) 【对比与适用场景】
| 指标/工具 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| QPS | 每秒有效请求数(成功+失败) | 反映服务吞吐量 | 容量规划、性能评估 | 需区分有效请求,避免仅看成功数 |
| 错误率 | 失败请求数/总请求数(4xx/5xx) | 反映服务稳定性 | 故障排查、SLA达成 | 定义失败状态码,避免误判 |
| 响应时间 | 请求处理总耗时(网络+处理+数据库等) | 反映服务性能 | 用户体验优化、性能调优 | 拆分阶段,定位具体瓶颈 |
| Prometheus | 开源监控系统,拉模式采集指标,时间序列存储 | 自动发现、灵活查询、高可用 | 大规模微服务、动态环境 | 需Exporter暴露指标 |
| Grafana | 可视化平台,基于数据源生成图表 | 丰富模板、告警集成、多数据源 | 指标可视化、仪表盘展示 | 需配合数据源(如Prometheus) |
| Jaeger | 分布式追踪系统,记录Span | 端到端调用路径分析 | 定位慢请求、故障点 | 采样率控制成本,避免性能开销 |
4) 【示例】
假设有一个API服务(如/api/v1/user/profile),定义指标:
http_requests_total{method="GET", path="/api/v1/user/profile"}(成功请求)、http_requests_total{method="GET", path="/api/v1/user/profile", status="5xx"}(失败请求)。http_requests_total{method="GET", path="/api/v1/user/profile"}[5m](QPS)和sum(rate(http_requests_total{method="GET", path="/api/v1/user/profile", status="5xx"}[5m])) / sum(rate(http_requests_total{method="GET", path="/api/v1/user/profile"}[5m]))(错误率),设置阈值线(如QPS>1000或错误率>5%)。http_requests_total{method="GET", path="/api/v1/user/profile"}[5m] > 1000或sum(rate(http_requests_total{method="GET", path="/api/v1/user/profile", status="5xx"}[5m])) / sum(rate(http_requests_total{method="GET", path="/api/v1/user/profile"}[5m])) > 0.05时,发送告警。start_span("get_user_profile", "GET /api/v1/user/profile", ...),上传到Jaeger服务器,通过UI查看Trace,分析慢请求(如数据库查询耗时过长)。5) 【面试口播版答案】
构建Web服务监控体系,核心是端到端覆盖。首先定义关键指标:QPS(每秒有效请求数,反映吞吐量)、错误率(失败请求占比,4xx/5xx状态码,反映稳定性)、响应时间(拆分为网络延迟、业务处理、数据库查询等阶段,反映性能)。选型工具:用Prometheus拉模式采集这些指标,存储为时间序列;用Grafana可视化,生成仪表盘。告警规则上,通过Alertmanager设置阈值(如QPS超过1000或错误率超过5%),触发告警。链路追踪用Jaeger,记录请求在微服务间的调用路径,通过Span和Trace分析慢请求或故障点。这样能快速定位问题,优化服务,确保稳定运行。
6) 【追问清单】
7) 【常见坑/雷区】