@
tsingke 我之前也是使用 elasticsearch 做监控,用起来很爽, 但是 es 是真的重, 不是每个项目都能给你 4 核 32g 的服务器让你爽, 这种情况下 ES 特别尴尬, 所以我觉得 ES 至少不适合小型项目使用, 还不如直接用 zabbix 。
但是如果要自己来撸监控系统,又要在一定范围内用起来,覆盖到大部分场景,就是选择 mysql, 原因就是学习成本低, 百分之 80 的人可以轻松搭建配置 mysql,并且都有自己熟悉的一套维护方法。
而其他的比如 mongodb,pg 系的 timescale,influxdb 等可能更合适做这个事情, 但是有个重要的原因, 他需要使用者去多学习一项额外的技能, 而这项技能即使比 mysql 简单也不一定能被认可, 这个是一种惰性, 就是不想学, 不想用, 我们自己或许可以突破,但是很多人还是不愿意, 比如我自己,能用 mysql 解决的我就不碰 MongoDB, 我就是不想维护两个数据库,哪天让另一个人去维护, 他先来一句“为啥用 mongodb 啊”, 那时你就想抽他一巴掌,再抽自己一巴掌。
我总结了一下,这叫心智负担, 大部分比较喜欢技术和钻研技术的人,不会在意多用几种技术, 但是面向长期的使用场景, 越简单稳定的越好, 越不要自己折腾越好。
如果有便宜的云 elasticsearch,mongodb,timescale 可以随便用, 因为云平台解决了基础维护, 不会给使用者太多心智负担。
所以,总结下来, 其实 mysql 就很好, 也许有人说 mysql 真不适合存储日志类数据, 但是别忘了 MySQL 内置有 archive 存储引擎,那是专喂日志的, 压缩存储量只有 20%, 又不会有 CPU 压力,写入并发高的不得了, 虽然不能删除,没有索引支持, 但是通过按日期、月份分表就可以很轻松解决了, 程序里自动建表,控制单表数据量, 删除数据就直接删除历史表, 这也是符合日志型数据的管理方法的, 备份迁移直接拷贝数据文件, 不能再简单了,
至于聚合,可以对固定类型的做预先聚合存储, 比如对秒级实时数据做分钟间隔,小时间隔的聚合计算后存储, 前端对实时数据就小范围查询, 大范围数据就去查询分钟间隔,小时间隔的统计数据, 这样就很快, 实际上工业物联网不少领域就是这么存储和处理数据的。
前端可视化的可以输出到一些第三方系统, 比如 grafana, 或者直接使用 mapreduce,linq 、ReactiveX,echart 等方式输出。
很多小型的项目, 数据量不大, 基于 mysql archive (甚至都不用),是最合适的, 最后顺便鄙视开口闭口就是 mysql 绝对不适合存日志的, 很多连百万级的量都没有碰过, 几十万的数据优化都不会。