一、背景

这个项目是一个监控系统,主要监控主机、网络设备、应用等。主机监控的数量有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;

```

ClickHouse在监控系统中的应用的更多相关文章

  1. 【转】Spark Streaming 实时计算在甜橙金融监控系统中的应用及优化

    系统架构介绍 整个实时监控系统的架构是先由 Flume 收集服务器产生的日志 Log 和前端埋点数据, 然后实时把这些信息发送到 Kafka 分布式发布订阅消息系统,接着由 Spark Streami ...

  2. 日志监控系统中,大批量查询mysql方案

    最近开发遇到一个问题:需要查询一个大时间段内的数据,分1000个小段,即为1000个点.X轴是时间,Y轴是该小时间段内统计后数据.注意:数据返回是一个list,其中每个对象返回值都是该小时间段内数据统 ...

  3. 动环监控系统中B接口的实现

    动环监控系统简述 1.术语介绍 1.1 省集中监控中心-Province Supervision Center(PSC) 面向多FSU管理的高级监控层次,即省集中监控中心,通过开放的数据协议,连接监控 ...

  4. 开源监控系统中 Zabbix 和 Nagios 哪个更好?

    监控平台的话,各有优劣,但基本都可以满足需求.等达到一定监控指标后,发现,最困难的是监控项目的管理. CMDB中小规模(服务器<=1k):Zabbix大规模(1k>=服务器<=10k ...

  5. Zabbix监控系统深度实践

    Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著  ISBN 978-7-121-24 ...

  6. HBase实践案例:车联网监控系统

    项目背景 本项目为车联网监控系统,系统由车载硬件设备.云服务端构成.车载硬件设备会定时采集车辆的各种状态信息,并通过移动网络上传到服务器端.服务器端接收到硬件设备发送的数据首先需要将数据进行解析,校验 ...

  7. 搭建前端监控系统(二)JS错误监控篇

    ===================================================================== 前端性能监控系统: DEMO地址    GIT代码仓库地址 ...

  8. OneAPM大讲堂 | 基于图像质量分析的摄像头监控系统的实现

    今天咱们要介绍的技术很简单,请看场景: 你在家里安装了几个摄像头想监视你家喵星人的一举一动,然而,就在喵星人准备对你的新包发动攻击的时候,图像突然模糊了.毕竟图像模糊了以后你就没法截图回家和喵当面对质 ...

  9. Grafana3.0.1+Zabbix3.0.4监控系统平台搭建

    前言 本文的Zabbix部分知识只介绍它的基础安装,Zabbix的使用以及配置优化并不在本文的介绍范围之内. 本文只介绍在CentOS6系列下的安装和部署,其他发行版与其他版本号暂不涉及 本文默认使用 ...

随机推荐

  1. 【Service】【Web】【Middleware】Tomcat

    1. 概念 1.1. 官方网站:tomcat.apache.org 1.2. tomcat的组件 <Server> <Service> <Connector/> & ...

  2. 【Linux】【Services】【Web】Nginx基础

    1. 概念 1.1. 消息通知机制:同步synchronous,异步asynchronous 同步:等待对方返回信息 异步:被调用者通过状态.通知或回调通知调用者 状态:调用者每隔一段时间就需要检查一 ...

  3. 2.ElasticSearch集群的搭建

    1.创建elasticsearch-cluster文件夹,在内部复制三个elasticsearch服务 2.修改elasticsearch-cluster\node*\config\elasticse ...

  4. 加密解密、食谱、新冠序列,各种有趣的开源项目Github上都有

    Github上是我们程序员学习开源代码.提升编程技巧的好地方.好学校,但是除了学习,小伙伴们有没有发现过Github上一些特别有意思的项目呢? 今天TJ君就来和大家分享几个自认为特别有趣的开源项目: ...

  5. netty系列之:性能为王!创建多路复用http2服务器

    目录 简介 多路复用的基础 多路复用在server端的使用 配置TLS处理器 配置clear text upgrade 总结 简介 在之前的文章中,我们提到了在netty的客户端通过使用Http2Fr ...

  6. 关于input单选框的radio属性

    最近在做前端页面的时候遇到一个问题(后端php猴子前端不怎么写) 我写了一段代码: <form action="">        <label for=&quo ...

  7. Mac配置apache,mysql

    ===========Apache=============================== 1. 启动关闭Apache MAC系统已经预装了apache,启动.关闭.查看版本等命令如下: 启动a ...

  8. pthread_cond_signal与pthread_cond_wait详解

    转:http://blog.chinaunix.net/uid-11572501-id-3456343.html //pthread_cond_signal 只发信号,内部不会解锁,在Linux 线程 ...

  9. [BUUCTF]REVERSE——reverse3

    reverse3 附件 步骤: 例行查壳儿,32位程序,无壳儿 32位ida载入,shift+f12检索程序里的字符串,得到了有关flag的提示,而且看到了ABCDE--78这种字符串,猜测存在bas ...

  10. 资源分配单位(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 那些分配了资源的任务,其中的资源是有数量单位的,默认工时单位是100%,材料单位是1. 比如某吃货,为了完成吃米饭这一任务 ...