4. 数据层设计(成熟度L1-L2):基础监控数据采集、日志聚合、指标存储的模板化接入方案

在 SRE 成熟度 L1-L2 阶段,数据层的核心目标是建立标准化的数据采集、聚合与存储底座。本层设计遵循“模板化接入”原则,确保新增服务或组件时,无需重复开发采集逻辑,仅通过声明式配置即可完成数据接入。以下分别从指标监控(Prometheus 体系)与日志聚合(ELK 体系)两条主线展开。

4.1 指标监控数据流:Prometheus 模板化接入

Prometheus 采用“拉取(Pull)”模型,通过 Exporter 暴露指标端点。模板化接入的核心在于统一 Exporter 部署规范与 ServiceMonitor 配置。

关键设计原则: 所有业务服务必须暴露 /metrics 端点;中间件(MySQL、Redis、Nginx)使用官方 Exporter;自定义 Exporter 遵循 Prometheus 客户端库规范。
Prometheus 模板化指标采集架构 业务服务 A /metrics 业务服务 B /metrics MySQL Exporter 端口 9104 Redis Exporter 端口 9121 Prometheus Server 服务发现 / 拉取 模板化接入清单 1. 每个服务/中间件部署一个 Exporter 容器(Sidecar 模式) 2. 统一暴露端口:业务服务 9100,MySQL 9104,Redis 9121,Nginx 9113 3. Prometheus 通过 Kubernetes ServiceMonitor 或 Consul 服务发现自动发现目标 4. 告警规则模板:CPU > 80%、内存 > 90%、QPS 突降 > 50% 等预置规则

4.2 日志聚合数据流:ELK 模板化接入

ELK(Elasticsearch + Logstash + Kibana)体系采用“推送(Push)”模型。模板化接入的核心在于统一日志格式(JSON)、采集端配置(Filebeat)以及索引生命周期管理(ILM)。

组件 角色 模板化配置要点
Filebeat 轻量日志采集器 统一配置 paths: /var/log/app/*.log;输出到 Logstash 或直接到 Elasticsearch
Logstash 日志解析与过滤 预置 Grok 模式库(Nginx、Java、Python);统一时间戳字段 @timestamp
Elasticsearch 存储与检索 索引模板:sre-logs-*;分片数 3,副本数 1;ILM 策略:30 天删除
Kibana 可视化与查询 预置仪表盘:错误日志趋势、Top 错误源、慢查询分析
最佳实践: 所有业务日志必须输出为 JSON 格式,包含 service_name、level、timestamp、message、trace_id 五个必选字段。非 JSON 日志由 Logstash 统一解析,但会增加性能开销。
ELK 模板化日志聚合架构 应用实例 1 /var/log/app/ 应用实例 2 /var/log/app/ Filebeat 采集 + 发送 Logstash 解析 + 过滤 Elasticsearch 存储 + 检索 Kibana 可视化 模板化接入清单 1. 每个节点部署 Filebeat DaemonSet,自动采集 /var/log/app/*.log 2. Logstash 预置 Grok 模板:%{COMBINEDAPACHELOG}、%{JAVALOG}、%{PYTHONLOG} 3. Elasticsearch 索引模板自动匹配 sre-logs-*,ILM 策略 30 天轮转

4.3 模板化接入配置示例

以下为 Prometheus ServiceMonitor 与 Filebeat 配置的标准化模板,可直接用于新服务接入。

4.3.1 Prometheus ServiceMonitor 模板(Kubernetes CRD)

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: sre-service-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: sre-monitored
  endpoints:
  - port: metrics
    interval: 15s
    path: /metrics
  namespaceSelector:
    any: true

4.3.2 Filebeat 配置模板

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/app/*.log
  json.keys_under_root: true
  json.add_error_key: true
  fields:
    service_name: "${SERVICE_NAME}"
    env: "${ENV}"

output.logstash:
  hosts: ["logstash.sre.svc.cluster.local:5044"]

4.4 成熟度 L1-L2 数据层验收标准

维度 L1 基础要求 L2 标准化要求
指标采集 核心服务已接入 Prometheus,手动配置 Target 所有服务通过 ServiceMonitor 自动发现,Exporter 统一端口
日志采集 日志已落盘,可手动查看 Filebeat 自动采集,JSON 格式,Logstash 解析,Kibana 可查询
存储策略 指标保留 7 天,日志保留 15 天 指标保留 30 天(Prometheus TSDB),日志 ILM 策略 30 天轮转
告警规则 手动配置基础告警 预置告警规则模板,覆盖 CPU、内存、磁盘、QPS 等核心指标
常见陷阱: 日志格式不统一(混合 JSON 与纯文本)会导致 Logstash 解析失败或性能下降;Exporter 端口冲突(如多个服务共用 9100)会导致 Prometheus 采集混乱。务必在模板中强制端口唯一性。

4.5 数据层模板化接入的收益

  • 减少重复工作: 新服务接入仅需添加 ServiceMonitor 标签和 Filebeat 配置,无需编写采集代码。
  • 统一数据格式: 指标标签(service、instance、job)和日志字段(service_name、level)全局一致,便于跨服务关联分析。
  • 降低运维成本: 模板化配置可通过 GitOps 管理,变更可审计、可回滚。
  • 提升可观测性: 指标与日志数据标准化后,可直接对接值班台告警与可视化面板,无需额外适配。