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

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

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

    本人学生,最近项目在讨论日志存储的选型,后端是 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  
       2023-11-22 21:42:09 +08:00
    elk 太重
    Jat001
        61
    Jat001  
       2023-11-22 21:43:27 +08:00 via iPhone
    @Betsy 其实存文件也是企业常用、成熟的方案,哪有这么多高大上的东西啊,又不是不能用🤣
    steelshadow39
        62
    steelshadow39  
    OP
       2023-11-22 22:45:22 +08:00
    @Betsy 这样嘛,之前认为日志是非结构数据,所以觉得 MySQL 存不太好。现在学到了,谢谢
    Daath
        63
    Daath  
       2023-11-22 22:46:53 +08:00
    k8s 集群上用了 helm 部署 minio+loki+grafana
    TuringHero
        64
    TuringHero  
       2023-11-22 22:58:33 +08:00
    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  
       362 天前
    直接使用 mysql 存可以的, 我就见过一个用 MySQL 存大量日志的程序
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1414 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 17:24 · PVG 01:24 · LAX 09:24 · JFK 12:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.