7.1.5 日志系统
- 系统应用场景
日志系统是大数据架构的基础组件,主要用于采集、存储、分析和检索系统运行过程中的各类日志数据,支撑业务监控、故障排查、用户行为分析、合规审计等场景。
- 典型应用场景:
- 系统监控与故障排查:收集服务器、网络设备、应用程序的运行日志(如错误日志、性能指标),快速定位系统异常或故障。
- 安全审计:记录用户操作日志(如权限变更、数据访问),满足合规性要求(如 GDPR、等保),防范数据泄露或恶意攻击。
- 性能优化:分析数据库、中间件的日志(如 SQL 执行耗时、接口响应时间),识别性能瓶颈,优化系统架构。
- 系统实现角度
日志系统的核心目标是实现高吞吐量、低延迟的数据采集与处理,并支持灵活的查询和分析。其技术架构通常包括以下模块:
- 数据采集:
- 采集方式:
- Agent 采集:在服务器或容器中部署 Agent(如 Fluentd、Logstash),主动收集本地日志文件(如 Nginx 访问日志、Java 应用日志)。
- SDK 埋点:在客户端(如 App、Web 页面)通过 SDK 直接上报用户行为日志(如点击、滑动事件)。
- 消息队列采集:通过 Kafka、RabbitMQ 等消息队列实时接收应用程序主动发送的日志数据。
- 数据格式:支持结构化日志(JSON、Protobuf)和非结构化日志(文本日志),通常需通过正则表达式或解析器(如 Grok)转换为结构化数据。
- 数据存储:
- 实时存储:使用分布式消息队列(如 Kafka)缓存实时日志,供流式处理系统消费。
- 离线存储:将日志数据持久化到分布式文件系统(如 HDFS、S3)或列式数据库(如 HBase、ClickHouse),用于离线分析和历史查询。
- 索引存储:对日志数据建立索引(如 Elasticsearch),支持快速检索和全文搜索。
- 数据处理:
- 实时处理:通过 Flink、Spark Streaming 等流式计算框架,对日志数据进行实时清洗(去重、过滤无效数据)、解析(提取关键字段)、聚合(如按分钟统计接口调用量)。
- 离线处理:利用 MapReduce、Spark Batch 等批量处理框架,对历史日志进行离线分析(如用户行为建模、趋势预测)。
- 查询与分析:
- 实时查询:通过 Elasticsearch、Kibana 提供实时日志检索和可视化仪表盘,支持按时间、关键字、字段过滤等查询条件。
- 离线分析:使用 Hive、Presto 等工具对离线存储的日志数据进行 SQL 分析,生成统计报表或机器学习特征。
- 系统特性:
- 高可靠性:通过数据副本、故障转移机制(如 Kafka 的分区复制、HDFS 的多副本存储)确保日志不丢失。
- 可扩展性:支持横向扩展采集节点、存储集群和计算资源,应对日志量的爆发式增长。
- 低延迟:实时日志处理延迟需控制在秒级或毫秒级,以满足实时监控和预警需求。
7.1.6 服务实时监控 & 报警系统
- 系统应用场景
实时监控 & 报警系统通过实时采集和分析业务数据、系统指标,实现对系统状态、业务运行的动态监测,并在异常时触发报警,确保系统稳定性和业务连续性。
此处实时监控的对象是简单数值统计,一般没有下钻需求。
- 典型应用场景:
- 基础设施监控:监测服务器 CPU / 内存 / 磁盘使用率、网络带宽、数据库连接数等指标,预防硬件或资源瓶颈。
- 应用程序监控:跟踪接口响应时间、吞吐量、错误率(如 HTTP 5xx 错误),及时发现服务异常(如接口超时、服务熔断)。
- 业务指标监控:实时监测电商交易金额、用户注册量、社交平台消息发送量等核心业务指标,预警业务波动(如交易突然下跌、流量激增)。
- 安全监控:识别异常用户行为(如高频登录失败、敏感数据访问),预警潜在安全攻击(如 DDoS 攻击、SQL 注入)。
- 数据质量监控:监测数据管道(如 ETL 任务)的运行状态、数据完整性(如字段缺失率)、数据一致性(如跨系统数据差异),确保数据可用。
- 系统实现
实时监控 & 报警系统需具备实时数据采集、动态阈值计算、多渠道报警通知等能力,其技术架构通常包括以下模块:
- 数据采集与接入:
- 指标采集:
- 系统指标:通过操作系统工具(如 Linux 的 top、iostat)、数据库监控接口(如 MySQL 的 SHOW STATUS)或中间件 SDK(如 JVM 的性能监控接口)采集基础指标。
- 业务指标:通过埋点或日志解析获取业务数据(如从日志中提取接口调用耗时、交易金额),或直接从业务数据库(如 MySQL、MongoDB)实时同步数据。
- 数据协议:支持多种数据格式(如 Prometheus 的指标格式、JSON)和传输协议(如 HTTP、gRPC),兼容不同数据源。
- 数据处理与存储:
- 实时计算:使用 Flink、Spark Streaming 等框架对采集的指标数据进行实时计算,如滑动窗口聚合(计算过去 5 分钟的平均响应时间)、同比 / 环比分析。
- 阈值检测:通过预设固定阈值(如 CPU 使用率 > 80%)或动态阈值(如基于历史数据的统计阈值、机器学习预测阈值)判断指标是否异常。
- 存储引擎:
- 时序数据库:使用 InfluxDB、Prometheus 存储时间序列数据(如指标的时间戳和数值),支持高效的时间范围查询。
- 缓存系统:使用 Redis 缓存实时计算结果,降低查询延迟。
- 报警规则与通知:
- 规则引擎:定义报警规则(如 "接口错误率连续 3 分钟超过 5% 则报警"),支持复杂条件组合(如多指标关联判断)。
- 报警渠道:通过短信、邮件、IM 工具(如钉钉、企业微信)、电话等方式通知运维人员或业务团队,支持分级报警(如紧急报警、警告)。
- 报警抑制:避免重复报警(如同一故障持续触发报警时,仅通知一次),通过故障恢复检测自动关闭报警。
- 可视化展示:
- 使用 Grafana、Kibana 等工具构建监控仪表盘,实时展示指标趋势、拓扑图、热力图等,支持自定义查询和多维度下钻分析。
- 提供移动端访问能力,便于运维人员随时随地查看系统状态。
- 系统特性:
- 实时性:指标采集和报警触发延迟需控制在秒级,确保及时发现异常。
- 准确性:通过数据校验(如重复数据去重、异常值过滤)保证监控数据的可靠性。
- 灵活性:支持动态调整监控指标、报警规则和通知策略,适应业务快速变化。