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

微服务时代我们该怎么处理日志

  •  
  •   daijinming · 2019-06-12 17:05:27 +08:00 · 6051 次点击
    这是一个创建于 2026 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在采用微服务之前,也就是一个应用的简单美好时代,我一般都会采用日志组件 log4net、或是 log4j,在项目目录下创建一个 Log 目录,下面分为 error \ info 两个子文件夹,然后按照日志记录每天的日志,错误日志、访问日志或是调试日志什么的。当我开始向微服务,docker 中迁移的时候发现,傻眼了,该怎么办呀。

    21 条回复    2019-06-16 21:00:41 +08:00
    nakes
        1
    nakes  
       2019-06-12 17:17:37 +08:00
    elk ?
    daijinming
        2
    daijinming  
    OP
       2019-06-12 17:28:49 +08:00
    @nakes 有没有人在正式环境中,API 直接向 elk 中写入日志,会不会卡?我倒是听说过用 kafka 记录日志的,这两个方案都没用过
    luckyrayyy
        3
    luckyrayyy  
       2019-06-12 17:32:20 +08:00
    docker 内部可以用 fluentd 吧,原来的日志文件也不用动,直接读日志文件就行了。但是我没大规模用过,不知道效率怎么样。
    Rwing
        4
    Rwing  
       2019-06-12 17:33:39 +08:00
    elk ?
    misaka19000
        5
    misaka19000  
       2019-06-12 17:35:46 +08:00
    @daijinming #2 elk 用的就是 Kafka 做 broker,我们每天数十亿的日志没卡过
    10Buns
        6
    10Buns  
       2019-06-12 17:38:09 +08:00
    现有方案直接丢 Kafka 再处理,也就是不落盘?
    passerbytiny
        7
    passerbytiny  
       2019-06-12 17:40:04 +08:00
    用 docker 数据卷,跟原来就是一样的操作,没啥区别。但是你要是用了 scale 来启动容器,当我没说。
    monsterxx03
        8
    monsterxx03  
       2019-06-12 17:45:37 +08:00
    迁移 k8s 的过程中正好在做, 我的做法是应用日志全部打到 stdout, fluent-bit 做 daemonset, 读取本地 pod log, 发送到中心化的 fluentd, 定时归档到 s3.

    https://blog.monsterxx03.com/2019/05/26/centralized-logging-on-k8s/
    daijinming
        9
    daijinming  
    OP
       2019-06-12 17:46:48 +08:00
    @passerbytiny docker 数据卷 可以考虑,不是什么大网站,日志量不大
    daijinming
        10
    daijinming  
    OP
       2019-06-12 17:50:47 +08:00
    @monsterxx03 你这个方案很前卫的,很适合微服务,我确实很喜欢。我这边刚起步,还是初级阶段,没有 S3,能简化吗
    daijinming
        11
    daijinming  
    OP
       2019-06-12 17:53:04 +08:00
    @10Buns kafka 在小团队适用吗,有没有学习的难度。日志以日期形式记录,又好记录,又好查看,简单易学,你说的这个 kafka 有没有学习曲线
    daijinming
        12
    daijinming  
    OP
       2019-06-12 17:54:08 +08:00
    @monsterxx03 没有 K8s,没有 S3,只有 Linux 机器,安装了 docker
    10Buns
        13
    10Buns  
       2019-06-12 17:55:10 +08:00
    @daijinming 还好吧,其实大多数时候都是用,然后慢慢深入摸索
    daijinming
        14
    daijinming  
    OP
       2019-06-12 17:55:40 +08:00
    @misaka19000 小团队,只有一台 Linux,这个方案合适吗,有没有简化方案
    passerbytiny
        15
    passerbytiny  
       2019-06-12 17:56:10 +08:00
    如果是全 docker 的话,也可以考虑只保留 stdout,然后由 docker logs 或 docker-composer logs 接管日志。
    monsterxx03
        16
    monsterxx03  
       2019-06-12 17:59:09 +08:00
    日志量不大的话,直接用 syslog 协议打到 远端的 fluentd 也可以, fluentd 定时把 log 归档到本地的某个文件夹. 这样你只需要一台日志服务器就行了,只需要配置 fluentd 这一个程序.

    对日志没有很强的分析和可视化需求的话, ELK 那套我觉得有点重了.
    daijinming
        17
    daijinming  
    OP
       2019-06-12 18:02:16 +08:00
    @monsterxx03 只要能分类分日期记录日记就好,不要分散的到各个微服务里,能集中查看就好
    daijinming
        18
    daijinming  
    OP
       2019-06-12 18:03:11 +08:00
    @passerbytiny 这个可能就挺好
    basefas
        19
    basefas  
       2019-06-12 18:48:05 +08:00
    prometheus ?
    aitaii
        20
    aitaii  
       2019-06-12 19:57:27 +08:00 via iPhone
    我们用的阿里服务器,写到 logstore 里了
    Linxing
        21
    Linxing  
       2019-06-16 21:00:41 +08:00 via iPhone
    prometheus ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.