DevOps 面试题大全(七·上):监控系统 Prometheus/Grafana/ELK 25 题详解

前言

监控是 DevOps 的眼睛,帮助发现系统问题、性能瓶颈。本文整理 50 道监控面试题,涵盖 Prometheus、Grafana、ELK 等主流工具。

一、基础概念题(1-15 题)

1. 监控系统核心指标

  • USE 方法:Utilization, Saturation, Errors
  • RED 方法:Rate, Errors, Duration
  • 黄金指标:延迟、流量、错误、饱和度

2. Prometheus 架构

  • Prometheus Server - 时序数据库
  • Exporters - 指标采集器
  • PromQL - 查询语言
  • Alertmanager - 告警管理
  • Grafana - 可视化

3. Prometheus 数据模型

  • Metric Name - 指标名称
  • Labels - 标签键值对
  • Timestamp - 时间戳
  • Value - 指标值

4. 指标类型

  • Counter - 只增不减(请求数)
  • Gauge - 可增可减(内存使用)
  • Histogram - 直方图(响应时间)
  • Summary - 摘要(分位数)

5. PromQL 基础查询

# 瞬时向量
http_requests_total

# 范围向量
http_requests_total[5m]

# 标签过滤
http_requests_total{method="POST",job="api"}

# 聚合函数
sum(rate(http_requests_total[5m])) by (job)

6. 常用聚合函数

  • sum - 求和
  • avg - 平均
  • max/min - 最大/最小
  • count - 计数
  • rate - 增长率
  • irate - 瞬时增长率

7. Grafana 核心概念

  • Data Source - 数据源
  • Dashboard - 仪表盘
  • Panel - 面板
  • Query - 查询
  • Alert - 告警
  • Variable - 变量

8. ELK Stack 组成

  • Elasticsearch - 搜索分析引擎
  • Logstash - 日志收集处理
  • Kibana - 可视化
  • Beats - 轻量采集器

9. 日志收集架构

Filebeat → Logstash → Elasticsearch → Kibana

10. 告警级别分类

  • P0 - 致命(系统不可用)
  • P1 - 严重(核心功能受损)
  • P2 - 警告(性能下降)
  • P3 - 提示(需要关注)

11-15. 更多基础题

题号 题目 要点
11 Prometheus 存储方式? 时序数据库,TSDB
12 服务发现机制? K8s, EC2, Consul 等
13 Blackbox Exporter 作用? 探测 HTTP/TCP/ICMP
14 Alertmanager 功能? 去重、分组、路由、静默
15 日志 vs 指标区别? 日志是事件,指标是聚合

二、进阶实战题(16-25 题)

16. Prometheus 配置示例

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  - job_name: 'node'
    static_configs:
      - targets: ['node1:9100', 'node2:9100']
  
  - job_name: 'kubernetes'
    kubernetes_sd_configs:
      - role: pod

17. 告警规则配置

groups:
  - name: example
    rules:
      - alert: HighCPU
        expr: avg(rate(node_cpu_seconds_total[5m])) > 0.8
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU 使用率过高"
          description: "{{ $labels.instance }} CPU 超过 80%"

18. Alertmanager 路由配置

route:
  group_by: ['alertname', 'cluster']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'default'
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty'
    - match:
        severity: warning
      receiver: 'slack'

19. Grafana Dashboard 导入

使用社区模板(ID: 8919 Node Exporter, 315 K8s),或自定义创建。

20. 自定义 Exporter

使用 Prometheus Client Library(Go/Python/Java)暴露 /metrics 端点。

21. 日志查询语法

# Lucene 语法
status:500 AND method:POST

# KQL (Kibana)
http.response.status_code : 500 and http.request.method : "POST"

# 聚合
GET /logs/_search
{
  "aggs": {
    "status_codes": {
      "terms": { "field": "http.response.status_code" }
    }
  }
}

22. 指标类型选择

  • 请求总数 → Counter
  • 当前连接数 → Gauge
  • 响应时间分布 → Histogram
  • API 延迟百分位 → Summary

23. 服务发现配置

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

24. 联邦集群配置

多层 Prometheus 架构,边缘采集 → 中心聚合 → 全局视图。

25. 高可用方案

  • 多副本 Prometheus
  • Thanos/Cortex 长期存储
  • VictoriaMetrics 替代方案
  • Alertmanager 集群

下篇预告:26-50 题,涵盖高级查询、故障排查、最佳实践等

发表回复

后才能评论