网站建设优化及推广,做一个商城网站需要什么流程,兰州装修公司排名榜,江西网站备案要求简介#xff1a;在真实的企业生产中#xff0c;对研发和运维的同学都会面临一个十分繁复且艰难的问题#xff0c;就是对指标的监控和告警。具体我枚举一些特定的问题请对号入座#xff0c;看看在算力爆炸的时代能否通过算力和算法一起解决#xff01;
背景介绍
在真实的…简介在真实的企业生产中对研发和运维的同学都会面临一个十分繁复且艰难的问题就是对指标的监控和告警。具体我枚举一些特定的问题请对号入座看看在算力爆炸的时代能否通过算力和算法一起解决
背景介绍
在真实的企业生产中对研发和运维的同学都会面临一个十分繁复且艰难的问题就是对指标的监控和告警。具体我枚举一些特定的问题请对号入座看看在算力爆炸的时代能否通过算力和算法一起解决
问题一当一个新业务上线前运维人员都需要明确服务的部署情况确定监控对象以及监控对象的一些可观测性指标并根据此完成相关日志数据的采集和处理这里面会涉及到很多日志采集、指标加工等一系列脏活累活问题二当确定了监控对象的黄金指标后往往都需要先适配一组规则某个接口每分钟的平均请求延时不要超过多少毫秒单位分钟内的错误请求数量不要超过多少等等就如上图所示从操作系统维度去看每个个体有上百种形态各异的指标切指标的形态有不尽相同试问要多少种规则才能较好的覆盖到上述监控问题三随着业务逐步对外提供服务以及各种运营活动的加推我们运维监控同学一定会面临两个突出的问题误报太多和漏报的风险那么这两个问题都在现阶段都需要人工介入进行阈值的调整尤其是漏报的问题更加需要人工盯屏的形式设计新的监控规则去覆盖一些事件随着各个云上服务的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:Averageacs_ecs_dashboard:DiskReadBPS:Averageacs_ecs_dashboard:DiskReadIOPS:Averageacs_ecs_dashboard:DiskWriteBPS:Averageacs_ecs_dashboard:DiskWriteIOPS:Averageacs_ecs_dashboard:InternetIn:Averageacs_ecs_dashboard:InternetInRate:Averageacs_ecs_dashboard:InternetOut:Averageacs_ecs_dashboard:InternetOutRate:Averageacs_ecs_dashboard:InternetOutRate_Percent:Averageacs_ecs_dashboard:IntranetIn:Averageacs_ecs_dashboard:IntranetInRate:Averageacs_ecs_dashboard:IntranetOut:Averageacs_ecs_dashboard:IntranetOutRate:Averageacs_ecs_dashboard:cpu_idle:Averageacs_ecs_dashboard:cpu_other:Averageacs_ecs_dashboard:cpu_system:Averageacs_ecs_dashboard:cpu_total:Averageacs_ecs_dashboard:cpu_user:Averageacs_ecs_dashboard:cpu_wait:Averageacs_ecs_dashboard:disk_readbytes:Averageacs_ecs_dashboard:disk_readiops:Averageacs_ecs_dashboard:disk_writebytes:Averageacs_ecs_dashboard:disk_writeiops:Averageacs_ecs_dashboard:load_1m:Averageacs_ecs_dashboard:load_5m:Averageacs_ecs_dashboard:memory_actualusedspace:Averageacs_ecs_dashboard:memory_freespace:Averageacs_ecs_dashboard:memory_freeutilization:Averageacs_ecs_dashboard:memory_totalspace:Averageacs_ecs_dashboard:memory_usedspace:Averageacs_ecs_dashboard:memory_usedutilization:Averageacs_ecs_dashboard:net_tcpconnection:Averageacs_ecs_dashboard:networkin_errorpackages:Averageacs_ecs_dashboard:networkin_packages:Averageacs_ecs_dashboard:networkin_rate:Averageacs_ecs_dashboard:networkout_errorpackages:Averageacs_ecs_dashboard:networkout_packages:Averageacs_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?tabaction_policy 这里您要制定对应的请求地址钉钉机器人的地址webhook内容模板选择【SLS智能巡检内置内容模板】。这样可以将【告警配置】与【巡检作业配置】解耦开来后续用户需求修改【巡检作业】配置就可以实现告警配置的更新。至此我们在【云监控数据】中配置巡检算法的操作就完成了。
原文链接 本文为阿里云原创内容未经允许不得转载。