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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-应用监控,每月50GB免费额度
简介: 快速学习如何快速构建高效的监控系统

开发者学堂课程【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

相关文章
|
4月前
|
缓存 监控 安全
构建高效后端系统的最佳实践
本文将深入探讨如何构建一个高效的后端系统,从设计原则、架构选择到性能优化等方面详细阐述。我们将结合实际案例和理论分析,帮助读者了解在构建后端系统时需要注意的关键点,并提供一些实用的建议和技巧。
60 2
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
构建高效数据分析系统的关键技术
【10月更文挑战第5天】构建高效数据分析系统的关键技术
59 0
|
1月前
|
数据采集 存储 消息中间件
构建高效数据管道:从数据采集到分析的实战指南
在数据的海洋中航行,我们需要精准而高效的工具来捕捉、传输和处理信息。本文将引导你穿越技术性文章的迷雾,用简洁明了的语言和代码示例,展现如何打造一个高性能的数据管道。无论你是初学者还是资深开发者,这篇文章都将为你提供宝贵的知识财富。让我们一起解锁数据的力量,探索其背后的奥秘。
55 15
|
3月前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全面指南在当今数字化时代,运维作为保障系统稳定性和效率的重要环节,其重要性不言而喻。本文将深入探讨如何构建一个高效的运维体系,从监控系统的搭建到自动化运维的实施,旨在为读者提供一套完整的解决方案。
本文详细介绍了高效运维体系的构建过程,包括监控系统的选择与部署、日志分析的方法、性能优化的策略以及自动化运维工具的应用。通过对这些关键环节的深入剖析,帮助运维人员提升系统的可靠性和响应速度,降低人工干预成本,实现业务的快速发展和稳定运行。
|
5月前
|
Prometheus 监控 Cloud Native
【揭秘可观测性】构建完美参考框架,打造系统监控的瑞士军刀!
【8月更文挑战第25天】在现代软件设计中,可观测性是确保系统稳定性和效率的关键因素。它主要由日志、指标及链路追踪(统称LMx)三大核心组件构成。本文详细介绍了构建高效可观测性框架的六个步骤:需求分析、工具选择、数据收集策略设计、实施集成、数据可视化及持续优化。并通过一个Spring Boot应用集成Prometheus和Micrometer收集指标的示例,展示了具体实践方法。合理构建可观测性框架能显著提升团队对软件系统的管理和监控能力,进而增强系统整体性能和可靠性。
84 2
|
6月前
|
数据采集 开发工具 Android开发
构建高效移动应用:从开发到部署的全面指南构建高效Python爬虫的实战指南
【7月更文挑战第31天】在数字时代,移动应用已成为我们日常生活和工作不可或缺的一部分。本文将引导读者穿越移动应用开发的迷宫,探索如何从零开始构建一个高效的移动应用。我们将深入讨论移动操作系统的选择、开发工具的应用、以及实际编码过程中的最佳实践。通过本文,你不仅能够获得理论知识,还将通过代码示例加深理解,最终能够独立完成一个移动应用的构建和部署。
74 2
|
8月前
|
运维 Prometheus 监控
构建高效可靠的自动化运维系统
【5月更文挑战第30天】 在信息技术迅猛发展的今天,企业对IT基础设施的依赖性日益增强。为了确保系统的高可用性和最佳性能,越来越多的组织开始转向自动化运维。本文旨在探讨构建一个高效、可靠的自动化运维系统的关键技术和实践策略,通过案例分析和技术比较,提出一种综合解决方案,以期帮助企业实现运维效率的最大化和风险的最小化。
|
8月前
|
机器学习/深度学习 人工智能 运维
构建高效自动化运维系统的五大关键步骤
【5月更文挑战第18天】在数字化转型的浪潮中,高效的自动化运维系统成为企业保障IT服务管理效率和稳定性的核心。本文将探讨构建自动化运维系统的五个关键步骤,包括需求分析、设计蓝图、选择合适的工具、实施与集成以及持续优化。通过这些步骤的实施,企业能够实现故障快速响应、资源优化配置和成本有效控制,从而提升整体的IT服务质量和用户满意度。
|
8月前
|
运维 监控
构建高效自动化运维体系的关键步骤
【5月更文挑战第24天】 随着信息技术的不断进步,企业对于IT运维的要求越来越高。传统的手工运维方式已经不能满足快速变化的业务需求,而自动化运维逐渐成为提升效率、保障系统稳定性的重要手段。本文将探讨构建一个高效自动化运维体系所需的关键步骤,包括自动化策略制定、工具选择、流程设计、监控与优化等方面,旨在为读者提供一条清晰的自动化运维实施路径。
|
8月前
|
运维 监控 持续交付
构建高效稳定的云基础设施:最佳实践与案例分析
【5月更文挑战第31天】本文旨在探讨如何通过采纳现代云基础设施的最佳实践,构建一个高效且稳定的运维环境。文章将详细讨论云计算资源管理、自动化工具的应用、持续集成/持续部署(CI/CD)流程的优化以及监控和日志分析的重要性。通过对具体案例的分析,我们展示了这些策略如何在实际环境中提升系统的可靠性和性能,同时减少潜在的风险和成本。

热门文章

最新文章

下一篇
开通oss服务