基于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) |
后续如需计算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}
附录
2、告警:钉钉渠道说明、创建行动策略、告警分组评估使用说明
3、CloudLens for SLS:使用帮助文档