如何快速构建高效的监控系统|学习笔记

简介: 快速学习如何快速构建高效的监控系统

开发者学堂课程【HBase 入门与实战如何快速构建高效的监控系统】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/808/detail/13901


如何快速构建高效的监控系统


内容介绍

一、最佳实践

二、实机演示

一、最佳实践

1、适应不同 APM 场景的 Lindorm 时序技术栈

APM 场景需要一系列的组件构建,Lindorm 时序引擎已兼容大多主流的 APM 开源组件,因此可适用于多种 APM 场景

对于常见的监控需求,推荐采用的 Lindorm 时序引擎+开源组件的架构

image.png

将 Lindorm 时序应用基于 Prometheus 架构,Prometheus 本身以 local storage 内存储,但能保存的数据本身是有限的,这时基于 Prometheus most storage 将移动TSDB 接进去,组织架构 Telearaf 将数据采集到后,写入 Kafka,通过 Flink 进行汇总写入到 Lindorm。开源的 APM Open-Falcon 可直接写入到 Lindorm 数据。作为 APM 展示层面,目前市面上所有的开源 APM 架构中都是 Grafana 作为 APM 架构的展示端。

案例:某互联网餐饮系统的业务 APM

采集端:自制采集监控脚本,涉及到若干种采集系统,采集多种多样是自建的采集端。

收集端:汇总端自制 Collector 切入到 Kafka 中,从 Kafka 数据流入到 Flink 汇总后写入到 Lindorm TSDB,通过 Lindorm TSDB 所暴露的接口整合到展示端。通过此链路稳定性达到了99%,整个系统不可用时长每年可以降低约8.76小时,MTBR 缩短了30%

image.png

·采集端

自制采集脚本

·收集端

自制Collector+Kafka+Flink

·存储端 Lindorm时序引擎

·分析&展示

自制可视化工具

案例:某直播平台运维监控 APM

采集端自制的采集工具,直播时采集指标很多包括直播时感官的卡顿、网络卡顿、错误率、加载播放时间等等一系列业务监控指标,自建一套指标采集监控数据。通过自制的汇总端写入到 Kafka,Lindorm TSDB 的方式通过定制化的 Consumer 写入。分析和展示通过 Grafana,告警接入 Bosun

image.png

.采集端

自制采集工具

.收集端

自制 Collector+Kafka+ 定制 Consumer

.存储端

Lindorm 时序引擎

.分析&展示  

Grafana

.告警  

Bosun

相较原先的 OpenTSDB 集群,写入性能↑,集群稳定性↑, 借助Lindorm TSDB本身内置的时间线索引,复杂聚合查询成为可能。

2、案例:Lindorm 时序公有云实例自监控

时序引擎在公有云上实例的云单位向外售卖,每多一个实例,多一系列的监控指标,团队需要在后台做整体的运维,每一个监控的数据都很重要。云上售卖产生的所有 Lindorm 时序引擎的监控数控通过 Telegraf 采集,用阿里 SLS 汇总,汇总后通过阿里云实时计算 Flink 版进行写入到 Lindorm 时序中,在后台通过 Grafana 进行数据监控。

image.png

.采集端  

Telegraf

.收集端

SLS+实时计算Flink版

.存储端 Lindorm时序引擎

.分析&展示  

Grafana

·告警

阿里云监控

在现在自监控体系下整体写入速率达到了50万点/秒+,随着时序引擎的写入速率升高,整体采集到的监控数据的时间序列的规模达到了1000万+,在监控系统中所设置的数据保留60天,更广泛的角度看业务监控方面需要将历史数据到达一定范围内转为数据。

.写入速率 50万点/秒+  

.时间序列规模1000万+(持续增长中)

.数据保留 60天  

3.最佳实践-监控数据建模

.数据建模的核心是时间线的设计,最关键的便是标签的设计。

.在时序数据的应用中,尽量减少时间线的数量时序数据库会对时间线进行索引,索引不是无限的膨胀,随着所有数量级别的状况,查询性能产出一定影响。核心的设计考量需要将时间线的数量进行减少。

.TSDB 会为标签建立倒排索引,因此要避免设计类似所有时间线都具备的同一个标签键值对的情况。因为当一个标签可以命中全部时间线时,这样的倒排索引本身已不再有意义。

.对于使用开源组件作为监控数据链路的上下游时,当前建议通过 OpenTSDB 协议接入,因此该类场景下的的数据模型只能是单值数据模型。如果使用的不是开源的 APM 组件可以考量更多设计。

image.png

4、最佳实践-Lindorm 时序引擎规格选择

两种实例形态

.Serverless 共享型实例

·适用于: 开发/测试环境、业务流量峰谷分明、免运维。

.实例计算资源共享、数据隔离。并发查询限制严格

·资源独享型实例

·适用于:生产环境、大规模写入型业务、时序查询密集型业务、存在自主运维需求。 .独享型实例申购时的引擎节点规格能力

两种实例形态,一种 Serverless 共享型实例另一种资源独享型实例。Serverless 适用于开发/测试环境、业务流量峰谷分明、免运维,对于大规模的写入型业务、生产环境、时序查询密集型业务推荐使用资源独享型实例。对于资源独享型实例每一个引擎节点有一系列性能的最佳实践。

image.png

5、最佳实践-Grafana 对接 Lindorm 时序引擎

LindormTSDB 可通过 Open TSDB 协议与 Grafana 实现对接 配置要点 ·OpenTSDB协议版本

·LindormTSDB实例URL

·时间戳的精度 ·(根据实例配置)用户认证信息

image.png

如何用 Grafana 作为开源 APM 的展示端,展示端如何接入到 Lindorm 时序引擎? 原生支持 Open TSDB 协议,接入时只需要在 Grafana 配置,按照与 Open TSDB 相同的配置去配置地址、时间戳精度,根据 Lindorm 时序引擎是否要开启用户认证模式配置相应的认证信息。  


二、实机演示

1.迷你监控方案演示

.开源Flink+Lindorm时序引擎+Grafana

·示例Demo任务的源码:Lindorm TSDB Sinker Demo

·阿里云托管Blink+通用LindormTSDB Connector效果更优

.开源Open-Falcon+Lindorm时序引擎+Grafana

第一个场景,用 Flink 汇总写入到 Lindorm 时序引擎,Grafana 展示数据。

第二个场景如何将 Lindorm时序引擎与开源的 Open-Falcon 融合,通过 Grafana 进行监控数据的展示。

数据通过 Flink 汇总写入到 Lindorm 时序引擎的场景,运用 Flink 的过程中通常要构建 Flink 进行写入任务,在实际接入 TSDB 时方式很简单。

做一个简单的 Demo,代码很少,采用的上游数据来自 Flink 的专业指导书介绍的样例,上游数据模拟一系列的 Sinke 生产按照当前时间持续设计一系列数据。

Public void run(SourceContext<SensorReading>srcCtx)thro

ws Exception{;

//initialize random number generator  

Random rand=new Random();

//look up index of this parallel task

Int taskIdx=this.getRuntimeContext().getIndex0fThisSubtas k();

//initislize sensor ids and temperatures;

String[] sensorIds=new String[10];  

double[]curfTemp=new double[10];

for(int i=e;i<10;i++){

sensorIds[i]<"sensor"+{taskIdx*10+i);

curFTemp[i]=65+(rand.nextGaussian()*20);

}

while {running){

//get current time

long curTime =Calendar.getInstance().getTimeInMillis();

// emit SensorReadings

for (int i=0;i<10;1++){

//update current temperature

curFTemp[i]+=rand.nextGaussian()*e.5;  

//emit reading

srcCtx.collect(new SensorReading(sensorIds[i],curTime,cur FTemp[i]));

}

//wait for 100 ms

Thread.sleep[milis:100);

}

}

/** Cancels this SourceFunction.*/  

Override

public void cancel(){

this.running = false;

}

}

在消费端做简单的实践,实现了 Lindorm 时序引擎的 Sinker 端。使用 TSDB,可以参照官方的手册有相应介绍 TSDB 的文章。用 TSDB 方法将数据持续写入。

private TSDB client;

public TsdbSink(ParameterTool parameters){ address=parameters.get("tsdbAddress"); port=Integer.parseInt(parameters.get("tsdbPort")); ioThreadCount=Integer.parseInt(parameters.getl(key:“ioThreadCount”,defaultValue:“2")); batchPutConsuerThreadCount=Integer.parseInt( parameters.get( key:"putThreadCount",defaultValue:“4")); batchSize=Integer.parseInt( parameters.get( key: "batchSize", defauitValut: “500")) ; batchBufferSize=Integer.parseInt( parameters.get(key:“batchBufferSize",defaultValue:“500")); }

Override

Public void open(Configuration parameters)throws Except ion{ super.open(parameters);

TSDBConfig config=TSDBConfig.address(address,port)

.asyncPut(true)

.ioThreadCount(ioThreadCount) .batchPutConsumerThreadCountbatchPutConsumerThreadCount) .backpressure(true) .batchPutSize(batchSize) .batchPutBufferSize(batchBufferSize) .listenBatchPut(new AbstractBatchPutCallback<Result>(){

Override

publicvoidresponse(Stringaddress,List<Point>input,Resultout

put){

logger.error( "failed!"+address+"\n"+output.to]SON());

}

})

.batchPutRetryCount(5)

.config();

client =TSDBClientFactory.connect(config);

}

Override

public void close()throws Exception{

client.close(force:true) ;

super.close()

Override

Publicvoidinvoke(SensorReadingval,Contextcontext)throwException{

try{

client.put(Point

.metric(Measqrement)

.tag(TagId, val.id)

.timestamp(val.timestamp)

.value(val.temperature)

.build()):

}catch (Exception e){

logger.error("currenttime[{}]:tsdbsinkerror,message:{}",con

text.currentProcessingTime(),e.getMessage());

}

}

效果,将 Demo 打包成架包后,通过 Flink 方式直接进行 Submit 可参照代码输入参数,可直接复制  

运行 Demo 主要是 Lindorm时序的域名并一个监听的端口。在任务的 Submit 中需要将入口进行指令,可能数据持续写入到 TSDB。

image.png

Demo 就可以按照刚才的方式接入到 Lindorm TSDB Kafka 中。

接入 Lindorm 时序引擎,通过 Grafana Data Sources 配置制定类型是末端 TSDB,将 Lindorm 时序引擎的 URI写入,Auth 可留白,文本信息需要指定是 Open TSDB 2.3 版本,Lindorm 时序引擎对标的 Open TSDB 2.3版本的协议  

指定好后可以使用 Data Sources

基于 Flink 进行数据展示如下

image.png

展示出的数据是通过 Demo 中持续生成的数据写入到 TSDB 中就可以实际展示。 Flink 写入 TSDB 的用法

2.如何使用国产开源 APM Open-Falcon接入 TSDB

Open-Falcon 并不需要特别的安装,只需要下载二进制。Open-Falcon 组件 agent 和 transfer,transfer 是作为持续数据的升级版。

配置 agent

Last login:Thu May 20 14:10:11 2021 from 47.96.60.214  

Welcome to Alibaba Cloud Elastic Compute Service! [root@iZuf6drui104r85fglid9uZ~] ls [root@iZuf6drui104r85fglid9uZ~] ls [root@iZuf6drui104r85fglid9uz~]cd open-falcon/ [root@iZuf6drui104r8Sfg1id9uZ open-falcon] ls [root@iZuf6drui104r85fglid9uZ open-falcon]cd agent/ [root@iZuf6drui104r85fg1id9uZ agent] ls [root@iZuf6drui104r85fg1id9uZ agent]cd config/ [root@iZuf6drui104r85fglid9uZ com fig] ls  

cfg.json

[root@iZuf6drui104r85fglid9uZ comfig] vim cfg.json

agent 有一个配置文件一系列配置,包括 transfer 在什么位置,核心的采集通过 transfer 做,需要配置 transfer 的地址。同时指定需要采集哪些指标,指标已经提前预制好,机器上的核心指标都进行了采集。

配置 transfer,通过文件搞定与 Lindorm 时序对接。

Last login: Thu May 20 14:10:00 2021 from118.31.243.144  

Welcome to Alibaba Cloud Elastic Compute Service! [root@iZuf6drui104r85fglid9uZ~] ls [root@iZuf6drui104r85fglid9uz~]cd open-falcon/ [root@iZuf6drui104r8Sfg1id9uZ open-falcon] ls [root@iZuf6drui104r85fglid9uZ open-falcon]cd transfer/ [root@iZuf6drui104r85fg1id9uZ tramsfer] ls [root@iZuf6drui104r85fg1id9uZ tramsfer]cd config/ [root@iZuf6drui104r85fglid9uZ com fig] ls  

cfg.json

[root@iZuf6drui104r85fglid9uZ comfig] cd cfg.json

bash: cd: cfg.jsonz :Not a directory

[root@iZuf6drui104r85fglid9uZ comfig] vim cfg.json  

核心的配置取决于最后配置段,transfer 所对接的 JSB 策划案信息。其它的指标可以根据数据规模总计,最核心的配置项是组件的 rice,rice 需要配置到 Lindorm 时序云上,Lindorm 时序云所公开的域名端口写入,可启动相关的 transfer,将各个 agent 采集的数据持续进入。transfer 启用完毕回到 Grafana 中。

Grafana 下面三个  

image.png

刚才通过 agent 采集的数据,采集的一系列数据包括 CPU 监控指标内存的监控指标。 结合 Grafana 接口进行配置,整个监控指标展示在 Grafana

相关文章
|
安全 BI 数据安全/隐私保护
分享三款性价比超高的AD域管理工具
目前很多企业利用Active Directory (AD )来确保网络环境安全并维护更便捷的管理用户帐户。但还是有很多复杂的问题需要工具来辅助解决,在选择什么样的工具这个问题上,企业通常需要遵守严格的预算限制。
703 1
分享三款性价比超高的AD域管理工具
|
传感器 监控 搜索推荐
智能服装:集成健康监测功能的纺织品——未来穿戴科技的新篇章
【10月更文挑战第7天】智能服装作为穿戴科技的重要分支,正以其独特的技术优势和广泛的应用前景,成为未来科技发展的亮点之一。它不仅改变了我们对服装的传统认知,更将健康监测、运动训练、医疗康复等功能融为一体,为我们的生活带来了更多的便利和可能。随着技术的不断进步和市场的日益成熟,我们有理由相信,智能服装将成为未来穿戴科技的新篇章,引领我们走向更加健康、智能、可持续的生活方式。
|
9月前
|
人工智能 运维 数据可视化
凌晨急诊室诞生的疫苗系统:一个宝妈的AI破局之路
本文分享了一位妈妈在急诊室经历后,将技术与母爱结合的心路历程。从凌晨抱着高烧儿子就医,同时处理工作告警的崩溃时刻,到意识到妈妈和程序员都是“运维工程师”,作者逐步构建了宝宝疫苗管理系统。文章介绍了系统从静态命令行工具升级为动态智能预警系统的全过程,包括环境搭建、核心代码解析及家庭协同功能实现,并总结了碎片时间开发法与防坑指南。最终,作者通过技术赋予母爱温度,为其他妈妈提供了实用资源包,展现了代码背后的人文关怀。
269 5
|
9月前
|
人工智能 人机交互
清华、面壁提出创新AI Agent交互:能主动思考、预测需求
清华大学与面壁智能团队提出了一种创新的AI Agent交互模式,将基于大型语言模型的智能体从被动响应转变为主动协助。通过数据驱动的方法,研究团队开发了能够预测和主动发起任务的智能体,并创建了ProactiveBench数据集。实验结果显示,经过微调的模型在主动性方面取得了66.47%的F1分数,展示了该方法在人机协作中的潜力。论文链接:https://arxiv.org/abs/2410.12361
380 2
|
监控 供应链 数据可视化
电商项目管理之 WBS方法策略
通过将项目拆解成更小、更可执行的任务单元,WBS帮助团队理清思路、明确分工、监控进度,最终确保项目顺利落地。
311 12
电商项目管理之 WBS方法策略
|
11月前
|
存储 关系型数据库 MySQL
浅入浅出——MySQL索引
本文介绍了数据库索引的概念和各种索引结构,如哈希表、B+树、InnoDB引擎的索引运作原理等。还分享了覆盖索引、联合索引、最左前缀原则等优化技巧,以及如何避免索引误用,提高数据库性能。
225 11
|
机器学习/深度学习 数据处理
NeurIPS 2024:消除多对多问题,清华提出大规模细粒度视频片段标注新范式VERIFIED
清华大学研究团队提出VERIFIED,一种基于大型语言模型和多模态模型的大规模细粒度视频片段标注新方法。VERIFIED通过静态与动态增强字幕及细粒度感知噪声评估器,有效解决了视频语义理解中的多对多问题、细粒度理解和大规模数据标注挑战。实验结果显示,VERIFIED能生成高质量的细粒度视频片段标注,显著提升了视频理解的精度和效率。
380 2
|
JavaScript 前端开发 安全
跨域解决方案有哪些?
本文介绍了多种跨域解决方案,包括JSONP、CORS、postMessage、WebSocket、document.domain+iframe、window.name、location.hash、Node.js代理、Nginx代理和CORS Anywhere。每种方法都有其适用场景和优缺点,如JSONP简单但只支持GET请求,CORS安全但兼容性稍差,WebSocket适用于实时通信但需服务器支持。开发者可根据具体需求选择合适的跨域方案。
439 3
跨域解决方案有哪些?
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
754 1
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####