本人学生,最近项目在讨论日志存储的选型,后端是 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 1
从压缩比来说 mongo 和 elk 、clickhouse 都可以。但是从日志类型、相关工具来看 elk 周边更丰富些,其次是 mongo 最后是 clickhouse 。当然从管理这些集群的角度来说,可能是 mongo 复制集相对于 elk 集群和 ck 集群简单些。所以考虑都是要全面一点,选型也是项系统工程。
|
25
liprais 2023-11-22 11:23:17 +08:00 2
等你们 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 1
前期可以直接用 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 1
如果都用 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 1
@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 1
目前使用最广的是 elk
但是目前头部互联网公司很多都在往 ck 迁移(存储成本比 es 低) |
59
sadfQED2 2023-11-22 20:49:09 +08:00 via Android
你数据没有达到 pb 级别的话,直接 es
如果日志连 tb 级别都没达到的话,那无所谓,什么技术方案都没影响 |
60
frank42a 364 天前
elk 太重
|
62
steelshadow39 OP @Betsy 这样嘛,之前认为日志是非结构数据,所以觉得 MySQL 存不太好。现在学到了,谢谢
|
63
Daath 364 天前
k8s 集群上用了 helm 部署 minio+loki+grafana
|
64
TuringHero 364 天前
Grafana Loki ,如果觉得 Loki 的查询太弱可以看下 openobserve ,比 ELK 还是要省很多资源的
|
65
veni2023 364 天前
能联网的话,直接用阿里云的 sls,费用比加一台机器部署日志系统便宜
|
66
xzysaber 364 天前
Loki 够了,只是需要注意打好 label ,不然就会容易出现 timeout 。
|
67
crazyweeds 364 天前
为什么没人推荐用时序数据库呢?
|
68
crazyweeds 364 天前
@crazyweeds 好像只解决了存储问题,没解决索引问题,好吧。
|
69
whp1473 364 天前
Promtail + loki + grafana + Prometheus
这是比较流行的商业化方案,日志+监控+界面展示+告警都有 |
70
whp1473 364 天前
|
71
chlinlearn 364 天前 1
简单业务可以试一试这个方案,基于 Nginx+Logstash+Elasticsearch+Syslog 记录请求 accesslog 日志,打造一个排查接口问题、统计流量数据、慢接口优化的开发运维利器。https://mp.weixin.qq.com/s/r-QINvPHoZIEllJKepxh0w
|
72
gujinwind 361 天前
直接使用 mysql 存可以的, 我就见过一个用 MySQL 存大量日志的程序
|