title: 使用grafana监控预警表格类型数据
date: 2021-10-20 14:19:25
tags:

  • ClickHouse
  • Grafana

背景

监控clickhouse服务,我们使用的是grafana+grafana-clickhouse插件,grafana只能报警graph类型数据,不能报警类似Table样式的数据,反应出来就是panel有没有alter这个Tab

grafana的Bar chart设置 grafana展示表格_时序数据库


对于graph类型数据比如CPU使用率,或者系统IO使用率的情况很容易就可以进行预警操作,但是对于一些表格数据,比如磁盘使用情况,如下图这种表格类型的数据就不能很好地支持预警,这时候需要我们对系统表简单的改造或者改写我们的查询SQL。

grafana的Bar chart设置 grafana展示表格_数据库_02

用’数据点’来预警

想要数据成graph或者Time series类型数据展示,我们肯定需要数据中存在一个时间字段,最好是连续的,首先我们使用的是grafana-clickhouse插件,查询的System.parts系统表来获取各个表大小然后求和,我们对parts表进行desc操作,查看其中的时间字段,发现有四个分别是‘modification_time’,‘remove_time’,‘min_time’,‘max_time’,四个时间字段分别的含义如下

remove_time (DateTime) – 数据片段变为非激活状态的时间。
min_time (DateTime) – 数据片段中日期和时间键的最小值。
max_time(DateTime) – 数据片段中日期和时间键的最小值。
modification_time (DateTime) – 修改包含数据片段的目录的时间。这通常对应于创建数据部分的时间。

有点蒙,没事我们直接选十条数据简单看一看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxQOOC3p-1637325894063)(https://liumengkai.github.io/2021/10/20/%E4%BD%BF%E7%94%A8grafana%E7%9B%91%E6%8E%A7%E9%A2%84%E8%AD%A6%E8%A1%A8%E6%A0%BC%E7%B1%BB%E5%9E%8B%E6%95%B0%E6%8D%AE/%E6%97%B6%E9%97%B4%E7%BB%93%E6%9E%9C.png)]
可以看出modification_time就是我们想要的时间字段,代表了最后一次修改的时间,这个是最合适的了,当然更合适的是连续时间字段,但是这里没有。有了时间字段我们需要做的就是写查询SQL了,我们在grafana中写下如下的查询SQL。

SELECT
    max(modification_time) as t,
    (sum(if(active, bytes, 0))) AS size_on_disk
FROM monitor.parts
ORDER BY size_on_disk desc

时间我使用的是最大的修改时间,这样的话就是一个时间点,这也是最大的缺点,呈现出来的结果是这样的

grafana的Bar chart设置 grafana展示表格_监控类_03


这样设计的思想是这个graph只是为了预警的作用,如果整体磁盘容量超过了我们设置的限制,比如80%就会报警,起到一个通知的作用,然后上线grafana去查看各个表的详细容量情况,再做出一些操作,比如删除某些分区数据或者扩容等

改变查询的系统表

第二种方法是修改我们查询的系统表,首先我们查询的是system.parts表,其中因为没有合适的连续时间字段导致我们不能很好地创建关于CK磁盘使用情况的时序数据,那换一种思维,我们自己来手动创建一个满足条件的表呢?需要满足的条件有以下几个。
(1)有连续的时间字段
(2)每个时间字段有对应的CK占用磁盘大小
连续的时间字段应该怎么搞定呢,我这里使用的是Linux自带的Crontab,每隔30s通过clickhouse-client去查询一次CK占用磁盘的总大小,然后和当前时间字段一起插入到一个新表即可,下面是我运行一段时间的效果,可以看到这次是连续的了,如果怕产生的数据条数太多可以给数据设置上TTL,这样就完成了我们想要的效果,同样也可以进行预警了。

grafana的Bar chart设置 grafana展示表格_数据_04