查日志只有ES好使?那是你没这样用Clickhouse……

一、背景

石墨文档全部应用部署在Kubernetes上,每时每刻都会有大量的日志输出,我们之前主要使用SLS和ES作为日志存储。但是我们在使用这些组件的时候,发现了一些问题。

1)成本问题

  • SLS个人觉得是一个非常优秀的产品,速度快,交互方便,但是SLS索引成本比较贵
  • 我们想减少SLS索引成本的时候,发现云厂商并不支持分析单个索引的成本,导致我们无法知道是哪些索引构建得不够合理
  • ES使用的存储非常多,并且耗费大量的内存

2)通用问题

  • 如果业务是混合云架构,或者业务形态有SAAS和私有化两种方式,那么SLS并不能通用
  • 日志和链路,需要用两套云产品,不是很方便

3)精确度问题

  • SLS存储的精度只能到秒,但我们实际日志精度到毫秒,如果日志里面有traceid,SLS中无法通过根据traceid信息,将日志根据毫秒时间做排序,不利于排查错误

我们经过一番调研后,发现使用Clickhouse能够很好地解决以上问题,并且Clickhouse省存储空间,非常省钱,所以我们选择了Clickhouse方案存储日志。但当我们深入研究后,Clickhouse作为日志存储有许多落地的细节,但业界并没有很好阐述相关Clickhouse采集日志的整套流程,以及没有一款优秀的Clickhouse日志查询工具帮助分析日志,为此我们写了一套Clickhouse日志系统贡献给开源社区,并将Clickhouse的日志采集架构的经验做了总结。先上个Clickhouse日志查询界面,让大家感受下石墨最懂前端的后端程序员。

二、架构原理图

我们将日志系统分为四个部分:日志采集、日志传输、日志存储、日志管理。

  • 日志采集: LogCollector采用Daemonset方式部署,将宿主机日志目录挂载到LogCollector的容器内,LogCollector通过挂载的目录能够采集到应用日志、系统日志、K8S审计日志等
  • 日志传输: 通过不同Logstore映射到Kafka中不同的Topic,将不同数据结构的日志做了分离
  • 日志存储: 使用Clickhouse中的两种引擎数据表和物化视图
  • 日志管理: 开源的Mogo系统,能够查询日志,设置日志索引,设置LogCollector配置,设置Clickhouse表,设置报警等

以下我们将按照这四大部分,阐述其中的架构原理。

三、日志采集

1、采集方式

Kubernetes容器内日志收集的方式通常有以下三种方案。

  • DaemonSet方式采集: 在每个node节点上部署LogCollec
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值