本人学生,最近项目在讨论日志存储的选型,后端是 springboot ,日志格式为 JSON ,组内有人提议使用 MYSQL 存储日志(因为系统体量不是特别大),我选的是 graylog (存储用的是 elasticsearch ,比 ELK 更轻量)。我觉得无论日志量大小,elasticsearch 的检索和日志处理都要比单纯用 MYSQL 强很多,用 MYSQL varchar 存 JSON ,查询出来还要解析,效率也太低了。并且处理日志本来就是 elasticsearch 的强项。
想请教各位前辈,公司开发在日志这块一般是怎么处理的,感谢各位前辈指点。
1 ccde8259 2023-11-21 23:17:22 +08:00 选不如买…… |
2 iomect 2023-11-21 23:17:41 +08:00 我们用的 Mongo |
3 steelshadow39 OP @ccde8259 学校项目,都是学生自己开发,没法买 |
![]() | 4 liuhan907 2023-11-21 23:26:35 +08:00 我们用 loki ,便宜 |
5 steelshadow39 OP @liuhan907 公司一般都是买吗?我以为都是自己搭的 |
![]() | 6 liuhan907 2023-11-21 23:44:08 +08:00 自己搭的 |
7 nosilence 2023-11-22 00:05:22 +08:00 从预估的日志量去选型 |
8 coolcoffee 2023-11-22 00:15:05 +08:00 elasticsearch+kibana 组合的全文搜索和索引条件搜索好用程度远超过 loki + grafana 。 有钱 ELK ,没钱 Loki 。 |
![]() | 9 silvernoo 2023-11-22 00:22:24 +08:00 rsyslog |
![]() | 10 bololobo 2023-11-22 08:29:49 +08:00 mysql 现在支持 JSON 格式了 |
![]() | 11 xuanbg 2023-11-22 08:43:50 +08:00 业务日志还是 mysql 吧,7.6 就支持 json 了。 |
![]() | 12 tramm 2023-11-22 08:52:00 +08:00 现在用的 ELK. 但是占用有点高. 我测试服务器上 docker 装了个 Loki,OpenObserve. 最终选择了 OpenObserve 记录一些以前未接入 ELK 的系统的日志(SpringBoot 本地日志通过 FluentBit 采集). |
13 yazinnnn0 2023-11-22 09:13:59 +08:00 graylog 是正经日志方案, 你是对的 |
14 zed1018 2023-11-22 09:16:54 +08:00 loki + minio |
15 lff0305 2023-11-22 09:36:03 +08:00 如果不想花钱,存储用 ES 或者 Loki ,日志采集可以选用 Fluentbit/Fluentd ,Promtail ,或者直接代码里 POST Rest 过去 面板选择很多,Grafana ,Kibana ,等等 如果愿意花钱的选择就更多了,Datadog ,Splunk ,绝对要不不花钱的好用的多,一分钱一分货 |
16 gabon 2023-11-22 10:06:43 +08:00 via iPhone clickhouse |
![]() | 17 levelworm 2023-11-22 10:27:19 +08:00 via Android 不花钱 sqlite 不就行了。量不大 txt 也没啥问题。。。 |
![]() | 18 Aresxue 2023-11-22 10:35:19 +08:00 fluentbit + ELK, 这个是最流行的商业级方案,小项目就存文件算了吧,切好片做好格式等日志规范是最实用的,出于学习目的就上 loki |
19 root71370 2023-11-22 10:37:15 +08:00 clickhouse + iLogtail + clickVisual 存储 收集 展示 |
20 Insa 2023-11-22 10:50:11 +08:00 loki 不行,几千万条日志搜索就会超时 |
![]() | 21 FanError 2023-11-22 10:54:23 +08:00 现在学生做项目架构整这么复杂了吗? |
![]() | 22 brom111 2023-11-22 11:01:21 +08:00 有钱就选云服务,比如阿里的 sls 。没钱就 loki 和 es 2 选一,看你对日志的需求。 mysql 存储都是扯淡。 |
24 1QwQ1 2023-11-22 11:11:04 +08:00 ![]() 从压缩比来说 mongo 和 elk 、clickhouse 都可以。但是从日志类型、相关工具来看 elk 周边更丰富些,其次是 mongo 最后是 clickhouse 。当然从管理这些集群的角度来说,可能是 mongo 复制集相对于 elk 集群和 ck 集群简单些。所以考虑都是要全面一点,选型也是项系统工程。 |
![]() | 25 F281M6Dh8DXpD1g2 2023-11-22 11:23:17 +08:00 ![]() 等你们 awk 搞不定了再来搞这些玩意不迟 |
![]() | 26 Frankcox 2023-11-22 11:26:21 +08:00 elasticsearch+kibana 数据库的话是 clickhouse |
27 victorc 2023-11-22 11:34:21 +08:00 就你们这个小 case ,用 graylog 就行了 数据库跑日志分析也行,但是万万不能用 mysql ,选了这个,防不住某个 2b 就把日志放进业务数据库,这就要搞砸了 |
![]() | 28 levelworm 2023-11-22 11:36:52 +08:00 via Android @liprais 是啊我觉得还是简单点好。sed, awk 搞搞看,要不就 sqlite ,怎么也够了。 |
![]() | 29 hzfyjgw 2023-11-22 11:52:07 +08:00 Parseable |
![]() | 30 hzfyjgw 2023-11-22 11:53:11 +08:00 Parseable + Vector |
31 4kingRAS 2023-11-22 11:57:22 +08:00 量小 ELK ,量大 Cassandra ,Hive |
![]() | 32 lkkl007 2023-11-22 12:10:20 +08:00 clickhouse 完胜 |
![]() | 33 Betsy 2023-11-22 12:12:15 +08:00 via iPhone 学生+小项目,存到 MySQL 就行。ES 是强,但是也意味着要投人维护一个新的重量级的组件,有种杀鸡用牛刀的感觉… |
![]() | 34 TMaize 2023-11-22 12:32:35 +08:00 |
36 steelshadow39 OP @Betsy 也不算是小项目,我研究生,导师接的国家级项目,我是主要开发 |
37 steelshadow39 OP 现在架构想法是:子模块还要自己维护一个子日志库,同时所有组还要给上传给总的日志库,如果我用 graylog ,es 存储的话,也就意味着各个子模块的开发也要用 es ,对于学生来说存在学习成本,所以其他人提议使用 MySQL 存 |
![]() | 38 stephenxiaxy 2023-11-22 13:38:29 +08:00 vector+clickhouse |
39 fatyoung 2023-11-22 13:42:48 +08:00 @steelshadow39 #37 你提供一个公共的 API (查询日志,写入日志)出来,其他人直接调用,可以省去其他人的学习成本 |
40 Huelse 2023-11-22 13:42:58 +08:00 ![]() 前期可以直接用 MySQL/Postgresql 存,遇到需求了再从数据库发到 ES 检索,这种功能没必要提前优化 |
![]() | 41 dedemao 2023-11-22 13:44:36 +08:00 先用 MySQL 存吧,遇到问题了再换也不迟 |
42 steelshadow39 OP @fatyoung 这是不是相当于我把 es 的 CRUD API 自己实现了一遍?我现在是通过配置 logback ,GELF UDP 发到 graylog ,这样是实时发送吧。如果用 API 的话,是不是只能定期上传,做不到实时吧,实时是否意味着要一直调 API |
![]() | 43 Rorysky 2023-11-22 13:59:07 +08:00 直接写文件 |
44 zhaohua 2023-11-22 14:04:03 +08:00 阿里云的 sls 非常便宜,小公司一年也就几百块钱顶天了. |
45 aaronkk 2023-11-22 14:07:20 +08:00 VictoriaLogs 看一下 牛吹得很大,号称比 es 大幅节省成本,号称比 loki 快,号称比 clickhouse 易用 |
46 wwwz 2023-11-22 17:09:39 +08:00 ![]() 如果都用 springboot 日志生成用 logback 等生成格式相同的日志文件,这一步为止都是没有学习成本的 再考虑采集加工储存查询使用什么,多台服务器采集可以搭集群然后集中管理 ELK 资源耗用比较多,LOKI 轻量一点 graylog 没用过不评价 |
47 steelshadow39 OP @wwwz 日志上传好像是无回执,就是没有返回值,所以别人可能不知道自己上传是否成功,还得简单学一下 es API |
48 julyclyde 2023-11-22 18:54:04 +08:00 @steelshadow39 导师的渠道搞来的国家级项目啊?那随便写写就行了 |
![]() | 49 Jat001 2023-11-22 19:02:25 +08:00 选型最忌讳的就是搞一个所有人都没用过的超复杂工具,特别是那些配置复杂的分布式项目,谁去部署谁未来就是救火队员。我还见过日志存文件,自己写 api 查询的呢,又不是不能用 |
50 steelshadow39 OP @Jat001 嗯,这确实是我的错误,想选一个功能对口的组件,没太考虑学习成本 |
![]() | 51 Betsy 2023-11-22 19:52:57 +08:00 via iPhone ![]() @julyclyde 我的出发点是系统本身用的是 MySQL ,没有必要额外引入一个新的组件增加维护成本。所以换个代码更少依赖更少的组件,本质上还是需要新增人来维护,徒增烦恼。 |
52 onceMore 2023-11-22 20:00:56 +08:00 日志先全部存文件,效率比较高,后面做检索可以落地到 MySQL 、ES 加钱用服务都方便 |
![]() | 53 Betsy 2023-11-22 20:01:57 +08:00 via iPhone @steelshadow39 这样啊,你的初衷是快速完成这个项目?还是想学习点新的东西?还有这个项目有没有亮点?能不能放到你未来校招的简历上?如果真的普普通通毫不起眼,你将来还指望找个不错的工作,那么请务必力推 ES ,一套完整的日志系统也足够校招吹牛批了。如果想快速弄完这个项目,那 MySQL 就很不错 |
54 FrankAdler 2023-11-22 20:14:19 +08:00 via Android 可能 loki 都比 mysql 来的好,考量一下数据量稍微多一点点和查询性能 |
55 ccagml 2023-11-22 20:20:21 +08:00 via Android 公司有写文件的,写 MySQL ,写 es 的,还是看数据量吧?一天一条日志,上什么集群对吧? |
56 steelshadow39 OP @Betsy 我的初衷是学东西,找工作。这个项目肯定是要作为简历中的一项。加上我是主要开发,所以我更倾向选择一些企业常用的,比较成熟的方案。 |
![]() | 57 Betsy 2023-11-22 20:32:23 +08:00 via iPhone @steelshadow39 其实写 MySQL 也是企业常用的、成熟的方案。 |
![]() | 58 sadfQED2 2023-11-22 20:48:00 +08:00 via Android ![]() 目前使用最广的是 elk 但是目前头部互联网公司很多都在往 ck 迁移(存储成本比 es 低) |
![]() | 59 sadfQED2 2023-11-22 20:49:09 +08:00 via Android 你数据没有达到 pb 级别的话,直接 es 如果日志连 tb 级别都没达到的话,那无所谓,什么技术方案都没影响 |
60 frank42a 2023-11-22 21:42:09 +08:00 elk 太重 |
62 steelshadow39 OP @Betsy 这样嘛,之前认为日志是非结构数据,所以觉得 MySQL 存不太好。现在学到了,谢谢 |
![]() | 63 TheGonG 2023-11-22 22:46:53 +08:00 k8s 集群上用了 helm 部署 minio+loki+grafana |
![]() | 64 TuringHero 2023-11-22 22:58:33 +08:00 Grafana Loki ,如果觉得 Loki 的查询太弱可以看下 openobserve ,比 ELK 还是要省很多资源的 |
65 veni2023 2023-11-23 10:45:55 +08:00 能联网的话,直接用阿里云的 sls,费用比加一台机器部署日志系统便宜 |
![]() | 66 xzysaber 2023-11-23 11:00:00 +08:00 Loki 够了,只是需要注意打好 label ,不然就会容易出现 timeout 。 |
67 crazyweeds 2023-11-23 13:02:51 +08:00 为什么没人推荐用时序数据库呢? |
68 crazyweeds 2023-11-23 13:10:24 +08:00 @crazyweeds 好像只解决了存储问题,没解决索引问题,好吧。 |
69 whp1473 2023-11-23 14:49:56 +08:00 Promtail + loki + grafana + Prometheus 这是比较流行的商业化方案,日志+监控+界面展示+告警都有 |
70 whp1473 2023-11-23 14:51:38 +08:00 |
![]() | 71 chlinlearn 2023-11-23 16:12:01 +08:00 ![]() 简单业务可以试一试这个方案,基于 Nginx+Logstash+Elasticsearch+Syslog 记录请求 accesslog 日志,打造一个排查接口问题、统计流量数据、慢接口优化的开发运维利器。https://mp.weixin.qq.com/s/r-QINvPHoZIEllJKepxh0w |
![]() | 72 gujinwind 2023-11-25 21:57:52 +08:00 直接使用 mysql 存可以的, 我就见过一个用 MySQL 存大量日志的程序 |