一、背景

这个项目是一个监控系统,主要监控主机、网络设备、应用等。主机监控的数量有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. java多线程 并发编程

    一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...

  2. 深入理解java动态代理机制

    动态代理其实就是java.lang.reflect.Proxy类动态的根据您指定的所有接口生成一个class byte,该class会继承Proxy类,并实现所有你指定的接口(您在参数中传入的接口数组 ...

  3. js - 日期、时间 Date对象方法

    Date 是 JS 内置的日期构造函数 var d = new Date();  // 这个是系统当前时间的日期实例 d.getYear(); // 返回 d 实例年份 - 1900 d.getFul ...

  4. podman wsl2在windows重启后出错

    1. error joining network namespace for container 如果没有先停止容器就重启windows,极大概率就会出现这个问题 解决方法 先停止停止的容器再启动已退 ...

  5. ICCV2021 | 简单有效的长尾视觉识别新方案:蒸馏自监督(SSD)

    ​  前言  本文提出了一种概念上简单但特别有效的长尾视觉识别的多阶段训练方案,称为蒸馏自监督(Self Supervision to Distillation, SSD).在三个长尾识别基准:Ima ...

  6. Jenkins优化

    目录 一.修改 JVM 的内存配置 二.修改jenkins 主目录 一.修改 JVM 的内存配置 Jenkins 启动方式有两种方式,一种是以 Jdk Jar 方式运行,一种是将 War 包放在 To ...

  7. Nginx SERVER块配置

    1 Listen 指令 Example Configuration Directives 2 server_name指令 2.1 规则 指令后可以跟多个域名,第一个是主域名 *泛域名:进支持在最前或最 ...

  8. hooks中,useState异步问题解决方案

    问题描述: 在hooks中,修改状态的是通过useState返回的修改函数实现的.它的功能类似于class组件中的this.setState().而且,这两种方式都是异步的.可是this.setSta ...

  9. 小迪安全 Web安全 基础入门 - 第一天 - 操作系统&名词&文件下载&反弹SHELL&防火墙绕过

    一.专业名词 1.POC:(Proof of Concept),即概念验证.漏洞报告中的POC是一段说明或一个攻击的样例使读者能够确认这个漏洞是真实存在的. 2.EXP:exploit,即漏洞利用.对 ...

  10. LuoguP7892 『JROI-3』R.I.P. 题解

    Update \(\texttt{2021.10.11}\) 修改了一处公式错误,麻烦管理重新审核一下这篇已审核通过文章. Content 你在一个无限大的格子平面上,并且有 \(m\) 个长度为 \ ...