不懂就问,如何高效地存储服务日志? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
naoh1000
V2EX    云计算

不懂就问,如何高效地存储服务日志?

  •  
  •   naoh1000 2020-10-13 08:10:52 +08:00 via iPhone 5115 次点击
    这是一个创建于 1876 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端在写自己项目的时候想到的一个问题。偶尔在后台中分析和查看的日志保存在文件中还是数据库中效率更高?查了一些资料看起来是数据库效率更高,那为什么大部分开源项目使用的都是文件存储日志?
    18 条回复    2020-10-15 15:57:06 +08:00
    zvcs
        1
    zvcs  
       2020-10-13 08:26:20 +08:00 via iPhone
    一般都有集中的日志中心。大佬们都推荐 ELK 。
    wangyanrui
        2
    wangyanrui  
       2020-10-13 08:28:20 +08:00 via Android
    第一个问题,一般文件更高,因为数据库牵扯到事务,会多一层逻辑,所以数据库效率不高

    第二个问题,因为小项目日志怎么搞无所谓,大项目必须要 高性能,高搜索支持度,结构一致,以及便捷的支持后续的数据分析
    xiaochun41
        3
    xiaochun41  
       2020-10-13 08:55:18 +08:00
    楼上说的都没问题,一般还是具体问题具体对待,如果是小规模的项目,就用最简单,最方便的方式就对了。
    综合来看,大部分项目使用的是本地写文件的方式,定期会归档,清理。
    如果涉及较多的机器,一般也会集中将每台机器上的日志收集起来。
    linxiaojialin
        4
    linxiaojialin  
       2020-10-13 09:53:43 +08:00
    @wangyanrui 感觉和你理解的有点不一样,第一个问题,“存”日志时不会启用事务(可以用 MyISAM ),所以存的效率也不低,而“查”日志时数据库效率比较高,特别是一个日志文件有几十上百 G 时,区别更明显的,文件打开时非常慢,更别说筛选查看。

    第二问题,跟你的观点一致,额外补充:①数据库比较占内存,而文件只是占磁盘;②一般应用日志跟业务无关,应独立出来,避免占用“业务数据库”资源。

    @naoh1000 所以开源项目“默认使用”文件存储日志,可能是考虑项目初期(小项目)服务器的资源问题。等项目大了,可以把日志的存储配置改成数据库,单独搞一个的“日志数据库”,或者上 ES 、ELK 等等。
    Gathaly
        5
    Gathaly  
       2020-10-13 09:57:31 +08:00
    数据量不大的,直接存到数据库,有钱又有价值的上 es
    我们公司就是存数据库的,而且大多数都是如此做
    peckey
        6
    peckey  
       2020-10-13 10:02:31 +08:00
    看项目规模,小型项目节点很少,通过日志组件直接记录文件就好了,偶尔排查个问题啥的
    如果项目较大,节点较多,日志分散在文件中,定位问题需要查找多个文件相对较为麻烦,另外如果还有分析,告警之类的需求,则 ELK 这类的技术栈更为合适
    wangfyyy
        7
    wangfyyy  
       2020-10-13 10:07:10 +08:00
    kafka -> mysql -> es 目前是这样
    rrfeng
        8
    rrfeng  
       2020-10-13 10:10:30 +08:00
    ELK 里 E 纯粹是浪费性能,因为大多数日志不需要结构化解析。
    所以现在推荐 Grafana 出的 Loki
    chendy
        9
    chendy  
       2020-10-13 10:22:12 +08:00
    日志打进文件简单稳定,给个文件就能打,用户想落库自己捞就好
    开源项目日志直接落库的话,要考虑各种数据库各种环境,虽然有日志工具但是还是太复杂
    saytesnake
        10
    saytesnake  
       2020-10-13 10:33:50 +08:00
    对 Elasticsearch 一言难尽,还是 Loki 舒适简单。
    mokeyjay
        11
    mokeyjay  
       2020-10-13 10:46:35 +08:00
    @linxiaojialin #4 嗨呀,好久不见
    说起来头头是道的,厉害呀,没少进步
    哪像我还在文件+脚本定期清理
    Navee
        12
    Navee  
       2020-10-13 11:56:14 +08:00
    需要分析和查询的话还是 ELK 简单
    日志量不大的情况下比数据库还是舒服的,量大的话就如上面所说一言难尽,除非你非常有钱
    gabon
        13
    gabon  
       2020-10-13 12:17:17 +08:00 via Android
    最近我司在转 clickhouse
    opengps
        14
    opengps  
       2020-10-13 12:50:17 +08:00 via Android
    建议集中到第三方存储,毕竟现在各种分布式架构,本地存储方案只适应用单机项目了
    wangyanrui
        15
    wangyanrui  
       2020-10-13 13:00:14 +08:00 via Android
    @linxiaojialin

    文件顺序写 IO 即可,数据库即使不算事务,也有数据库自己的处理逻辑,总归是慢一点的

    另外,日志没有不切分的,按规则切分,配合 grep,awk 之类的,比数据库方便多了
    例如,查询包含 error 字符串的日志,数据库就很麻烦
    laminux29
        16
    laminux29  
       2020-10-13 13:10:56 +08:00
    你这个问题基本上涵盖了计算机本科的大部分知识,要讲明白,相当于得为你写好几本科目的教材。

    如果你真想学明白,可以去搜搜国内 TOP5 计算机本科或软件本科的科目,然后去找相关教材学习。

    如果只是想随便了解下,一楼兄弟给的方案就不错,或者自己把几种方案都尝试一下也行。只是,一旦遇到问题,或者结论与你设想的不一样,没有足够的知识,你是没办法查明问题的根源所在。
    linxiaojialin
        17
    linxiaojialin  
       2020-10-13 18:52:32 +08:00
    @mokeyjay 然而我只是班门弄斧现在你才是大佬啊,有时间带带我救救孩子吧
    whx20202
        18
    whx20202  
       2020-10-15 15:57:06 +08:00
    推荐阿里云的 SLS 服务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     944 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:33 PVG 06:33 LAX 14:33 JFK 17:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86