简介:在真实的企业生产中,对研发和运维的同学都会面临一个十分繁复且艰难的问题,就是对指标的监控和告警。具体我枚举一些特定的问题请对号入座,看看在算力爆炸的时代能否通过算力和算法一起解决!

背景介绍

在真实的企业生产中,对研发和运维的同学都会面临一个十分繁复且艰难的问题,就是对指标的监控和告警。具体我枚举一些特定的问题请对号入座,看看在算力爆炸的时代能否通过算力和算法一起解决!

  • 问题一:当一个新业务上线前,运维人员都需要明确服务的部署情况,确定监控对象,以及监控对象的一些可观测性指标,并根据此完成相关日志数据的采集和处理;这里面会涉及到很多日志采集、指标加工等一系列脏活累活;
  • 问题二:当确定了监控对象的黄金指标后,往往都需要先适配一组规则:某个接口每分钟的平均请求延时不要超过多少毫秒;单位分钟内的错误请求数量,不要超过多少等等;就如上图所示,从操作系统维度去看,每个个体有上百种形态各异的指标,切指标的形态有不尽相同,试问要多少种规则才能较好的覆盖到上述监控;
  • 问题三:随着业务逐步对外提供服务,以及各种运营活动的加推,我们运维监控同学一定会面临两个突出的问题:误报太多和漏报的风险,那么这两个问题都在现阶段都需要人工介入,进行阈值的调整;尤其是漏报的问题,更加需要人工盯屏的形式,设计新的监控规则去覆盖一些事件;

随着各个云上服务的SLA要求的提升,企业服务也需要不断的提供问题发现的准确性和速度,在这一点上,自动化的主动巡检监控和秒级别的监控越来越被广大客户所重视。SLS提供了对于指标数据的高效的存储格式,并完全兼容Prometheus协议的时序数据,并在这个场景中,提供了对于海量指标线的智能巡检,让您可以丢掉繁复的规则配置,通过简单的选择就可以实现通用的异常检测。

时序存储的介绍

SLS的日志存储引擎在2016年对外发布,目前承接阿里内部以及众多企业的日志数据存储,每天有数十PB的日志类数据写入。其中有很大一部分属于时序类数据或者用来计算时序指标,为了让用户能够一站式完成整个DevOps生命周期的数据接入、清洗、加工、提取、存储、可视化、监控、问题分析等过程,我们专门推出了时序存储的功能,与日志存储一道为大家解决各类机器数据的存储问题。

在SLS平台中,可以较为简单的将主机的监控数据、Prometheus监控数据通过Logtail直接写入,同时也有多种数据源的导入能力(阿里云监控数据)。本章主要通过对ECS机器数据和阿里云监控数据来说明如何对接SLS智能时序巡检能力。

智能异常分析介绍

智能异常分析应用是一个可托管、高可用、可扩展的服务,主要提供智能巡检、文本分析和根因诊断三大能力。本文介绍智能异常分析应用的产品架构、功能优势、适用场景、核心名词、使用限制和费用说明等信息。

智能异常分析应用围绕运维场景中的监控指标、程序日志、服务关系等核心要素展开,通过机器学习等手段产生异常事件,通过服务拓扑关联分析时序数据和事件,最终降低企业的运维复杂度,提高服务质量。产品架构图如下所示。

在如下场景中,推荐使用智能异常分析应用。

  • 观察对象多且每个观察对象的观测维度也多。
  • 观测对象没有明确的阈值规则,但需要关注指标的形态。
  • 需要对观测对象编写大量的业务规则。
  • 处理非结构化的日志数据时,需要对文本日志中的模式进行挖掘。

接下来我们在云监控指标数据场景中使用下

场景实验

智能监控云监控指标

云监控数据接入

通过[官网文档](导入云监控数据 - 日志服务 - 阿里云)可以较好的配置云监控的导入任务。通过配置后,可以按照如下截图去查看对应的导入任务

我们可以在SLS控制台上查看对应的导入指标,对应各个指标的名称可以参考[这篇文档](https://metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricMeta_zh.html)。我们可以通过如下查询语句查看下聚合的数据格式:

* | select promql_query_range('acs_ecs_dashboard:cpu_system:Average') from metrics limit 100000

云监控数据预览

通过【查询页面右上角的查询页面】按钮,可以跳转过去查看下具体的数据格式。

* | select __time_nano__  / 1000000 as time, __name__ as metric_name, element_at(__labels__, 'instanceId') as instanceId from "test01.prom" where __name__ != '' and __name__ = 'acs_ecs_dashboard:cpu_system:Average' order by time, instanceId limit 100000

通过这条SQL语句,我们可以详细的分析出,写入到SLS中的具体的指标(某个监控对象,某个指标在什么时间的值是多少)。上述SQL语句仅仅罗列了在 2021-12-12 19:37~2021-12-12 19:38 这个时间区间的全部监控对象的监控指标,接下来,我们通过简单的改写,仅仅显示某个单独的监控对象在一分钟的数据形态。

* | select date_trunc('second', time) as format, * from ( select __time_nano__  / 1000000 as time, __name__ as metric_name, element_at(__labels__, 'instanceId') as instanceId from "test01.prom" where __name__ != '' and __name__ = 'acs_ecs_dashboard:cpu_system:Average') where instanceId = 'xxxx' order by time limit 100000

我们可以看到对于监控指标等于“acs_ecs_dashboard:cpu_system:Average”而言,某个特定的实例是每隔15秒一个监控指标。但是由于我们使用的数据导入,将结果写入到SLS的MetricStore中,因此是每分钟写入如一分钟的监控数据。

这里要在强调一下:SLS侧是是通过OpenAPI去获取云监控的指标数据的,数据导入SLS是有一定的延时的,具体延时大约在3分钟左右,也就是说在 T0 时刻,SLS中的数据只能保证 [T0-300s] 之前的数据时一定按时写入的。这一点在后续的巡检任务配置过程中至关重要。

我们通过PromQL在简化下上边的描述,我们继续使用对应的指标 "acs_ecs_dashboard:cpu_system:Average",通过如下的语句可以得到预期的结果,这已经距离我们创建巡检任务已经很接近了。

* | select promql_query_range('avg({__name__=~"acs_ecs_dashboard:cpu_system:Average"}) by (instanceId, __name__) ', '15s') from metrics limit 1000000

筛选监控指标

通过如下的Query可以大概知道在云监控关于ECS提供了多少监控指标:

* | select COUNT(*) as num from ( select DISTINCT __name__ from "test01.prom" where __name__ != '' and __name__ like '%acs_ecs_dashboard%' limit 10000 )

得到的结果是295个结果,但是我们没有比较全部都进行巡检配置,因此第一步就是要根据[指标说明文档](https://metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricMeta_zh.html)选择需要监控的指标项,这里我提供一份简单整理出来的比较重要的指标集合,供大家参考:

  • acs_ecs_dashboard:CPUUtilization:Average
  • acs_ecs_dashboard:DiskReadBPS:Average
  • acs_ecs_dashboard:DiskReadIOPS:Average
  • acs_ecs_dashboard:DiskWriteBPS:Average
  • acs_ecs_dashboard:DiskWriteIOPS:Average
  • acs_ecs_dashboard:InternetIn:Average
  • acs_ecs_dashboard:InternetInRate:Average
  • acs_ecs_dashboard:InternetOut:Average
  • acs_ecs_dashboard:InternetOutRate:Average
  • acs_ecs_dashboard:InternetOutRate_Percent:Average
  • acs_ecs_dashboard:IntranetIn:Average
  • acs_ecs_dashboard:IntranetInRate:Average
  • acs_ecs_dashboard:IntranetOut:Average
  • acs_ecs_dashboard:IntranetOutRate:Average
  • acs_ecs_dashboard:cpu_idle:Average
  • acs_ecs_dashboard:cpu_other:Average
  • acs_ecs_dashboard:cpu_system:Average
  • acs_ecs_dashboard:cpu_total:Average
  • acs_ecs_dashboard:cpu_user:Average
  • acs_ecs_dashboard:cpu_wait:Average
  • acs_ecs_dashboard:disk_readbytes:Average
  • acs_ecs_dashboard:disk_readiops:Average
  • acs_ecs_dashboard:disk_writebytes:Average
  • acs_ecs_dashboard:disk_writeiops:Average
  • acs_ecs_dashboard:load_1m:Average
  • acs_ecs_dashboard:load_5m:Average
  • acs_ecs_dashboard:memory_actualusedspace:Average
  • acs_ecs_dashboard:memory_freespace:Average
  • acs_ecs_dashboard:memory_freeutilization:Average
  • acs_ecs_dashboard:memory_totalspace:Average
  • acs_ecs_dashboard:memory_usedspace:Average
  • acs_ecs_dashboard:memory_usedutilization:Average
  • acs_ecs_dashboard:net_tcpconnection:Average
  • acs_ecs_dashboard:networkin_errorpackages:Average
  • acs_ecs_dashboard:networkin_packages:Average
  • acs_ecs_dashboard:networkin_rate:Average
  • acs_ecs_dashboard:networkout_errorpackages:Average
  • acs_ecs_dashboard:networkout_packages:Average
  • acs_ecs_dashboard:networkout_rate:Average

根据上述配置,生成对应的查询PromQL如下:

* | select promql_query_range('avg({__name__=~"acs_ecs_dashboard:CPUUtilization:Average|acs_ecs_dashboard:DiskReadBPS:Average|acs_ecs_dashboard:DiskReadIOPS:Average|acs_ecs_dashboard:DiskWriteBPS:Average|acs_ecs_dashboard:DiskWriteIOPS:Average|acs_ecs_dashboard:InternetIn:Average|acs_ecs_dashboard:InternetInRate:Average|acs_ecs_dashboard:InternetOut:Average|acs_ecs_dashboard:InternetOutRate:Average|acs_ecs_dashboard:InternetOutRate_Percent:Average|acs_ecs_dashboard:IntranetIn:Average|acs_ecs_dashboard:IntranetInRate:Average|acs_ecs_dashboard:IntranetOut:Average|acs_ecs_dashboard:IntranetOutRate:Average|acs_ecs_dashboard:cpu_idle:Average|acs_ecs_dashboard:cpu_other:Average|acs_ecs_dashboard:cpu_system:Average|acs_ecs_dashboard:cpu_total:Average|acs_ecs_dashboard:cpu_user:Average|acs_ecs_dashboard:cpu_wait:Average|acs_ecs_dashboard:disk_readbytes:Average|acs_ecs_dashboard:disk_readiops:Average|acs_ecs_dashboard:disk_writebytes:Average|acs_ecs_dashboard:disk_writeiops:Average|acs_ecs_dashboard:load_1m:Average|acs_ecs_dashboard:load_5m:Average|acs_ecs_dashboard:memory_actualusedspace:Average|acs_ecs_dashboard:memory_freespace:Average|acs_ecs_dashboard:memory_freeutilization:Average|acs_ecs_dashboard:memory_totalspace:Average|acs_ecs_dashboard:memory_usedspace:Average|acs_ecs_dashboard:memory_usedutilization:Average|acs_ecs_dashboard:net_tcpconnection:Average|acs_ecs_dashboard:networkin_errorpackages:Average|acs_ecs_dashboard:networkin_packages:Average|acs_ecs_dashboard:networkin_rate:Average|acs_ecs_dashboard:networkout_errorpackages:Average|acs_ecs_dashboard:networkout_packages:Average|acs_ecs_dashboard:networkout_rate:Average"}) by (instanceId, __name__) ', '1m') from metrics limit 1000000

对于一般场景而言,我们可以在简化一些指标,这里直接提供对应的PromQL如下:

* | select promql_query_range('avg({__name__=~"acs_ecs_dashboard:CPUUtilization:Average|acs_ecs_dashboard:DiskReadBPS:Average|acs_ecs_dashboard:DiskReadIOPS:Average|acs_ecs_dashboard:DiskWriteBPS:Average|acs_ecs_dashboard:DiskWriteIOPS:Average|acs_ecs_dashboard:InternetIn:Average|acs_ecs_dashboard:InternetInRate:Average|acs_ecs_dashboard:InternetOut:Average|acs_ecs_dashboard:InternetOutRate:Average|acs_ecs_dashboard:InternetOutRate_Percent:Average|acs_ecs_dashboard:IntranetOut:Average|acs_ecs_dashboard:IntranetOutRate:Average|acs_ecs_dashboard:cpu_idle:Average|acs_ecs_dashboard:cpu_other:Average|acs_ecs_dashboard:cpu_system:Average|acs_ecs_dashboard:cpu_total:Average|acs_ecs_dashboard:cpu_user:Average|acs_ecs_dashboard:cpu_wait:Average|acs_ecs_dashboard:disk_readbytes:Average|acs_ecs_dashboard:disk_readiops:Average|acs_ecs_dashboard:disk_writebytes:Average|acs_ecs_dashboard:disk_writeiops:Average|acs_ecs_dashboard:load_1m:Average|acs_ecs_dashboard:load_5m:Average|acs_ecs_dashboard:memory_freespace:Average|acs_ecs_dashboard:memory_freeutilization:Average|acs_ecs_dashboard:memory_totalspace:Average|acs_ecs_dashboard:memory_usedspace:Average|acs_ecs_dashboard:memory_usedutilization:Average"}) by (instanceId, __name__) ', '1m') from metrics limit 1000000

配置智能巡检任务

在【[SLS控制台](阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台)】中找到【智能异常分析】的入口,经过简单的初始化后,可以通过【智能巡检】的任务入口进入,找到对应的配置页面。在作业配置的过程中,应该注意这里要选择时序库,否则无法找到存储云监控数据的MetricStore。

在特征配置中,通过如下的Query进行配置,这里也有几点需要注意的说明:

  • 通过SQL转写一下,并对time字段进行处理,因为在巡检中,接受的时间的单位是秒,而PromQL得到的结果中time是毫秒;
  • 通过element_at算子,提取出对应的实例ID(instanceId);
  • 目前在配置粒度时,最小只支持60秒;
* | select time / 1000 as time, metric, element_at(labels, 'instanceId') as instanceId, value from ( select promql_query_range('avg({__name__=~"acs_ecs_dashboard:CPUUtilization:Average|acs_ecs_dashboard:DiskReadBPS:Average|acs_ecs_dashboard:DiskReadIOPS:Average|acs_ecs_dashboard:DiskWriteBPS:Average|acs_ecs_dashboard:DiskWriteIOPS:Average|acs_ecs_dashboard:InternetIn:Average|acs_ecs_dashboard:InternetInRate:Average|acs_ecs_dashboard:InternetOut:Average|acs_ecs_dashboard:InternetOutRate:Average|acs_ecs_dashboard:InternetOutRate_Percent:Average|acs_ecs_dashboard:IntranetOut:Average|acs_ecs_dashboard:IntranetOutRate:Average|acs_ecs_dashboard:cpu_idle:Average|acs_ecs_dashboard:cpu_other:Average|acs_ecs_dashboard:cpu_system:Average|acs_ecs_dashboard:cpu_total:Average|acs_ecs_dashboard:cpu_user:Average|acs_ecs_dashboard:cpu_wait:Average|acs_ecs_dashboard:disk_readbytes:Average|acs_ecs_dashboard:disk_readiops:Average|acs_ecs_dashboard:disk_writebytes:Average|acs_ecs_dashboard:disk_writeiops:Average|acs_ecs_dashboard:load_1m:Average|acs_ecs_dashboard:load_5m:Average|acs_ecs_dashboard:memory_freespace:Average|acs_ecs_dashboard:memory_freeutilization:Average|acs_ecs_dashboard:memory_totalspace:Average|acs_ecs_dashboard:memory_usedspace:Average|acs_ecs_dashboard:memory_usedutilization:Average"}) by (instanceId, __name__) ', '1m') from metrics ) limit 10000

在下面的【算法配置】、【调度配置】中需要注意如下:

【时间范围】- 要选择当前时间的两天前,让算法有充足的数据进行学习,这样效果更好;

【数据延时时长】- 由于我们处理的是通过导入服务导入的云监控的数据,一般整体的链路延时最多不会超过300s,因此这里要选择300秒,防治观测丢点。

配置告警

通过SLS中提供的[新版告警](告警(新版) - 日志服务 - 阿里云)可以非常方便的对接机器学习的告警配置。您可以使用一整套告警的能力,对您的告警进行管理。

建议您使用普通模式却设置告警,在【行动策略】这一栏中,选择我们内置的行动策略(sls.app.ml.builtin),这里我们已经配置好了,具体可以在告警配置中进行查看,查看地址具体:

https://sls.console.aliyun.com/lognext/project/${projectName}/alertcenter?tab=action_policy

这里您要制定对应的请求地址(钉钉机器人的地址webhook),内容模板选择【SLS智能巡检内置内容模板】。这样可以将【告警配置】与【巡检作业配置】解耦开来,后续用户需求修改【巡检作业】配置就可以实现告警配置的更新。至此,我们在【云监控数据】中配置巡检算法的操作就完成了。

原文链接
本文为阿里云原创内容,未经允许不得转载。

智能巡检云监控指标的实践相关推荐

  1. 智能视频云监控平台主要功能分析

    安全防范意识在当今社会尤为重要,视频监控它是一种防范能力较强的综合系统,视频云监控平台应用以其直观.方便.安全而广泛应用于许多场合.就算在外家中的情况一切都了若指掌,对家庭成员.财产起到很好的安全保障 ...

  2. zwacs短信报警智能工业云监控系统

    zwacs短信报警智能工业云监控系统 --zwacs众为自动化 产品概述 随着物联网进化加速,工业设备智能监测的要求越来越高.如何更智能.更低成本实现远程监控是我们解决的首要问题.如:农业大棚监控.医 ...

  3. 竣达技术丨电池巡检微信云监控系统

    一.系统简介: 电池巡检微信云监控系统是为满足对蓄电池组在线监测.故障诊断和预警而设计的一款微信云监控管理系统.可完成对蓄电池组内单体电池电压.电池内阻.电池温度等参数进行状态监测和告警功能.同时,可 ...

  4. 电池巡检微信云监控系统——在线监测、故障诊断、预警

    系统简介: 电池巡检微信云监控系统是为满足对蓄电池组在线监测.故障诊断和预警而设计的一款微信云监控管理系统.可完成对蓄电池组内单体电池电压.电池内阻.电池温度等参数进行状态监测和告警功能.同时,可通过 ...

  5. 干货 | 京东云弹性伸缩功能实践

    弹性伸缩AS(Auto Scaling)是一项 Web 服务,可以根据您的业务需求和策略,自动调整云主机计算资源,可帮助确保您拥有适量的云主机实例来处理您的应用程序负载. 使用 AS 进行容量调整,您 ...

  6. 云服务器 性能监控软件,云监控 - 云应用监控 - ManageEngine Applications Manager

    云监控 什么是云监控? 尽管许多组织仍然依赖于在自托管的数据中心中存储数据的本地方法,但在业务组织中采用云服务的情况已经逐渐增多.自然,这导致了一些云监控工具的出现.无论您使用的是公共.私有还是混合环 ...

  7. 国内智能巡检机器人品牌Top5排行榜

    人工智能的春风席卷而来,带来一系列智能化解决方案,在巡检领域,智能机器人巡检凭借高巡检效率.低成本消耗等多项优势,获得了举足轻重的发展. 近几年随着智能电网建设及高危行业实行"机器代人&qu ...

  8. 智能巡检机器人在国家电网、变电站、电流站领域的运用

    近年来,机器人技术不断进步与革新,国内机器人产业链正在逐步完善,市场规模进一步扩大.据中国电子学会在2021世界机器人大会上发布的<中国机器人产业发展报告2021>预测,2021年我国机器 ...

  9. 智能运维案例系列 | 新网银行 X 袋鼠云:银行核心业务系统日志监控平台建设实践...

    在聊今天的案例之前,我想首先和大家聊聊当前最热的词汇之一:"数据驱动". 双11就要到了,当你打开手淘页面,你会收到平台推荐给你的优惠活动信息,你可能感兴趣的商家或者商品, 你随意 ...

最新文章

  1. 使用 HTMLTestRunner.py
  2. Spring MVC-表单(Form)标签-下拉框(Dropdown)示例(转载实践)
  3. mysql邮箱认证_邮件服务系列postfix+sasl+mysql实现用户认证功能
  4. 2021双十一电商行业研究报告:重塑消费决策链条,内容种草成电商新标配
  5. C#上传文件的一个实现
  6. 听说你还不懂面向对象??
  7. 广东地区电信官方DNS服务器
  8. RSTP比STP快在哪?
  9. ORMLite的使用
  10. 关于reactor单线程模型的理解
  11. 联合国应考虑建设第二总部
  12. 淘宝CMS新玩法,当粉丝营销遇上直通车,会擦出怎样的火花?
  13. 基于虚拟仿真技术的数字化工厂管理系统
  14. 联想微型计算机怎么拆开图解,Lenovo(Ideapad)笔记本如何拆卸及安装电池
  15. Java基础知识(一) 基本概念
  16. MPU6050原始数据分析——学习笔记
  17. Python 3基础语法知识点都在这里了,如果还不能入门就不能怪我了
  18. leaflet加载接入腾讯矢量、腾讯影像地图(leaflet篇.4)
  19. Echarts树形结构图加点击事件
  20. 物联网技术可以给养老院带来哪些变化

热门文章

  1. docker 挂载目录_Docker容器数据管理
  2. JAVA进阶开发之(内部类概述)
  3. python pandas 日期_python+pandas+时间、日期以及时间序列处理方法
  4. python安装tensorflow报错_Anaconda安装tensorflow报错问题解决方法
  5. comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较
  6. c语言程序设计字符处理周信东,“电子科技大学出版社(周信东主编)”的C语言程序设计实验-整理代码-.doc...
  7. 开发转测试没人要_新人如何快速的进入融入软件测试行业?
  8. linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了
  9. 【Effective Java】第二章:静态工厂、构建器、强化Singleton属性、私有构造器、
  10. leetcode 145 --- 二叉树后序遍历