不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Python

  • GO

  • Java

  • 业务问题

    • 01.微博消息推送Feed流设计
    • 02.秒杀系统架构 ✅
    • 03.支持10万QPS的会员系统 ✅
    • 04.支付系统的设计 ✅
    • 05.即时通讯系统设计
    • 06.外卖系统设计
    • 07.打车系统设计
    • 09.内容分发网络CDN设计
    • 13.日志系统的设计
      • 01.日志系统的设计
        • 0、需求说明
        • 1、架构概述
        • 2、日志收集模块
        • 1)日志来源
        • 2)日志收集工具
        • 3、日志传输模块
        • 1)高吞吐量传输
        • 2)消息持久化与重试机制
        • 4、日志存储模块
        • 1)分布式存储
        • 2)日志压缩策略
        • 3)存储策略
        • 5、日志分析模块
        • 1)实时日志分析
        • 2)离线日志分析
        • 3)多维度日志查询
        • 6、实时 vs. 离线日志处理
        • 1)实时处理
        • 2)离线处理
        • 7、扩展与优化
        • 1)扩展性
        • 2)查询优化
    • 14.百亿规模浏览记录
    • 15.十亿数据批量写入mysql
  • 关键技术

  • 项目常识

  • 计算机基础

  • 常识
  • 业务问题
xiaonaiqiang
2024-09-23
目录

13.日志系统的设计

需求:支持日志收集、存储、分析,关注高吞吐、压缩、索引、查询优化

架构:

  • 收集模块:统一接口(log4j/Fluentd),多格式支持,过滤预处理
  • 传输模块:Kafka高吞吐传输,消息持久化与重试机制
  • 存储模块:ElasticSearch(热数据)、HDFS(冷数据),日志压缩与分层存储
  • 分析模块:实时(ElasticSearch+Kibana/Flink)、离线(Hadoop/Spark),多维度查询优化

实时 vs. 离线处理:

  • 实时:Kafka+ElasticSearch低延迟处理,监控与告警
  • 离线:Spark批量分析,长期趋势预测与报告生成

扩展与优化:

  • 分布式架构:Kafka、ElasticSearch扩展性与高可用
  • 查询优化:索引设计、缓存机制加速查询响应

# 01.日志系统的设计

# 0、需求说明

  • 设计要点:日志系统设计包括日志收集、存储、分析,需考虑高吞吐、数据压缩、日志索引、查询优化等问题
  • 关键点
    • 分布式日志收集与存储方案(如 Kafka + ElasticSearch)
    • 日志的压缩与存储策略
    • 多维度日志查询与分析
    • 实时 vs. 离线日志处理

# 1、架构概述

  • 日志收集模块:负责从多个来源(应用程序、服务器、服务)收集日志
  • 日志传输模块:通过消息队列(如 Kafka)将日志从收集点传输到存储和分析层
  • 日志存储模块:负责将日志数据高效地存储,支持快速查询和分析
  • 日志分析模块:用于提供实时与离线日志分析功能,支持多维度的查询和数据可视化

# 2、日志收集模块

# 1)日志来源

  • 日志来源可能包括微服务、应用程序、数据库、系统进程、网络设备等,通常是分布式的
  • 日志收集模块需要具备以下特点
  • 统一接口:所有日志生成方通过统一的 API 或 SDK 进行日志输出(如 log4j、Fluentd 等)
  • 支持多格式:不同来源的日志格式可能不同,收集模块需具备处理多种格式的能力,如 JSON、XML、纯文本等
  • 日志过滤与预处理:在收集时进行基本的过滤、格式化,减少后续处理压力例如,移除调试级别日志,提取关键字段

# 2)日志收集工具

  • Fluentd/Fluentbit:轻量、高效的日志收集工具,支持多种输出插件(如 Kafka、ElasticSearch 等)
  • Filebeat:Elastic Stack 中用于从文件中收集日志的工具,常用于日志文件的监控
  • Logstash:Elastic Stack 中功能更强大的日志收集和转换工具,适合复杂场景下的日志解析与过滤

# 3、日志传输模块

# 1)高吞吐量传输

  • 日志数据的产生频率较高,传输模块需要能够支持高吞吐量
  • 选择消息队列系统来解决分布式环境下的日志传输问题
  • Kafka:
    • Kafka 是分布式消息队列系统,具有高吞吐量、分区机制和可靠的消息持久化能力,适合作为日志系统的传输 backbone
    • Kafka 可以确保日志数据的顺序性和高可用性,并支持数据在不同节点上的分发

# 2)消息持久化与重试机制

  • 消息持久化:
    • Kafka 可以将消息持久化到磁盘,避免在网络波动或节点故障时丢失数据
    • 每个 Kafka partition 都可以配置存储时间,确保旧日志不会无限增长
  • 消费重试机制:
    • 消费者(如存储层)在消费日志时,可能出现失败
    • Kafka 支持消费者手动提交 offset,这样可以确保在失败时能够重试消费

# 4、日志存储模块

# 1)分布式存储

  • 由于日志数据量巨大,需使用分布式存储来支持日志的高效存储和查询
  • ElasticSearch:
    • 分布式搜索引擎,支持快速的全文搜索与多维度查询,适合海量日志数据存储和分析
    • ElasticSearch 的索引机制能够加速查询性能,适应大规模分布式场景
  • Hadoop/HDFS:
    • 如果需要长期存储和离线分析,可以将冷数据存储到 HDFS 上,配合 Spark 等工具进行批量处理

# 2)日志压缩策略

  • 为了减少存储占用和传输压力,可以对日志数据进行压缩
  • Kafka 的压缩:Kafka 支持在传输过程中对消息进行压缩(如 GZIP、Snappy 等),减少传输的带宽消耗
  • ElasticSearch 的压缩:
    • 在存储层,ElasticSearch 支持对存储数据进行压缩
    • 可以根据日志的查询频率对冷热数据进行分级存储,设置不同的压缩级别

# 3)存储策略

  • 存储策略的核心在于如何有效地管理日志数据的生命周期,通常采用分层存储
  • 热数据:短时间内需要频繁访问的日志数据,通常保存在 ElasticSearch 这样的高性能存储中
  • 冷数据:较少访问的历史数据,可以存储在 HDFS 或者其他冷存储介质中,减少存储成本

# 5、日志分析模块

# 1)实时日志分析

  • 实时日志分析能够及时发现系统中的异常和错误,常见的实现方法有
  • ElasticSearch + Kibana:
    • Kibana 提供了直观的可视化界面,通过 Elasticsearch 提供的多维度数据查询,可以实时展现日志的各类统计和趋势
    • 可以针对特定维度(如时间、日志级别、IP 地址等)进行筛选与聚合分析
  • Apache Flink:
    • 如果需要复杂的流式处理,可以使用 Apache Flink 对实时日志数据进行分析
    • Flink 支持低延迟的流处理,可以用于异常检测、指标统计等场景

# 2)离线日志分析

  • 离线日志分析适合历史数据的深度分析,如趋势预测、批量处理等
  • 常见的离线处理方式包括:Hadoop/Spark
    • 将冷数据存储在 HDFS 上,使用 Spark 等工具进行批量计算和分析
    • 可以通过定期的批处理任务生成日志报告、统计图表等

# 3)多维度日志查询

  • 为了支持多维度的查询,系统需要灵活的索引和查询优化机制

  • Elasticsearch 索引优化:

    • 可以根据日志的特性定义合适的索引结构,使用倒排索引来加速文本搜索,同时使用聚合查询来进行多维度统计分析
  • 分区与时间轴:

    • 按时间进行分区存储是常见的优化策略,可以显著加快时间范围查询
    • ElasticSearch 支持基于日期的索引模板,将日志按天或按月分索引存储

# 6、实时 vs. 离线日志处理

# 1)实时处理

  • 实时日志处理系统能够在极低的延迟下处理日志,主要用于监控、告警等场景
  • 采用 Kafka + ElasticSearch 的组合能够有效支持实时处理
  • 低延迟:Kafka 的高吞吐与低延迟传输,使日志数据可以实时进入 ElasticSearch,配合 Kibana 实现实时可视化
  • 快速响应:对于错误日志、性能瓶颈等,可以通过实时处理发现并及时发出告警

# 2)离线处理

离线处理用于进行批量的深度分析,尤其是长期数据的趋势分析、模型训练等通常会在资源利用率较低的时间段执行:

  • 批处理:通过 Spark 等工具对日志进行批量计算,将结果存储到 HDFS 或关系数据库中,生成报告或支持后续查询
  • 节省资源:将不频繁访问的数据离线处理,有助于减少在线系统的负载

# 7、扩展与优化

# 1)扩展性

  • 分布式架构:Kafka 和 ElasticSearch 都是高度可扩展的系统,随着日志量的增长,可以通过增加分区、节点来扩展系统的处理能力
  • 负载均衡与高可用:通过 Kafka 的集群特性以及 ElasticSearch 的副本机制,确保系统在高负载或节点故障时依然能够正常运行

# 2)查询优化

  • 索引设计:根据查询场景设计合适的索引结构,减少无关数据的查询时间
  • 缓存机制:对于常见的查询,可以使用缓存机制加速响应速度
上次更新: 2025/2/19 16:42:39
09.内容分发网络CDN设计
14.百亿规模浏览记录

← 09.内容分发网络CDN设计 14.百亿规模浏览记录→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式