V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FlyingBackscratc
V2EX  ›  程序员

现在新项目的微服务分离日志系统应该怎么设计?

  •  
  •   FlyingBackscratc · 25 天前 · 1738 次点击

    如题,个人项目,不需要做到商业程度严谨,但是基于多组件和分布式,我个人想法是让它能跑的时间长一点,维护尽量轻松。我感觉搞个合适的日志汇总、故障自动分析排查这些东西应该是能有效提高维护效率。

    现在后端一般搞微服务的日志是怎么做的?是有后端框架的全套里带吗,比如 springcloud 里带?还是有其他的常用组件?还是基于类似 kafka 这种自己搭服务?没啥经验,一般是咋搞的?

    15 条回复    2024-04-10 17:25:38 +08:00
    morgan1freeman
        1
    morgan1freeman  
       25 天前
    携程用的 log4j 后面 套的是 es ,你可以考虑试试
    morgan1freeman
        2
    morgan1freeman  
       25 天前
    clickhouse 忘记说了
    ikas
        3
    ikas  
       25 天前   ❤️ 1
    轻量级 ,使用 loki 全家桶
    新的可以考虑 opentelemetry
    timethinker
        4
    timethinker  
       25 天前 via iPhone   ❤️ 1
    日志分为写和读两个步骤,这两个步骤完全是分离的。日常开发还是写入到文件,存储到磁盘,说白了日志就是一个文本文件,在写的阶段什么顺手用什么。

    日志的处理就比较庞大了,包括收集日志文件、存储、索引和查询,每一个步骤都有很多开源的选择,这部分更偏向于运维,跟开发关系就不大了。
    wph95
        5
    wph95  
       25 天前
    默认的 log 库大差不差,往本地磁盘上写。
    然后 filebeat/fluented/vector 等 log collector 收集起来发送走。
    如果是 k8s 还分 sidecar/deamonset 两种主流的 log collector pattern 。

    datasource 老牌的就 elasticsearch 一把梭。新玩法是 loki ,clickhouse 。


    对于你个人项目, 如果查询需求很低。
    就简单一点 vector 收集日志,扔到 对象存储。需要查的时候 mount 一个 goofys grep 就好。
    扔日志到对象存储时候设置一个基于时间的 prefix 就好。
    zed1018
        6
    zed1018  
       24 天前
    我们现在的都是直接打控制台( spring-boot-starter-logging ),因为服务在 pod 里,k8s 里跑一套 loki + minio + grafana ,loki 从 pod 的控制台输出直接采集了
    chendy
        7
    chendy  
       24 天前
    既然是个人项目,直接打文件,按天滚动,grep awk 一把梭
    最多上个 loki
    xuanbg
        8
    xuanbg  
       24 天前
    ELK
    luozic
        9
    luozic  
       24 天前
    可以走 elk 那一套,这一套有单机版本 并且可以后期切换。
    单机版本的比如 sonic 。 已经可以支持 tb 级别了,等到后面超过 10tb 了,这种明显可以迁移了
    chesha1
        11
    chesha1  
       24 天前
    如果你的微服务能在 k8s 上,不需要任何日志库,直接往 stdout 和 stderr 扔就行了,然后用第三方的日志解决方案,比如 elk stack 和 grafana loki ,除非你的数据量真的高到惊人了,不然不需要 kafka ,elk 或者 loki 已经够用了
    yulin7beloved
        12
    yulin7beloved  
       24 天前
    最近用了 loki ,挺不错的
    kuanat
        13
    kuanat  
       24 天前
    我提一个可能会被遗漏的细节,微服务环境里做日志,一定要有全链路的 trace 信息,不然出了问题也很难还原出错的场景。

    前面有人讲了读写分离,写基本都是本地,然后通过后台 daemon 定期汇总到日志服务器上。

    原始日志汇总存储之后,建议再定期根据 trace 重新组织一下(比如数据库视图,或者直接用文档类型存储)以方便查询。一般来说,日志信息往往会比生产数据的容量还大,如果用到了再去查可能会很慢。
    keepRun
        14
    keepRun  
       24 天前 via Android
    小项目推荐 loki ,非常省资源
    c9cc
        15
    c9cc  
       20 天前
    loki 够用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   835 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:39 · PVG 05:39 · LAX 14:39 · JFK 17:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.