zoukankan      html  css  js  c++  java
  • 海量结构化日志分析系统

    背景

    日志,角色不同,出发点和认识的角度也不同


    RD使用日志,首先是为了调试程序,当程序上线后,日志是为了记录err和trace。

    PM可以通过日志分析,可以得出业务指标相关的统计情况。

    日志的作用大致有三:异常、trace、统计。

    日志使用的痛点

    使用日志时大部分的场景或特点如下:


    1.日志为纯文本,即可读。

    2.日志分散在各个机器上,或者同步到某一台机器。

    3.某某发现一个问题,让某某去查log。

    这里有几个问题,或者说提高点

    1.文本冗余度太大,浪费资源,如果转换为二进制,预估有5倍的收益。

    2.日志分散,查找效率低,即使集中,在没有具体时间点情况下,扫描日志会很慢。

    3.日志分析难度大,谁写的日志谁来查,查到和肉眼找到还差一步...

    目标

    所以,我们可以设计这样一个日志系统

    1.支持海量数据的日志存储(TB二进制)

    2.日志二进制、结构化

    3.查询速度快,难度低

    设计

    读写日志

    日志查询过程经分解和总结共性后,几乎是下边三种情况


    1.K-V查询,比如基于某个消息ID,查询一条记录。

    2.集合查询,比如查询某个用户的消息记录。

    3.集合range查询,比如查询某个用户0点到1点消息记录。

    那么,ssdb是非常适合这三个需求的。


    日志系统具有写多读少的特定,再基于磁盘存储的业界主流方案,LSM是适合的,

    而SSDB的存储依赖的leveldb正好属于LSM系。

    日志二进制

    一个大的日志是没办法人用肉眼扫描的,所以不如使用二进制代替以节约空间,但是日志

    会随着需求的变化,格式也可能会变化,所以必须考虑二进制向文本反序列化时的

    兼容性问题,那么protobuf是非常适合这个需求的。

    海量日志

    Sharding

    业务的sharding,一个业务对应N个存储服务,N个业务对应N*N个存储服务,单一存储服务内只

    承载一个业务。

    磁盘的sharding,一块盘对应N个存储服务,N块磁盘对应N*N个存储服务。

            0    1      2     3     4
    
      db    |_____|_____|_____|_____|
    
            0      1t              4t
    
    disk    |_______|_______________|

    Resharding

    扩容时增加存储服务即可。

    缩绒时删除存储服务即可。

    Failover

    存储服务挂了后重启就可以。

    由于存储的是日志,在机器发生故障后是允许丢的,所以数据不做迁移,只需将相应的服务等比例

    迁走即可。

  • 相关阅读:
    vue 初始化项目模板报错
    092117-6265-01.dmp 蓝屏日志文件
    电信流氓注入JS
    DISM
    node.js
    Adobe ZXPInstaller 报错 Installation failed because of a file operation error.
    Microsoft Edge 针对 Web 开发人员更新日志
    What's new in Safari 11.0
    CSS Filter
    accept-language
  • 原文地址:https://www.cnblogs.com/gistao/p/5779541.html
Copyright © 2011-2022 走看看