ClickHouse在监控系统中的应用
一、背景
这个项目是一个监控系统,主要监控主机、网络设备、应用等。主机监控的数量有1500台左右,数量还在不断增长,加上网络设备和应用,目前总共监控的指标达到近40万个。
二、问题
一开始为了快速交付,采用的是MySQL来存储采集的指标数据,刚开始指标不是很多,采集频率也不是很高,业务还是比较稳当的。
但是随着时间的推移,接入的指标越来越多,问题开始暴露出来了,主要表现在以下几个方面:
1. MySQL的数据占用空间增长很快,一天差不多要增长2个G,不到1年时间指标历史表单表达到了500G+;
2. 数据备份变得很困难,特别是全量备份,需要花数天时间,备份的数据恢复也需要同等时间;
3. 一些统计功能出现超时,比如统计某些指标一天的最大值、最小值、平均值等;
三、改造方案
经过团队成员的初步讨论,改造方案有三个:
1. 基于mysql,进行分表;
2. 基于mongoDB,重新实现指标的存取逻辑;
3. 基于clickhouse,重写部分指标存取逻辑;
最终,我们敲定了方案3。
三、ClickHouse的特点
1. 列式数据库;
2. 稀疏索引;
3. 支持横向扩展;
4. 兼容SQL协议;
5. 支持mybatis;
6. 空间占用率低;
7. 统计效率高;
四、部署架构
采用了复制集模式,一分区,两复制集模式;
五、遇到的问题
1. 复制集、分区关系没有搞明白,导致数据混乱;
2. 清理zookeeper的数据,没有清理掉clickhouse的数据,导致数据不一致;
3. zookeeper崩溃,导致clickhouse变为只读模式,不能写入数据;
六、总结
1. clickhouse适合大批量写入的且不咋更新删除的业务;
2. 多分区会带来更复杂的配置,且对性能有较大影响;
3. 查询的时候尽量返回更少的字段,会提升性能;
4. 虽然是稀疏索引,但索引一样的尽量要有区分度才好;
5. 复制集模式,每个节点需要单独建表;
七、建表语句示例
```
CREATE TABLE demo.metric (
`id` Int64,
`instance_id` String,
`metric_id` Nullable(String),
`metric_name` String,
`type` Nullable(String),
`unit` Nullable(String),
`data` Nullable(String),
`period` Nullable(String),
`time` DateTime,
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/demo.metric ', '{replica}')
PARTITION BY toYYYYMM(time)
ORDER BY
(time,metric_name,instance_id) SETTINGS index_granularity = 8192;
```
最新文章
- dialog
- 利用IIS管理器模拟CDN
- css定位position认识
- tomcat的下载安装和配置以及和eclipse的配置
- ASP.NET输出流至少要有256个字节的数据后Response.Flush方法才会生效
- Linux中Bash发现重大安全漏洞修改方法
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
- grep简单常用的语法介绍
- HTML5与CSS3权威指南.pdf5
- SpringSecurity 在MVC 中的简单使用(翻译的,稍加改动)
- 关于iphone点击readonly的input虚拟键盘不消失的情况
- (转)认识java中的堆和栈
- MyDAL - .Where() &; .And() &; .Or() 使用
- Android为TV端助力 遥控器的映射
- @Html自定义属性
- React-Native + Genymotion android开发环境搭建
- Sanic
- vue教程3-05 vue组件数据传递、父子组件数据获取,slot,router路由
- MFC中Carray的使用
- phpsession配置
热门文章
- Linux基础命令---mput上传ftp文件
- mybtis入门
- 【Github】如何下载csv文件/win10如何修改txt文件为csv文件
- 『学了就忘』Linux系统管理 — 81、进程管理介绍
- 铁人三项(第五赛区)_2018_rop
- 资源分配单位(Project)
- CF41C Email address 题解
- response.setHeader(";xxx";,";大侠";)如果赋值中文,那么将不会在页面出值,
- Chrome的强大搜索功能
- 海康威视Java SDK拉流(一)初始化SDK