性能文章>【云原生•监控】夜莺监控系统的可观测性实操 - 1>

【云原生•监控】夜莺监控系统的可观测性实操 - 1原创

430845

前言

「笔者已经在公有云上搭建了一套临时环境,可以先登录体验下:」

http://124.222.45.207:17000/login
账号:root/root.2020

指标监控

记录规则

记录规则(Record Rule)实现基于现有指标数据计算出新指标数据,通过定时周期(interval)执行计算规则,形成新的指标时序数列。生产中记录规则往往用于简化PromQL复杂性,夜莺监控系统也是支持的:

但是,需要注意的是,「夜莺系统中配置记录规则,并不是比如生成Rule规则文件下发到Prometheus中,而是采用【远程查询】- 【解析】 - 【远程写入】方式,涉及到远程读写,所以这里可能需要关注网络IO情况」。因为Prometheus配置管理这块较弱,没有提供配置管理功能,也没有相关接口,只能进行文件加载,若要搞成下发配置则需要agent才行,对于后面的告警规则一样,也是远程读取数据自行管理触发告警事件,而没有使用Rule Alarm方式。夜莺系统规则计算逻辑具体参见如下代码:

源码说明:

  1. 每条记录规则( Record Rule)都会创建一个协程进行计算;
  2. rrc.Eval()就是记录规则计算逻辑,然后 Sleep一段时间,实现 interval间隔计算规则逻辑;

主要步骤:

1、rrc.promClients.GetCli(rrc.datasourceId).Query():根据Record Rule配置的PromQL从指定数据源查询数据;

2、ts := ConvertToTimeSeries(value, rrc.rule):解析查询数据,主要是将自定义标签(label)添加进去;

3、rrc.promClients.GetWriterCli(rrc.datasourceId).Write(ts):将添加了自定义标签的(label)数据远程写入到数据源中。

1、配置prometheus数据源时,【write_addr】就是配置remote_write地址;

2、如果使用Prometheus,则需要打开--web.enable-remote-write-receiver开关,即将Prometheus作为TSDB库,可以通过remote-write方式远程写入数据,对应接口地址:http://xxx:port/api/v1/write

3、如果使用vm作为远端存储,则需要提供vminsert组件提供的remote write协议接口:http://ip:port/api/v1/write

即时查询

【即时查询】提供PromQL查询页面功能,基本类似于Prometheus UI查询页面,特别需要说的是提供【新手模式】,基本通过表单下拉框选项就可以构建出PromQL查询语句,对于初学者不太熟悉PromQL语法的同学稍显友好,深入学习还是建议PromQL,更加直接灵活,比如group left/right等多指标关联暂未找到支持:

快捷视图

【快捷视图】属于夜莺系统的一个特色功能,主要是简化即时查询,同时作为监控大盘的一个补充,毕竟组件暴露的指标可能大几十到上百个,而Dashboard展示的内容毕竟有限,难免故障定位中需要查询额外指标信息,这就是【快捷视图】的使用场景。

默认提供了一个【Host View】视图,这里比如自定义个MySQL组件视图,用于查看MySQL组件指标:

完成后如下图:

「原理解读:」

  • 前置条件用于赛选指标序列series,然后就是指定两个标签:动态过滤标签和展开维度标签;
  • 展开维度标签一般就是获取采集点或实例;
  • 动态过滤标签就是对步骤2中采集点或实例进行分组筛选,比如 MySQL节点非常多,可以按照网络域分组方便查找;
  • 选中【MySQL视图】,然后勾选故障MySQL实例节点,监控指标栏就展示出该节点所有指标信息,并按照前缀tab展示(前缀就是截取第一个下划线前面部分),指标说明需要通过 metrics.yaml文件维护;

指标查询接口如:/api/v1/label/「name」/values?start=1681826693&end=1681830293&match[]=ident=~"VM-4-14-centoscategraf01"

所以,比如ident标签这里要唯一代表一个实例,如一个主机上部署多个exporter就不要使用主机名无法区分,需要使用类似于instance标签,带有ip:port唯一标识。

  • 比如这里查看 disk_io_time指标,下面就以 ident实例维度聚合,即每个实例展示以 avg均值聚合展示一条趋势线,【聚合函数】下拉框可以切换不同的聚合函数,还可以使用计算函数进行数值处理;
  • 【环比】提供1天和7天环比,借助 PromQLoffset偏移功能

仪表盘

内置仪表盘

内置仪表盘提供夜莺监控提供的内置公共监控Dashboard,公共Dashboard作为基础模板大家都会使用,所以这里禁止编辑,避免相互影响,如果需要编辑修改做自定义定制,则使用【克隆】功能将公共模板复制一份到指定业务组下,这样业务组就拥有一份私有Dashboard,编辑修改也不会影响到其它项目组监控功能,类似于Grafana实现多租户实现Dashboard隔离:

监控仪表盘

内置仪表盘通过克隆成业务组私有仪表盘,就可以在【监控仪表盘】页面看到,该页面仪表盘按照业务组划分。

夜莺仪表盘可视化数据没有使用Grafana,而是自己开发实现,更加的轻量,方便系统整合。仪表盘和Grafana仪表盘对比,大致概念,操作逻辑相似度非常高,熟悉Grafana仪表盘的用户上手夜莺仪表盘基本没有任何压力,所以,对从Grafana切换过来的用户比较友好,最大的障碍是Grafana官网提供的大量Dashboard没法兼容使用。

但是,我在使用夜莺仪表盘配置过程中发现,夜莺仪表盘功能上还是有很多**,保留了大部分常用功能,毕竟Grafana也是一套庞大的系统。

我在配置过程中还是发现一些常见实用的功能缺失:

「1、缺失业务组筛选」

点击查看仪表盘,ident下拉框筛选主机,发现所有业务组的主机节点都在下拉框中,前端打开Dashboard时应该将业务组标签传递进来(这样感觉定义业务组时必须打开英文标识才行),Dashboard定义一个Constant变量进行接收,然后对ident进行基于业务组标签筛选:

「2、变量列表不支持变量引用,导致下拉框联动无法实现。」

比如在Dashboard上定义了两个维度筛选下拉框【group】和【name】,【name】下拉框需要和【group】下拉框联动,配置如下,但是夜莺系统好像不太支持。

「3、Data Link功能缺失」

很多场景下都需要监控大盘,监控大盘可以汇总的展示所有节点指标数据,在监控大盘中table是常用组件,基于table将所有节点及其重要核心指标列表方式直观展示出来,并基于Data Link跳转指定节点看详情,即「监控下钻」功能,然后我在夜莺监控Dashboard中并没有找到Data Link功能,只看到【链接】功能,链接只能针对到panel级别跳转,不能到达数据级别跳转,另外【链接】没有实现跳转将当前Dashboard定义的变量一并传递,也使【链接】功能大打折扣。

权限隔离

简单梳理了下夜莺监控系统权限隔离情况,见下图:

「用户」「业务资产」两个维度来说,用户采用常见的RBAC基于角色的权限控制,主要授权用户可以访问哪些页面的接口资源,再加上一个团队(Team)概念方便管理。业务资产主要包括Categraf采集点、Record Rule、Dashboard、告警规则和自愈脚本等,并将这些业务资产关联到某个业务组下,不同业务组下这些资产是独立隔离开的,避免相互影响,比如定制仪表盘、修改告警规则等。然后将用户以Team为单元添加到业务组下,即用户拥有操作管理该业务组下相关业务资产权限。

「但是,对于基础数据部分,夜莺并没有做到多租户隔离。」比如仪表盘是业务组隔离的,但是仪表盘可以访问哪些数据并没有限制;同样的,告警规则隶属于某个业务组,但是基于告警规则触发的告警并没有项目组概念。

[更多云原生监控运维,请关注微信公众号:Reactor2020]

 

点赞收藏
分类:标签:
云原生生态实验室

关注公众号@reactor_2020

请先登录,查看4条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步
5
4