4. 数据层设计(成熟度L1-L2):基础监控数据采集、日志聚合、指标存储的模板化接入方案
在 SRE 成熟度 L1-L2 阶段,数据层的核心目标是建立标准化的数据采集、聚合与存储底座。本层设计遵循“模板化接入”原则,确保新增服务或组件时,无需重复开发采集逻辑,仅通过声明式配置即可完成数据接入。以下分别从指标监控(Prometheus 体系)与日志聚合(ELK 体系)两条主线展开。
4.1 指标监控数据流:Prometheus 模板化接入
Prometheus 采用“拉取(Pull)”模型,通过 Exporter 暴露指标端点。模板化接入的核心在于统一 Exporter 部署规范与 ServiceMonitor 配置。
关键设计原则: 所有业务服务必须暴露
/metrics 端点;中间件(MySQL、Redis、Nginx)使用官方 Exporter;自定义 Exporter 遵循 Prometheus 客户端库规范。
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 统一解析,但会增加性能开销。
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 管理,变更可审计、可回滚。
- 提升可观测性: 指标与日志数据标准化后,可直接对接值班台告警与可视化面板,无需额外适配。