区块链baas平台告警方案
前言
在《24*7动态化监管为“链”站岗》中,我们介绍了区块链动态化监控中心,如果说监控的作用是防患于未然,那么告警则是当异常发生时第一时间触发运维人员的关键,可充分降低监控对象异常的时间,最大化降低因异常给区块链业务带来的潜在业务损失。
区块链告警现存问题
当前,比较主流的BaaS平台告警系统实现方案往往基于 Prometheus+Grafana+AlertManager 来实现,由于是外接第三方平台,会存在以下问题:
缺乏业务事件告警:目前区块链告警主要是将节点作为一种资源进程监控,通过监控其资源使用情况,通常为节点运行的CPU、内存、磁盘空间等,这就不可避免地导致监控告警面狭窄,更为妥善的方式是增加链维度的监控,如链上异常账户、链上数据异常、链上共识异常等业务类监控,实现从物理和业务等多维全面判断区块链是否发生异常,否则运维人员很难定位异常;
【非区块链原生告警】:目前针对区块链的监控告警,通常是在节点所在主机安装采集器,用于定时采集单个节点的资源类监控指标,再通过第三方监控系统,如prometheus。以上模式,不可避免地需要将节点自身进程数据和链上数据导出至第三方系统,再进行告警,一旦脱离区块链系统,数据就容易被篡改,且现在往往都是对单节点进行告警,会存在因单节点故障而存在错误告警或者不同节点的监控结果不一致等问题,导致整个告警系统的可信度降低;
【业务告警无法灵活对接异构链】:针对区块链业务告警,往往需要先根据不同的区块链底层,在应用端根据业务诉求提前写好告警逻辑,这些逻辑往往是写死的,一旦业务发生变更,整个业务告警逻辑都需要变更,造成监控系统维护难度大;
【告警质量低】:在实际运行中,会出现该告警时不告警,不该告警却告警,或者告警频繁轰炸等问题。例如,当区块链网络之间出现故障时,每个节点都有可能出现接收不到其他节点信息的状况,此时每个节点都会发生很多链上异常事件,这就会导致已配置好告警规则的相关服务给每个节点频繁发送告警。
如何解决区块链告警问题
全新的区块链告警系统
区块链告警系统支持用户根据业务诉求动态化配置告警规则,基于区块链的内置审计合约、链上KVSQL和采集器等能力的有机组合,通过周期性的触发活动来检查监控对象(链或节点)是否存在异常,一旦检测到异常后会将告警活动上报给告警管理模块,告警模块会根据相关配置及当前的告警状态决定如何处理相应的告警(如分组、过滤、抑制等),以及通知方式(如短信、邮件、钉钉等方式)。用户即可在第一时间获知区块链上存在的异常事件,如“节点被攻击”、“双花问题”、“异常账户”、“分叉”等,减少业务损失。
整体架构
◆告警规则管理
支持自定义创建告警规则,支持相关规则配置,如查询分析的对象(时序数据库、合约文件、链上KVSQL等)、查询分析的语句、以及一些自定义配置(检查时间、持续时间)等配置项。更进一步地,创建规则的方式主要有3种:
静态阈值:该方式提供了系统预设的告警指标,通过选择已有的告警指标,可通过语义化的方式快速创建对应指标项的告警规则。如针对指标“节点cpu占用率”,只需要选择具体的告警对象、cpu占用率的阈值和通知方式,即可快速创建告警;
自定义查询语句:如上一篇文字中介绍的动态化监控平台,该模式集成了prometheus采集端服务以及链上kvsql服务,因此支持通过自定义查询语句(promQL和SQL)设置告警规则表达式。例如:
# promQL
# 遍历链上所有节点,存在节点CPU占用率超过80%就告警
node_cpu_usage_percent{chain_id="$chain_id”}>0.8# KVSQL
# 查询合约调用记录表(contract_invoke_record)中合约地址为“0x6f31381d45bc061045ca27327905cce0b562f405”的账户数,大于100就告警(账户在批量创建)
select count(*)>100 as result from contract_invoke_record where contract_addrress =”0x6f31381d45bc061045ca27327905cce0b562f405”
合约告警事件:用户可以上传审计合约,在审计合约中,可通过event事件便捷地使用合约引擎的日志基础功能,在合约的执行过程中,合约引擎会将事件推送给客户端,订阅了相关事件类型的客户端即可接收到该事件消息。
◆告警活动管理
告警活动管理模块主要负责告警质量和告警状态流转管理,其中告警质量管理主要是通过对任意告警源上报的告警活动去重、压缩、降噪和静默,实现告警的收敛,减少告警轰炸的产生。
告警活动去重:告警活动的数据结构主要包括告警元数据、告警活动开始时间和结束时间,其中告警元数据是由一组标签组成的,唯一标识一个活动,标签相同则认为是同一个活动,重复上报会进行合并;标签不同则产生新的告警活动。例如,
「
{“resource_type”:“node”,“resource_id”:“NODE-6sw23e”, “alertname”:“CPU使用率过高”}这组标签代表一个告警活动——节点ID为"NODE-6sw23e"的CPU使用率过高{“resource_type”:“node”,“resource_id”:“NODE-8qw23e”, “alertname”:“CPU使用率过高”}
」
当其中一个标签发生变化,如节点ID变化将产生新的告警活动。相同的告警活动,会累计计数,不触发告警通知,减少告警通知轰炸。
告警活动静默:告警活动管理模块根据静默规则,直接忽略静默时间内符合告警条件的告警活动,不发送告警。
告警活动抑制:告警活动管理模块在接收到告警后根据抑制策略,阻止与当前告警活动相关的其他告警活动触发告警通知。例如部署节点的宿主机发生宕机严重告警时,可以通过配置抑制策略暂时忽略其他非严重的告警。
告警活动压缩:根据告警活动的时间对告警活动进行压缩,每个告警活动都会包含开始时间和结束时间,多个标签相同的告警活动如果开始时间和结束时间有交集,会自动压缩合并为一个告警活动。
◆告警通知管理
主要负责告警活动的通知渠道和对象、通知策略和通知失败补偿逻辑。通知策略本质上是一种订阅规则,当触发告警时可根据配置的通知策略进行通知。通知失败补偿则是指已通过策略对没有成功触发用户的告警不断地进行补偿重试,减少遗漏。
系统流程
【用户自定义策略】:用户在前端页面选择告警规则创建方式(静态阈值、自定义语句和审计合约告警),配置告警规则、告警降噪策略以及通知策略,系统会将这些策略入库。
当告警数据源为审计合约:monitor服务内会常驻专门和链对接的驱动模块,各种异构链的驱动会负责与对应的异构链建立grpc长连接。发生审计事件后,会触发事件告警对接模块。事件告警对接模块会根据从数据库中获取的告警规则产生对应的告警活动,并将警告活动推送至notification。
当告警数据源为时序数据库或者KVSQL,通过在资源主机上安装hostagent定时采集监控数据并存入prometheus中,从而支持根据告警规则执行promQL语句查询,然后对接收到的数据做阈值判断,将满足阈值(告警条件表达式为真)的告警活动推送至notification。
notification模块接收到告警活动后,会根据从数据库中获取的各种策略(具体策略可见上一节介绍)依次进行逻辑判断。当满足所有策略后,将触发sender(发送通知)模块。
sender根据触发的告警进行相应的通知内容封装,并根据数据库存储的通知方式进行邮件、短信或者钉钉等通知。
自定义告警指标
上述的区块链告警系统支持自定义创建告警规则,即通过自定义查询语句对原始一级监控指标进行各类统计计算,从而构建满足业务诉求的告警规则。需要注意的是,原始一级监控指标通常是BaaS平台已经配备的较为常用的固定采集指标,在实际场景中,用户可能需要接入特定的业务指标来使用告警系统,此时可以通过系统提供的agent服务启动动态配置的so文件,采集用户自定义的metric,然后通过转换将metric传到prometheus,就可以实现自定义metric的接入。
回顾与总结
以上是BaaS基于异构链打造的原生区块链告警平台,通过整合链上业务数据和资源监控数据等原始数据,支持基于实践经验灵活创建告警规则,保证区块链运行过程中85%以上的异常可以被准确定位。
区块链baas平台告警方案相关推荐
- 微服务架构在区块链BaaS平台中的实践
前言 微服务架构是近几年互联网行业比较火的概念,凭借灵活可扩展.独立部署-等优势,逐步成为分布式架构中的主流.那么微服务架构和区块链又能擦出哪些神奇的火花?本期将从微服务架构概述.微服务架构在BaaS ...
- 蚂蚁区块链BaaS平台应用开发指南(一):前言
前言 2018年疯狂的币市把区块链技术推到了风口浪尖,随着潮水的退去,越来越多的技术人和市场开始沉淀到实际的问题上.如何利用区块链技术带来的新特性(去中心,可追溯,不可篡改等)去解决现实世界的实际需求 ...
- 区块链BAAS平台:公共或私人区块链编程以用于各种用途
2019独角兽企业重金招聘Python工程师标准>>> 人们可以为公共或私人区块链编程以用于各种用途.理论上,我认为牺牲权力下放的方面可以解决区块链技术背后的许多当前问题.区块链仍然 ...
- 蚂蚁区块链BaaS平台应用开发指南(四):JavaSDK的接入
在尝试本节的样例代码前,需要保证目标智能合约已经按照蚂蚁区块链BaaS平台应用开发指南(三):从一个简单合约开始中的做法编译部署成功. 基于JavaSDK的接入 在上一节里,我们通过Cloud IDE ...
- 蚂蚁区块链BaaS平台架构与实践
摘要:以"数字金融新原力(The New Force of Digital Finance)"为主题,蚂蚁金服ATEC城市峰会于2019年1月4日在上海如期举办.在ATEC区块链行 ...
- 源中瑞区块链baas平台一站式服务体系
区块链是一项新兴技术,很多企业都想将区块链技术应用到产品中去,但是由于对区块链这项技术还属于发展前期阶段,导致绝大多数的企业的区块链技术人才是稀缺的,为此我们研发了区块链baas平台,可以给中小企业提 ...
- 蚂蚁区块链BaaS平台应用开发指南(五):JS SDK的接入
基于JavaScript SDK的接入 在上一节中,我们通过JavaSDK接入了我们的目标链并调用合约成功.在本节中,我们将通过JS SDK实现同样的调用.JS SDK可以集成在Web应用中,运行在浏 ...
- 技术工坊|腾讯华为入局的区块链BaaS平台解决了什么问题?(上海)
2019独角兽企业重金招聘Python工程师标准>>> 在区块链热火朝天一年多之后,真正落地的区块链产业应用仍然乏善可陈,特别是基于公链的成功产业应用更是少之又少.这种现状的问题在哪 ...
- 微软:区块链BaaS平台将成为重要盈…
网上关于微软迟钝的笑话有很多,但是这次微软对于区块链的反应却是很少见的快速.根据世界经济论坛调查报告预测,到2025年,全球GDP中有10%的相关信息将用区块链技术保存. 微软很早在其中发现商机,他们 ...
最新文章
- 无厘头的mysql故障排除
- 地图查询定位功能(Flex API)
- 《JavaScript 高级程序设计》 7.5 常用模式
- Block的循环引用详解
- 列名无效如何解决_XSKY ClickHouse如何实现存算分离
- 深入理解CRITICAL_SECTION
- hadoop初探--性能分析2
- 数学模型 商人过河问题 C++实现
- rhadoop连接mysql数据库_rhadoop连接mysql数据库
- 常见摄像机外部接口类型
- Sequelize多表联合查询案例
- mac 文字识别软件ocr_树洞OCR文字识别软件for mac-树洞OCR文字识别mac版v1.2.0 最新版-腾牛苹果网...
- C++代码和可执行程序在x86和arm上的区别
- 01-运营可能是一种思维方式
- Docker容器之cgroup搭建
- 阿里P8大神讲解——Java,JVM内存模型
- pandas将dataframe的所有数据列的名称转化为大写形式(all column labels in dataframe to uppercase)
- Android Studio 4.1.2 自定义 APP 启动图标样式步骤【APP开发之入门四】
- 推荐五款装机必备的常用软件
- Linux free命令使用