### **Prometheus 基础概念与架构**
1. **Prometheus 是什么?主要特点有哪些?** 
   - **答案**:Prometheus 是开源的监控与告警工具,专为云原生环境设计,支持多维度数据模型、灵活查询语言(PromQL)、拉模式(Pull)数据采集,适合微服务与容器化架构。 
   - **核心组件**:Prometheus Server(数据采集/存储/查询)、Alertmanager(告警处理)、Exporters(指标导出)、Pushgateway(短生命周期任务推送)、Grafana(可视化)。

2. **Prometheus 的数据模型是什么?** 
   - **答案**:由 **指标名称(Metric Name)**、**标签(Labels,键值对)**、**时间戳(Timestamp)**、**样本值(Value)** 组成。例如:`http_requests_total{method="GET", status="200"} 304`。

3. **Prometheus 的拉模式(Pull)与推模式(Push)有何区别?** 
   - **答案**: 
     - **Pull 模式**:Prometheus 主动从目标端点(如 Exporter)抓取指标,适合长期运行的服务。 
     - **Push 模式**:通过 Pushgateway 中转短生命周期任务(如批处理作业)的指标,避免数据丢失。

4. **Prometheus 的存储机制是什么?** 
   - **答案**:默认使用本地时序数据库(TSDB),按时间分块存储(Block),定期压缩合并旧数据。支持配置 `retention_time` 调整数据保留周期(如 `30d`),或通过远程存储(如 Thanos、Cortex)扩展。

5. **如何配置 Prometheus 抓取目标?** 
   - **答案**:在 `prometheus.yml` 中定义 `scrape_configs`,例如: 
     ```yaml
     scrape_configs:
       - job_name: 'node_exporter'
         static_configs:
           - targets: ['192.168.1.100:9100', '192.168.1.101:9100']
     ```

### **数据查询与 PromQL**
6. **PromQL 的作用是什么?** 
   - **答案**:用于查询、聚合、过滤时间序列数据,支持实时分析与告警规则定义。例如:计算请求速率 `rate(http_requests_total[5m])`。

7. **如何用 PromQL 过滤标签?** 
   - **答案**:通过 `{label=value}` 匹配,例如:`http_requests_total{method="POST", status="500"}` 筛选失败请求。

8. **如何计算指标的环比变化率?** 
   - **答案**:使用 `delta()` 或 `increase()` 结合时间范围,例如: 
     ```promql
     (increase(http_requests_total[1h]) / increase(http_requests_total[1h] offset 1h)) - 1
     ```

9. **如何聚合多个时间序列?** 
   - **答案**:使用 `sum()`、`avg()`、`max()` 等聚合函数,例如: 
     ```promql
     sum(rate(http_requests_total{job="api"}[5m])) by (method)
     ```

10. **如何排除特定标签的指标?** 
    - **答案**:使用 `!=` 或 `unless`,例如:`http_requests_total{status!="500"}`。

### **告警管理**
11. **Alertmanager 的作用是什么?** 
    - **答案**:处理 Prometheus 触发的告警,支持分组(Grouping)、抑制(Inhibition)、静默(Silencing)、路由(Routing)到不同接收方(如邮件、Slack)。

12. **如何配置告警规则?** 
    - **答案**:在 `alert.rules` 文件中定义,例如: 
      ```yaml
      groups:
        - name: high_latency
          rules:
            - alert: RequestLatencyHigh
              expr: avg(rate(http_request_duration_seconds_bucket{le="0.5"}[5m])) by (job) < 0.9
              for: 10m
              labels: severity=critical
              annotations: summary="High request latency on {{ $labels.job }}"
      ```

13. **告警分组(Grouping)的作用是什么?** 
    - **答案**:将同类告警合并为一条通知,避免告警风暴。例如:多个实例的磁盘空间不足合并为“磁盘空间不足”通知。

14. **如何临时静默(Silence)告警?** 
    - **答案**:通过 Alertmanager UI 或 API 配置静默规则,匹配特定标签的告警在指定时间内不发送通知。

15. **抑制(Inhibition)规则如何配置?** 
    - **答案**:当更高优先级告警触发时,抑制相关低优先级告警。例如:网络故障时抑制所有依赖该网络的服务器告警。

### **服务发现与集成**
16. **Prometheus 支持哪些服务发现机制?** 
    - **答案**:静态配置、文件发现、Consul、Kubernetes、DNS、EC2 等。例如:Kubernetes 服务发现自动抓取 Pod 指标。

17. **如何在 Kubernetes 中部署 Prometheus?** 
    - **答案**:使用 Helm Chart 或手动配置,通过 `kubernetes_sd_configs` 发现目标,例如: 
      ```yaml
      scrape_configs:
        - job_name: 'kubernetes-pods'
          kubernetes_sd_configs:
            - role: pod
          relabel_configs:
            - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
              action: keep
              regex: true
      ```

18. **如何监控 Prometheus 自身性能?** 
    - **答案**:通过内置指标(如 `prometheus_tsdb_head_series`、`prometheus_engine_queries`)监控内存、查询延迟、抓取成功率等。

19. **Prometheus 与 Grafana 如何集成?** 
    - **答案**:在 Grafana 中添加 Prometheus 数据源,使用 PromQL 创建仪表盘,支持实时可视化与告警。

20. **如何扩展 Prometheus 集群?** 
    - **答案**:通过联邦(Federation)水平扩展,或使用 Thanos/Cortex 实现全局视图与长期存储。

### **性能优化与故障排查**
21. **如何优化 Prometheus 抓取性能?** 
    - **答案**:调整 `scrape_interval`(默认 1m),减少不必要的指标或标签,使用服务发现动态管理目标。

22. **如何处理高基数标签问题?** 
    - **答案**:避免使用动态标签(如用户 ID),限制标签值数量,或通过 `recording rules` 预聚合数据。

23. **Prometheus 内存不足如何排查?** 
    - **答案**:监控 `process_resident_memory_bytes`,检查 `prometheus_engine_queries` 查询数量,优化查询或增加资源。

24. **如何解决数据丢失问题?**
    - **答案**:检查存储目录权限,确保 `retention_time` 设置合理,或配置远程存储备份。

25. **如何排查告警未触发问题?** 
    - **答案**:检查 Alertmanager 配置、告警规则表达式是否正确,确认 Prometheus 数据是否包含匹配的标签。

### **高级场景**
26. **什么是 Recording Rules?如何使用?** 
    - **答案**:预计算常用查询结果,提升查询性能。例如: 
      ```yaml
      groups:
        - name: record_rules
          rules:
            - record: job:http_requests:rate5m
              expr: sum(rate(http_requests_total[5m])) by (job)
      ```

27. **如何实现跨集群监控?** 
    - **答案**:通过联邦集群或 Thanos Sidecar 聚合多集群数据,实现全局视图。

28. **Prometheus 支持哪些通知渠道?** 
    - **答案**:邮件、Slack、Webhook、PagerDuty、OpsGenie 等,通过 Alertmanager 路由配置。

29. **如何备份 Prometheus 数据?** 
    - **答案**:定期备份存储目录(WAL 文件),或使用 Thanos/Cortex 远程存储方案。

30. **如何升级 Prometheus 版本?** 
    - **答案**:备份配置文件与数据,停止旧版本,部署新版本并验证功能,避免兼容性问题。

### **安全与权限**
31. **如何保护 Prometheus API 接口?** 
    - **答案**:使用 TLS 加密通信,配置 Basic Auth 或 OAuth2,限制 IP 访问。

32. **如何设置细粒度权限控制?** 
    - **答案**:结合 Kubernetes RBAC 或第三方工具(如 OPA)管理访问权限。

33. **如何审计 Prometheus 操作日志?** 
    - **答案**:通过 `prometheus_tsdb_wal_corruptions_total` 等指标监控,或集成日志系统(如 Loki)。

### **场景化问题**
34. **如何监控微服务架构?** 
    - **答案**:为每个服务部署 Exporter,使用服务发现自动抓取指标,通过标签区分服务实例。

35. **如何监控数据库性能?** 
    - **答案**:使用 MySQL Exporter、Redis Exporter 等导出指标,监控查询延迟、连接数等。

36. **如何监控容器化应用?** 
    - **答案**:通过 cAdvisor 或节点导出器(Node Exporter)采集容器指标,结合 Kubernetes 服务发现。

37. **如何设置告警通知的优先级?** 
    - **答案**:通过标签(如 `severity=critical`)分类,在 Alertmanager 中配置路由规则优先处理高优先级告警。

38. **如何实现自动化故障恢复?** 
    - **答案**:结合 Prometheus 告警与自动化工具(如 Ansible),触发脚本自动修复常见问题。

39. **如何监控 Prometheus 的抓取成功率?** 
    - **答案**:使用 `prometheus_target_interval_length_seconds` 和 `up{job="xxx"}` 指标监控抓取状态。

40. **如何处理时序数据中的缺失值?** 
    - **答案**:使用 `absent()` 函数检测缺失指标,或通过 `interpolate()` 填充缺失值(需第三方工具支持)。

### **扩展工具与生态**
41. **Thanos 的作用是什么?** 
    - **答案**:提供全局查询视图、长期存储、高可用性,解决 Prometheus 单点问题与数据保留限制。

42. **Cortex 与 Prometheus 的区别?** 
    - **答案**:Cortex 是 Prometheus 的分布式版本,支持横向扩展与多租户,适合大规模场景。

43. **Pushgateway 的适用场景是什么?** 
    - **答案**:监控短生命周期任务(如批处理作业),避免因任务结束导致指标丢失。

44. **如何使用 Exporters 监控自定义应用?** 
    - **答案**:在应用中暴露 `/metrics` 端点(符合 Prometheus 格式),或通过 SDK(如 Go、Python)推送指标。

45. **如何监控 Prometheus 的查询性能?** 
    - **答案**:通过 `prometheus_engine_query_duration_seconds` 和 `prometheus_tsdb_query_latency_seconds` 监控查询延迟。

### **综合应用**
46. **如何构建完整的监控系统?** 
    - **答案**:Prometheus(采集/存储/查询) + Alertmanager(告警) + Grafana(可视化) + Thanos(长期存储)。

47. **如何设计高可用 Prometheus 架构?** 
    - **答案**:多实例部署 + 联邦集群 + Thanos 副本,确保数据冗余与查询高可用。

48. **如何监控大规模 Kubernetes 集群?** 
    - **答案**:使用 Prometheus Operator 自动化管理,结合服务发现与联邦集群分散负载。

49. **如何优化 Prometheus 的存储性能?** 
    - **答案**:使用 SSD 存储,调整 `--storage.tsdb.retention.time` 和 `--web.enable-admin-api` 参数。

50. **如何规划 Prometheus 的容量?** 
    - **答案**:根据指标数量、抓取频率、保留周期估算存储需求,预留 30% 资源缓冲。
 

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐