使用CloudLens for SLS构建SLS流量自定义告警实践

玉梅
  • 收获赞:52
  • 擅长领域:这个同学很专业,但是有点神秘哟~

基于SLS实例级别的详细日志使用CloudLens for SLS结合告警功能提供Project、LogStore流量监控告警。

本文主要介绍如何使用CloudLens for SLS配置自定义告警,监控SLS流量和常见异常。

目标读者

数字化系统开发运维(DevOps)工程师、稳定性工程师(SRE)、可观测平台运维人员等。

背景介绍

Alibaba Cloud Lens 基于 SLS 构建统一云产品可观测能力,提供阿里云云产品的用量分析、性能监控、安全分析、数据保护、异常检测、访问分析等服务。CloudLens for SLS 作为Alibaba Cloud Lens的系列产品之一,集中管理用户账号下Project和Logstore资产,提供日志服务实例日志(重要日志、详细日志、作业运行日志)以及全局日志(审计日志)的采集功能,提升用户对SLS资产的管理效率、快速了解其消耗情况。

日志服务告警是一站式的告警监控、降噪、事务管理、通知分派的智能运维平台,接入与SLS 日志后,在数分钟内即可创建监控任务、通知渠道和告警策略,支持用户实时接收潜在的告警事件并响应。

使用场景

Project、LogStore是使用SLS的资源管理单元,在使用过程中通常会遇到各种各样的流量相关的问题,基于此场景,CloudLens for SLS基于实例级别的详细日志结合告警提供Project、LogStore流量监控,本文主要针对下列表中场景介绍如何配置自定义告警:

场景

告警监控项

说明

Project流量监控

写入流量监控(阈值)

监控Project写入流量是否超设定阈值

写入流量监控(同比)

监控时段内Project写入流量降幅比率是否超预期百分比

写入次数监控(阈值)

监控Project写入次数是否超设定阈值

写入次数监控(同比)

监控时间段内Project写入次数降幅比率是否超预期百分比

Quota超限监控

监控Project写入次数、写入流量以及Shard写入流量是否出现超Quota的错误告警

LogStore流量监控

写入流量下降同比监控

监控时段内LogStore写入流量降幅比是否超预期百分比

写入鉴权失败监控

监控LogStore是否出现因鉴权失败导致的写入失败,并对失败次数进行告警

成功写入SourceIP同比监控

监控时间段内采集日志源机器(IP)数降幅比是否超预期百分比。反应时间段内是否有机器因故障无法上报日志

监控场景

前置条件

日志开通

CloudLens for SLS接入管理模块提供实例日志和全局日志两种集中管理视图。其中实例日志管理如下图所示,会展示账号下所有的Project实例以及Project的日志采集状态。本文流量类监控依赖Project实例的详细日志(详细日志的计费方式与普通Logstore一致,需要对监控的业务Project开启相应的详细日志。

监控日志存储建议

同地域的Project详细日志开启时存放的目标库建议与业务Project分开,避免存放在业务Project导致监控占用Project的Quota,用户可直接使用系统推荐的目标Project( log-service-{用户ID}-{region}),同地域的监控日志存放在一起便于分析。

日志查询

开通Project详细日志后点击跳转链接可直达目标存储库internal-operation_log进行数据查询,后续自定义告警配置基于该LogStore。

告警行动策略配置

本文以配置钉钉告警为例(详见告警通知渠道说明:钉钉),此处需要提前配置告警行动策略,告警行动策略用于控制告警通知的渠道,可以根据业务需求动态分派给特定通知渠道的特定的人、用户组或值班组。在告警中心页面,选择告警管理 > 行动策略,点击添加按钮即可配置

Project流量监控

下面自定义告警设置告警查询时间:整点15分钟(推荐设置告警查询区间为整点而非相对),检查频率:1分钟

写入流量监控

写入流量阈值监控

1、确认告警SQL:查询15分钟内平均每分钟流量,其中查询结果inflow单位:GB/min,基于该SQL点击右上角->另存为告警->新版告警

注意:

  • 查询时间:这边可根据业务重要性进行调整,最短可选择1分钟

  • 查询SQL默认返回100条数据,如需返回全部查询结果SQL结尾可添加 limit 1000,代表可返回1000条查询结果

2、告警配置

依据业务场景配置告警触发条件、以及告警策略,以SLS要求Project每分钟写流量30GB为例以下触发条件代表:

  • 当流量大于20GB/min时告警级别为中

  • 当流量大于25GB/min时告警级别为高

  • 当流量大于28GB/min时告警级别为严重

此处需注意,告警触发条件配置多个时,判断顺序是从上至下,因此inflow > 28需配置在inflow > 25的上面。

点击告警监控规则页面的查询统计,确保查询区间为整点时间15分钟(下面其他场景相同)

3、备注

涉及的告警SQL如下

(*) and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg or Method: PutData) 
| select Project, round(round(sum(InFlow) / 1024.0 / 1024.0 / 1024.0, 2)/15, 2) as inflow from log group by Project order by inflow desc

SQL关键字段

计算公式

说明

inflow

round(round(sum(InFlow) / 1024.0 / 1024.0 / 1024.0, 2)/15, 2)

  • 含义:15分钟内平均写入流量,round函数结果取两位小数

  • 单位:GB/min

后续如需计算5分钟内的平均流量可以

round(round(sum(InFlow) / 1024.0 / 1024.0 / 1024.0, 2)/5, 2)

写入流量同比监控

1、确认告警SQL:查询15分钟内总流量与昨天同一时刻流量对比所有流量降低的Project列表(如需与前15分钟流量对比需将SQL内86400替换成900,详见compare函数说明),dif_percent即为流量下降比例(范围:0-100,单位:%)按从大到小排序,基于该SQL点击右上角->另存为告警->新版告警

2、告警配置

依据业务场景配置告警触发条件、以及告警策略,以下触发条件代表:

  • 当流量下降大于20%时告警级别为高

  • 当流量下降大于50%时告警级别为严重

3、备注

涉及的告警SQL如下

(*) and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg) 
| select Project, round(diff[1],4) as gb_now, round(diff[2],4) as gb_before, (round(diff[1],4) - round(diff[2],4)) as diff_gb, round((1-diff[3])*100,2) as diff_percent from 
( SELECT Project, compare(GB, 86400) AS diff from 
( SELECT Project, round(sum(InFlow) / 1024.0 / 1024.0 / 1024.0, 4) as GB from log group by Project order by GB desc ) 
group by Project) where round(diff[2],4) > 0 order by diff_percent desc 

SQL关键字段

说明

gb_now

当前15分钟内计算的流量值,单位GB

gb_before

compare(GB, 86400)代表gb_before计算的是一天前同时间段内流量值,单位GB

gb_diff

db_diff = gb_now - gb_diff

diff_percent

gb_now与db_before比下降比率,单位:%

写入次数监控

写入次数阈值监控

1、确认告警SQL:查询15分钟内平均写入次数,其中查询结果pv,(单位:次),基于该SQL点击右上角->另存为告警->新版告警

2、告警配置

依据业务场景配置告警触发条件、以及告警策略,以SLS限制Project每分钟写次数600000为例以下触发条件代表:

  • 当写入次数大于500000次/min时告警级别为高

  • 当写入次数大于550000次/min时告警级别为严重

3、备注

涉及的告警SQL如下

(*) and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg or Method: PutData) 
| select project , round(COUNT(1)/15,2) as pv from log group by project order by pv desc

SQL关键字段

计算公式

pv

写入次数

写入次数同比监控

1、确认告警SQL:查询15分钟内写入次数与昨天同一时刻对比写入次数降低的Project列表(如需与前15分钟流量对比需将SQL内86400替换成900,详见compare函数说明),dif_percent即为流量下降比例(范围:0-100,单位:%)按从大到小排序,基于该SQL点击右上角->另存为告警->新版告警。

2、告警配置

依据业务场景配置告警触发条件、以及告警策略,以SLS限制Project每分钟写次数600000为例以下触发条件代表:

  • 当写入次数下降大于20%时告警级别为中

  • 当写入次数下降大于50%时告警级别为严重

3、备注

涉及的告警SQL如下

(*) and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg or Method: PutData) 
| select Project, round(diff[1], 2) as now, round(diff[2], 2) as before, round((1-diff[3])*100, 2) as diff_percent from 
(select Project, compare(pv, 86400) as diff from 
(SELECT Project, COUNT(1) as pv from log group by Project) group by Project) 
where diff[2] > 0 order by diff_percent desc

SQL关键字段

说明

now

当前15分钟内Porject写入次数,单位:次

before

compare(pv, 86400)代表before计算的是一天前同时间段内写入次数

diff_percent

now与before比下降比率,单位:%

Quota超限监控

1、确认告警SQL:查询1分钟内Project写流量/写次数、Shard写流量超Quota次数,基于该查询SQL点击右上角->另存为告警->新版告警->创建告警。

其中告警触发条件表示超Quota1次告警等级为中,超Quota3次告警等级为高

备注:涉及的告警SQL如下

* and ErrorCode: WriteQuotaExceed or ErrorCode: ShardWriteQuotaExceed 
| select Project, count(*) as errorCount, ErrorCode as errorCode from log group by Project, ErrorCode order by errorCount desc

LogStore流量监控

LogStore写入流量同比监控

1、确认告警SQL:查询15分钟内LogStore写入流量与昨天同一时刻对比流量降幅最大的LogStore列表,dif_percent即为流量下降比例(范围:0-100,单位:%)按从大到小排序,基于该SQL点击右上角->另存为告警->新版告警。

2、告警配置

依据业务场景配置告警触发条件、以及告警策略

  • 当流量下降大于20%时告警级别为中

  • 当流量下降大于50%时告警级别为高

3、备注

涉及的告警SQL如下

(*) and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg) 
| select Project, Logstore, round(diff[1],4) as gb_now, round(diff[2],4) as gb_before, (round(diff[1],4) - round(diff[2],4)) as diff_gb, round((1-diff[3])*100,2) as diff_percent from 
( SELECT Project, Logstore, compare(GB, 86400) AS diff from ( SELECT Project, Logstore, round(sum(InFlow) / 1024.0 / 1024.0 / 1024.0, 4) as GB from log group by Project, Logstore order by GB desc ) group by Project, Logstore) 
where diff[2] >0 order by diff_percent desc 

SQL关键字段

说明

gb_now

当前15分钟内计算的流量值,单位GB,纬度:LogStore

gb_before

compare(GB, 86400)表示

gb_before计算的是一天前同时间段内流量值,单位GB

gb_diff

db_diff = gb_now - gb_diff

diff_percent

gb_now与db_before比下降比率,单位:%

写入鉴权失败监控

1、确认告警SQL:查询1分钟内写入鉴权失败统计,并基于该查询SQL点击右上角->另存为告警->新版告警监控SQL。

其中告警触发条件表示1分钟内超100次告警等级为中,超300次告警等级为高

备注:涉及的告警SQL如下

* and Status: 401 and ErrorCode:Unauthorized and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg)
|select Project, Logstore, count(*) as count from log group by Project, Logstore order by count desc

成功写入SourceIP(机器数)同比监控

1、详细日志中SourceIP对应上报日志的机器IP,通过某个时间段内SourceIP的降幅率可监控是否有机器因故障无法上报日志,如只需监控固定LogStore的可在查询语句里添加Project/LogStore过滤项。同样基于该查询SQL点击右上角->另存为告警->新版告警->创建告警。

2、告警配置

设置告警检查频率1分钟,执行时间15分钟,每分钟固定检查15分钟内满足触发条件的进行告警。

  • 当有采集机器未上报日志时(降幅>0%)告警级别为中

  • 当未上报机器同比降幅大于10%时,告警级别为高

3、备注

涉及的告警SQL如下

* and Status: 200 and (Method: BatchPostLogStoreLogs or Method: PostLogStoreLogs or Method: PutWebTracking or Method: WebTracking or Method: WebTrackingImg) 
| select Project, Logstore, diff[1] as count_now, diff[2] as count_before, round((1-diff[3])*100, 2) as diff_percent from
(select Project, Logstore, compare(machine_count, 86400) as diff from 
(SELECT Project, Logstore, COUNT(distinct SourceIP) as machine_count from log where logstore != '' group by Project, Logstore) group by Project, Logstore) 
order by diff_percent desc 

SQL关键字段

说明

count_now

当前15分钟内SourceIP个数统计(采集日志的机器数)

count_before

compare(GB, 86400)代表

count_before统计的是一天前同时间段内SourceIP数

diff_percent

count_now与count_before比下降比率,单位:%

方案验证

以成功写入SourceIP(机器数)同环比监控为例,上述告警触发后的通知结果如下:

告警高级模式

对于不同的业务logstore触发告警后想通知到不同的用户组,可参考告警的分组评估功能。

1、告警规则分组评估选择标签自定义

2、选择的行动策略需依据配置的标签Logstore筛选

3、内容模板配置:

阿里云账号:${aliuid}

告警规则名称:${alert_name}

告警标题:${annotations.title}

告警内容:${Results[0].RawResults}

附录

1、函数说明:compare函数round函数

2、告警:钉钉渠道说明创建行动策略告警分组评估使用说明

3、CloudLens for SLS:使用帮助文档