Mejores prácticas para la inspección inteligente de indicadores de monitoreo en la nube

Introducción: En la producción empresarial real, los estudiantes de I+D y operación y mantenimiento se enfrentarán a un problema muy complicado y difícil, es decir, el seguimiento y la alarma de los indicadores. Específicamente, enumeraré algunos problemas específicos, tome asiento y vea si podemos resolverlo a través de la potencia informática y los algoritmos juntos en la era de la explosión de la potencia informática.

Introducción de antecedentes

En la producción empresarial real, los estudiantes de I+D y operación y mantenimiento se enfrentarán a un problema muy complicado y difícil, que es el seguimiento y alarma de los indicadores. Específicamente, enumeraré algunos problemas específicos, tome asiento y vea si podemos resolverlo a través de la potencia informática y los algoritmos juntos en la era de la explosión de la potencia informática.

  • Pregunta 1: Antes de lanzar un nuevo negocio, el personal de operación y mantenimiento debe aclarar la implementación del servicio, determinar el objeto de monitoreo y algunos indicadores de observabilidad del objeto de monitoreo, y completar la recopilación y el procesamiento de datos de registro relacionados de acuerdo con esto implicará una serie de trabajos sucios, como una gran cantidad de recopilación de registros y procesamiento de índices;
  • Pregunta 2: Cuando se determinan los indicadores dorados del objeto de monitoreo, a menudo es necesario adaptar primero un conjunto de reglas: el retraso promedio de solicitud de una interfaz por minuto no debe exceder los milisegundos; la cantidad de solicitudes falsas por minuto debe no exceda cuántos, etc., etc., como se muestra en la figura anterior, desde la perspectiva del sistema operativo, cada individuo tiene cientos de indicadores de diferentes formas, y las formas de los indicadores son diferentes. ¿Cuántos tipos de reglas hay? necesarios para cubrir mejor el seguimiento anterior;
  • Pregunta 3: A medida que la empresa proporciona gradualmente servicios externos y promueve diversas actividades operativas, nuestros estudiantes de monitoreo de operación y mantenimiento definitivamente enfrentarán dos problemas importantes: el riesgo de demasiados falsos positivos y falsos negativos, entonces estos dos problemas son ambos En esta etapa, se requiere intervención manual para ajustar el umbral, especialmente por el problema de los informes faltantes, es aún más necesario monitorear manualmente la pantalla y diseñar nuevas reglas de monitoreo para cubrir algunos eventos;

Con la mejora de los requisitos de SLA de varios servicios en la nube, los servicios empresariales también deben proporcionar continuamente la precisión y la velocidad del descubrimiento de problemas. En este punto, el monitoreo de inspección activa automatizado y el monitoreo de segundo nivel son cada vez más populares entre los clientes. Preste atención a . SLS proporciona un formato de almacenamiento eficiente para datos de indicadores y es totalmente compatible con los datos de series temporales del protocolo Prometheus. En este escenario, proporciona una inspección inteligente de líneas de indicadores masivas, lo que le permite descartar configuraciones de reglas complicadas. Seleccione para lograr general Detección de anomalías.

Introducción al almacenamiento de series temporales

El motor de almacenamiento de registros de SLS se lanzó en 2016. Actualmente, realiza el almacenamiento de datos de registro dentro de Alibaba y muchas empresas, y se escriben docenas de petabytes de datos de registro todos los días. Una gran parte de ellos pertenecen a datos de series temporales o se utilizan para calcular indicadores de series temporales, con el fin de permitir a los usuarios completar el acceso a los datos, la limpieza, el procesamiento, la extracción, el almacenamiento, la visualización, el seguimiento, el análisis de problemas y otros procesos de todo el Ciclo de vida de DevOps en una sola parada. Hemos lanzado especialmente la función de almacenamiento de series temporales para resolver los problemas de almacenamiento de varios datos de máquinas junto con el almacenamiento de registros.

En la plataforma SLS, es relativamente simple escribir directamente los datos de monitoreo del host y los datos de monitoreo de Prometheus a través de Logtail, y también tiene la capacidad de importar múltiples fuentes de datos (datos de monitoreo de Alibaba Cloud). Este capítulo explica principalmente cómo conectarse con la capacidad de inspección de secuencia de tiempo inteligente de SLS a través de los datos de la máquina ECS y los datos de monitoreo de Alibaba Cloud.

Introducción al análisis inteligente de anomalías

La aplicación de análisis inteligente de anomalías es un servicio administrado, altamente disponible y escalable que proporciona principalmente tres capacidades: inspección inteligente, análisis de texto y diagnóstico de causa raíz. Este artículo presenta la arquitectura del producto, las ventajas funcionales, los escenarios aplicables, los términos básicos, las restricciones de uso y las descripciones de costos de la aplicación de análisis inteligente de anomalías.

La aplicación de análisis de excepción inteligente se desarrolla en torno a elementos centrales como indicadores de monitoreo, registros de programas y relaciones de servicio en escenarios de operación y mantenimiento. Genera eventos anormales a través del aprendizaje automático y otros medios, y analiza datos y eventos de series temporales a través de la correlación de topología de servicio, en última instancia, reduciendo la complejidad de la operación y el mantenimiento de la empresa. , mejorar la calidad del servicio. El diagrama de la arquitectura del producto se muestra a continuación.

En los siguientes escenarios, se recomienda utilizar la aplicación de análisis inteligente de excepciones.

  • Hay muchos objetos de observación y cada objeto de observación tiene muchas dimensiones de observación.
  • No existe una regla de umbral clara para el objeto de observación, pero es necesario prestar atención a la forma del indicador.
  • Es necesario escribir una gran cantidad de reglas comerciales en los objetos observables.
  • Cuando se trata de datos de registro no estructurados, es necesario extraer patrones en los registros de texto.

A continuación, usamos lo siguiente en el escenario de datos del indicador de monitoreo en la nube

Experimento de escenario

Indicadores de monitoreo de nube de monitoreo inteligente

Acceso a datos de monitoreo en la nube

A través del [documento del sitio web oficial] ( help.aliyun.com/document\_d…

Podemos ver las métricas importadas correspondientes en la consola SLS. Para conocer los nombres de las métricas correspondientes, consulte [este documento]( metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricM…

* | select promql_query_range('acs_ecs_dashboard:cpu_system:Average') from metrics limit 100000
复制代码

Vista previa de datos de monitoreo en la nube

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

* | 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个结果,但是我们没有比较全部都进行巡检配置,因此第一步就是要根据[指标说明文档](metricmeta.oss-cn-hangzhou.aliyuncs.com/listMetricM…

  • 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控制台](sls.console.aliyun.com/lognext/pro…

在特征配置中,通过如下的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中提供的[新版告警](help.aliyun.com/document\_d…

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

sls.console.aliyun.com/lognext/pro…

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

原文链接

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

Supongo que te gusta

Origin juejin.im/post/7044080586574528520
Recomendado
Clasificación