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

业务系统日志存储选型讨论

  •  
  •   steelshadow39 · 2023-11-21 23:07:41 +08:00 · 5284 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人学生,最近项目在讨论日志存储的选型,后端是 springboot ,日志格式为 JSON ,组内有人提议使用 MYSQL 存储日志(因为系统体量不是特别大),我选的是 graylog (存储用的是 elasticsearch ,比 ELK 更轻量)。我觉得无论日志量大小,elasticsearch 的检索和日志处理都要比单纯用 MYSQL 强很多,用 MYSQL varchar 存 JSON ,查询出来还要解析,效率也太低了。并且处理日志本来就是 elasticsearch 的强项。

    想请教各位前辈,公司开发在日志这块一般是怎么处理的,感谢各位前辈指点。

    第 1 条附言  ·  2023-11-22 14:53:08 +08:00
    现在架构想法是:子模块还要自己维护一个子日志库,同时所有组还要给上传给总的日志库,如果我用 graylog ,es 存储的话,也就意味着各个子模块的开发也要用 es ,对于学生来说存在学习成本,所以其他人提议使用 MySQL 存
    72 条回复    2023-11-25 21:57:52 +08:00
    ccde8259
        1
    ccde8259  
       2023-11-21 23:17:22 +08:00
    选不如买……
    iomect
        2
    iomect  
       2023-11-21 23:17:41 +08:00
    我们用的 Mongo
    steelshadow39
        3
    steelshadow39  
    OP
       2023-11-21 23:23:31 +08:00
    @ccde8259 学校项目,都是学生自己开发,没法买
    liuhan907
        4
    liuhan907  
       2023-11-21 23:26:35 +08:00
    我们用 loki ,便宜
    steelshadow39
        5
    steelshadow39  
    OP
       2023-11-21 23:32:22 +08:00
    @liuhan907 公司一般都是买吗?我以为都是自己搭的
    liuhan907
        6
    liuhan907  
       2023-11-21 23:44:08 +08:00
    自己搭的
    nosilence
        7
    nosilence  
       2023-11-22 00:05:22 +08:00
    从预估的日志量去选型
    coolcoffee
        8
    coolcoffee  
       2023-11-22 00:15:05 +08:00
    elasticsearch+kibana 组合的全文搜索和索引条件搜索好用程度远超过 loki + grafana 。

    有钱 ELK ,没钱 Loki 。
    silvernoo
        9
    silvernoo  
       2023-11-22 00:22:24 +08:00
    rsyslog
    bololobo
        10
    bololobo  
       2023-11-22 08:29:49 +08:00
    mysql 现在支持 JSON 格式了
    xuanbg
        11
    xuanbg  
       2023-11-22 08:43:50 +08:00
    业务日志还是 mysql 吧,7.6 就支持 json 了。
    tramm
        12
    tramm  
       2023-11-22 08:52:00 +08:00
    现在用的 ELK. 但是占用有点高.
    我测试服务器上 docker 装了个 Loki,OpenObserve. 最终选择了 OpenObserve 记录一些以前未接入 ELK 的系统的日志(SpringBoot 本地日志通过 FluentBit 采集).
    yazinnnn0
        13
    yazinnnn0  
       2023-11-22 09:13:59 +08:00
    graylog 是正经日志方案, 你是对的
    zed1018
        14
    zed1018  
       2023-11-22 09:16:54 +08:00
    loki + minio
    lff0305
        15
    lff0305  
       2023-11-22 09:36:03 +08:00
    如果不想花钱,存储用 ES 或者 Loki ,日志采集可以选用 Fluentbit/Fluentd ,Promtail ,或者直接代码里 POST Rest 过去
    面板选择很多,Grafana ,Kibana ,等等
    如果愿意花钱的选择就更多了,Datadog ,Splunk ,绝对要不不花钱的好用的多,一分钱一分货
    gabon
        16
    gabon  
       2023-11-22 10:06:43 +08:00 via iPhone
    clickhouse
    levelworm
        17
    levelworm  
       2023-11-22 10:27:19 +08:00 via Android
    不花钱 sqlite 不就行了。量不大 txt 也没啥问题。。。
    Aresxue
        18
    Aresxue  
       2023-11-22 10:35:19 +08:00
    fluentbit + ELK, 这个是最流行的商业级方案,小项目就存文件算了吧,切好片做好格式等日志规范是最实用的,出于学习目的就上 loki
    root71370
        19
    root71370  
       2023-11-22 10:37:15 +08:00
    clickhouse + iLogtail + clickVisual
    存储 收集 展示
    Insa
        20
    Insa  
       2023-11-22 10:50:11 +08:00
    loki 不行,几千万条日志搜索就会超时
    FanError
        21
    FanError  
       2023-11-22 10:54:23 +08:00
    现在学生做项目架构整这么复杂了吗?
    brom111
        22
    brom111  
       2023-11-22 11:01:21 +08:00
    有钱就选云服务,比如阿里的 sls 。没钱就 loki 和 es 2 选一,看你对日志的需求。 mysql 存储都是扯淡。
    aboutyang
        23
    aboutyang  
       2023-11-22 11:03:05 +08:00
    @lff0305 有 metrics 和 alarm 的方案吗?
    1QwQ1
        24
    1QwQ1  
       2023-11-22 11:11:04 +08:00   ❤️ 1
    从压缩比来说 mongo 和 elk 、clickhouse 都可以。但是从日志类型、相关工具来看 elk 周边更丰富些,其次是 mongo 最后是 clickhouse 。当然从管理这些集群的角度来说,可能是 mongo 复制集相对于 elk 集群和 ck 集群简单些。所以考虑都是要全面一点,选型也是项系统工程。
    liprais
        25
    liprais  
       2023-11-22 11:23:17 +08:00   ❤️ 2
    等你们 awk 搞不定了再来搞这些玩意不迟
    Frankcox
        26
    Frankcox  
       2023-11-22 11:26:21 +08:00
    elasticsearch+kibana
    数据库的话是 clickhouse
    victorc
        27
    victorc  
       2023-11-22 11:34:21 +08:00
    就你们这个小 case ,用 graylog 就行了

    数据库跑日志分析也行,但是万万不能用 mysql ,选了这个,防不住某个 2b 就把日志放进业务数据库,这就要搞砸了
    levelworm
        28
    levelworm  
       2023-11-22 11:36:52 +08:00 via Android
    @liprais 是啊我觉得还是简单点好。sed, awk 搞搞看,要不就 sqlite ,怎么也够了。
    hzfyjgw
        29
    hzfyjgw  
       2023-11-22 11:52:07 +08:00
    Parseable
    hzfyjgw
        30
    hzfyjgw  
       2023-11-22 11:53:11 +08:00
    Parseable + Vector
    4kingRAS
        31
    4kingRAS  
       2023-11-22 11:57:22 +08:00
    量小 ELK ,量大 Cassandra ,Hive
    lkkl007
        32
    lkkl007  
       2023-11-22 12:10:20 +08:00
    clickhouse 完胜
    Betsy
        33
    Betsy  
       2023-11-22 12:12:15 +08:00 via iPhone
    学生+小项目,存到 MySQL 就行。ES 是强,但是也意味着要投人维护一个新的重量级的组件,有种杀鸡用牛刀的感觉…
    TMaize
        34
    TMaize  
       2023-11-22 12:32:35 +08:00
    julyclyde
        35
    julyclyde  
       2023-11-22 12:34:35 +08:00
    @Betsy 那改成 zincsearch 算了,不重量
    steelshadow39
        36
    steelshadow39  
    OP
       2023-11-22 12:34:41 +08:00
    @Betsy 也不算是小项目,我研究生,导师接的国家级项目,我是主要开发
    steelshadow39
        37
    steelshadow39  
    OP
       2023-11-22 12:40:36 +08:00
    现在架构想法是:子模块还要自己维护一个子日志库,同时所有组还要给上传给总的日志库,如果我用 graylog ,es 存储的话,也就意味着各个子模块的开发也要用 es ,对于学生来说存在学习成本,所以其他人提议使用 MySQL 存
    stephenxiaxy
        38
    stephenxiaxy  
       2023-11-22 13:38:29 +08:00
    vector+clickhouse
    fatyoung
        39
    fatyoung  
       2023-11-22 13:42:48 +08:00
    @steelshadow39 #37 你提供一个公共的 API (查询日志,写入日志)出来,其他人直接调用,可以省去其他人的学习成本
    Huelse
        40
    Huelse  
       2023-11-22 13:42:58 +08:00   ❤️ 1
    前期可以直接用 MySQL/Postgresql 存,遇到需求了再从数据库发到 ES 检索,这种功能没必要提前优化
    dedemao
        41
    dedemao  
       2023-11-22 13:44:36 +08:00
    先用 MySQL 存吧,遇到问题了再换也不迟
    steelshadow39
        42
    steelshadow39  
    OP
       2023-11-22 13:54:12 +08:00 via Android
    @fatyoung 这是不是相当于我把 es 的 CRUD API 自己实现了一遍?我现在是通过配置 logback ,GELF UDP 发到 graylog ,这样是实时发送吧。如果用 API 的话,是不是只能定期上传,做不到实时吧,实时是否意味着要一直调 API
    Rorysky
        43
    Rorysky  
       2023-11-22 13:59:07 +08:00
    直接写文件
    zhaohua
        44
    zhaohua  
       2023-11-22 14:04:03 +08:00
    阿里云的 sls 非常便宜,小公司一年也就几百块钱顶天了.
    aaronkk
        45
    aaronkk  
       2023-11-22 14:07:20 +08:00
    VictoriaLogs 看一下
    牛吹得很大,号称比 es 大幅节省成本,号称比 loki 快,号称比 clickhouse 易用
    wwwz
        46
    wwwz  
       2023-11-22 17:09:39 +08:00   ❤️ 1
    如果都用 springboot
    日志生成用 logback 等生成格式相同的日志文件,这一步为止都是没有学习成本的

    再考虑采集加工储存查询使用什么,多台服务器采集可以搭集群然后集中管理
    ELK 资源耗用比较多,LOKI 轻量一点
    graylog 没用过不评价
    steelshadow39
        47
    steelshadow39  
    OP
       2023-11-22 18:08:07 +08:00 via Android
    @wwwz 日志上传好像是无回执,就是没有返回值,所以别人可能不知道自己上传是否成功,还得简单学一下 es API
    julyclyde
        48
    julyclyde  
       2023-11-22 18:54:04 +08:00
    @steelshadow39 导师的渠道搞来的国家级项目啊?那随便写写就行了
    Jat001
        49
    Jat001  
       2023-11-22 19:02:25 +08:00
    选型最忌讳的就是搞一个所有人都没用过的超复杂工具,特别是那些配置复杂的分布式项目,谁去部署谁未来就是救火队员。我还见过日志存文件,自己写 api 查询的呢,又不是不能用😅
    steelshadow39
        50
    steelshadow39  
    OP
       2023-11-22 19:11:28 +08:00
    @Jat001 嗯,这确实是我的错误,想选一个功能对口的组件,没太考虑学习成本
    Betsy
        51
    Betsy  
       2023-11-22 19:52:57 +08:00 via iPhone   ❤️ 1
    @julyclyde 我的出发点是系统本身用的是 MySQL ,没有必要额外引入一个新的组件增加维护成本。所以换个代码更少依赖更少的组件,本质上还是需要新增人来维护,徒增烦恼。
    onceMore
        52
    onceMore  
       2023-11-22 20:00:56 +08:00
    日志先全部存文件,效率比较高,后面做检索可以落地到 MySQL 、ES 加钱用服务都方便
    Betsy
        53
    Betsy  
       2023-11-22 20:01:57 +08:00 via iPhone
    @steelshadow39 这样啊,你的初衷是快速完成这个项目?还是想学习点新的东西?还有这个项目有没有亮点?能不能放到你未来校招的简历上?如果真的普普通通毫不起眼,你将来还指望找个不错的工作,那么请务必力推 ES ,一套完整的日志系统也足够校招吹牛批了。如果想快速弄完这个项目,那 MySQL 就很不错
    FrankAdler
        54
    FrankAdler  
       2023-11-22 20:14:19 +08:00 via Android
    可能 loki 都比 mysql 来的好,考量一下数据量稍微多一点点和查询性能
    ccagml
        55
    ccagml  
       2023-11-22 20:20:21 +08:00 via Android
    公司有写文件的,写 MySQL ,写 es 的,还是看数据量吧?一天一条日志,上什么集群对吧?
    steelshadow39
        56
    steelshadow39  
    OP
       2023-11-22 20:29:25 +08:00
    @Betsy 我的初衷是学东西,找工作。这个项目肯定是要作为简历中的一项。加上我是主要开发,所以我更倾向选择一些企业常用的,比较成熟的方案。
    Betsy
        57
    Betsy  
       2023-11-22 20:32:23 +08:00 via iPhone
    @steelshadow39 其实写 MySQL 也是企业常用的、成熟的方案。🤣🤣
    sadfQED2
        58
    sadfQED2  
       2023-11-22 20:48:00 +08:00 via Android   ❤️ 1
    目前使用最广的是 elk

    但是目前头部互联网公司很多都在往 ck 迁移(存储成本比 es 低)
    sadfQED2
        59
    sadfQED2  
       2023-11-22 20:49:09 +08:00 via Android
    你数据没有达到 pb 级别的话,直接 es
    如果日志连 tb 级别都没达到的话,那无所谓,什么技术方案都没影响
    frank42a
        60
    frank42a  
       364 天前
    elk 太重
    Jat001
        61
    Jat001  
       364 天前 via iPhone
    @Betsy 其实存文件也是企业常用、成熟的方案,哪有这么多高大上的东西啊,又不是不能用🤣
    steelshadow39
        62
    steelshadow39  
    OP
       364 天前
    @Betsy 这样嘛,之前认为日志是非结构数据,所以觉得 MySQL 存不太好。现在学到了,谢谢
    Daath
        63
    Daath  
       364 天前
    k8s 集群上用了 helm 部署 minio+loki+grafana
    TuringHero
        64
    TuringHero  
       364 天前
    Grafana Loki ,如果觉得 Loki 的查询太弱可以看下 openobserve ,比 ELK 还是要省很多资源的
    veni2023
        65
    veni2023  
       364 天前
    能联网的话,直接用阿里云的 sls,费用比加一台机器部署日志系统便宜
    xzysaber
        66
    xzysaber  
       364 天前
    Loki 够了,只是需要注意打好 label ,不然就会容易出现 timeout 。
    crazyweeds
        67
    crazyweeds  
       364 天前
    为什么没人推荐用时序数据库呢?
    crazyweeds
        68
    crazyweeds  
       364 天前
    @crazyweeds 好像只解决了存储问题,没解决索引问题,好吧。
    whp1473
        69
    whp1473  
       364 天前
    Promtail + loki + grafana + Prometheus
    这是比较流行的商业化方案,日志+监控+界面展示+告警都有
    whp1473
        70
    whp1473  
       364 天前
    @whp1473
    Promtail:日志采集器
    Loki:基于标签的日志存储
    Grafana:可以直接连接 Loki 、Prometheus 做可视化
    Prometheus:基于标签的监控告警
    chlinlearn
        71
    chlinlearn  
       364 天前   ❤️ 1
    简单业务可以试一试这个方案,基于 Nginx+Logstash+Elasticsearch+Syslog 记录请求 accesslog 日志,打造一个排查接口问题、统计流量数据、慢接口优化的开发运维利器。https://mp.weixin.qq.com/s/r-QINvPHoZIEllJKepxh0w
    gujinwind
        72
    gujinwind  
       361 天前
    直接使用 mysql 存可以的, 我就见过一个用 MySQL 存大量日志的程序
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3070 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.