为了账号安全,请及时绑定邮箱和手机立即绑定

grafana做集群监控展示的技巧和踩坑

随着业务的增大,集群机器也越来越多,面对动辄2k台机器的集群,采集的指标也是多的可怕,每个指标都很重要,所以如何从庞大的数据中解脱出来,就需要有一个合理的集群的展示。grafana作为一个可视化工具,不但提供了多种数据源的对接,而且提供了丰富的图表,功能特别完善,但是如何做一个合理的集群监控展示,是需要思考的问题。

集群数据的特点

  • 标签化
    标签化是大数据量的标配,我们有5000台机器,哪些机器是有什么样的集群服务是必须标识的,例如2000台物理机器组成了一个hdfs集群,那么这2000台机器上的数据必须有相应的标识,例如这是hdfs集群x,上面有zk服务等,当一台机器故障了,你可以立马知道是集群x的zk机器出问题了。而不是我知道192.168.1.2的机器死了一个进程,经过比对,发现是zk,然后根据ip发现这个是集群x的问题。反射弧太长了。
  • 数据量很大
    集群量很大,如何做巡检是个问题,以前10台机器的时候,可以ssh到集群一台一台的看gc日志,也可以把gc的信息上报过来,然后做个仪表盘显示gc次数和时间,100台的时候可以在一个页面,1000台的时候可以做分页,1w台的时候,不知道看分页是否会翻的手麻。

grafana的落地方式

数据的标签化需要采集程序或者手机程序来做,grafana可以通过表达式变量获取出标签,也可以把标签作为变量。如何面对大量指标数据呢,这里需要一个技巧,就是帅选,在grafana做图的时候,对查询语句做过滤,例如gc的指标可以选择gc次数最多的10个实例,我们的视角已经可以从几千,几万到几十。这么做一个是从概率考虑,异常情况本来就是一个少数情况,而且10个实例有问题,通过排查也就知道是一个集群的共性问题,还是少数实例的问题。如果这次的10个高的都是个例,那么在解决后,下次采集会产生新的10个高的,可以依次解决下去。需要作图的时候做过滤,对每一个指标做一个上限和下线的阈值。这样能看到的数据都是可能出问题的了。
对应集群的标签,常见的有两种。

  1. 使用水平切割。例如我一个固定的 prometheus只采集固定的一个集群的数据。
  2. 多集群混在一起。 一个prometheus采集多个集群的数据。
    上面的两种情况grafana的变量都支持。
    图片描述

grafana支持多种类型的变量,我们说说几种常见的。

  • datasource
    列举出所有的datasource。然后可以使用我们起的name加$来获取,例如name为datasource获取所选的DataSource的方式就是$datasource。这种方式针对使用水平切割的场景。
  • custom
    这一种是纯粹自定义的。只适用于能枚举的场景,例如性别。
  • query
    他支持四种方式的查询,从对应的数据库里获取指标,例如数据源为Prometheus的时候。
    label_values(label) 返回每个指标中label的标签值列表
    label_values(metric, label) 返回指定指标中label的标签值列表
    metrics(metric) 返回与指定的metric正则表达式匹配的指标列表
    query_result(query) 返回query的Prometheus查询结果列表
    这种情况就适用多集群混在一起的场景。

站在巨人的肩膀

上面列举了一些合理做查询以及变量控制的方法,这些都是宗旨级别的,肯定有人已经对某些具体的场景做了模板化。grafana有这样的共享网站。
https://grafana.com/dashboards
在网站上我们可以查到一些具体的场景,我们可以在他的基础上继续迭代。

踩坑系列

  • table如何隐藏不需要的列
    查询的数据是可以直接使用table进行展示的
    图片描述
    会把所有查询出的label都作为列,Prometheus并没有结果把label去掉的能力,所以都直接展示出来了,而且当前界面还没有类型的选择。最终发现他在style的设置里。把type类型设置为hidden。
    图片描述

  • 双引号的坑
    grafana是通过json来保存图案样式的,如果查询条件写了service="$name"。转化出来的字符串就是service=\"$name\"。在使用变量的是单引号和双引号的效果是一样的,但是双引号有转移符,在直接处理json样式的时候是个麻烦。

  • 查询慢会拖垮界面
    grafana第一次打开dashboard的时候会渲染数据,如果查询特别慢,并不是直接nodata,而是整个dashboard都显示不出来,直接一片黑。

  • 如何快速增加查询条件
    当我们导入一个现成的dashboard的时候,会做一些定制化,例如查询,都加入某些条件,如果是一个一个图点击编辑然后加,上百张图操作就是噩梦。所以我们需要直接编辑json来完成操作。dashboard的json拷贝出来,根据关键字关键字metric。把条件加入,最后再保存回jsonmodel去。
    图片描述

  • 如何快速切换数据源
    数据源切换是特别常见的事情,一个一个图的换,肯定是不可取的。好用的方法有两种。

  1. jsonmodel拷贝出来根据datasource直接文本替换
  2. 数据源名称不变,替换url。
点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.6万
获赞与收藏
380

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消