使用CloudLens for SLS分析资源用量

本文介绍在CloudLens for SLS中自定义分析日志服务资源用量的常用场景。

背景信息

CloudLens for SLS推出账单数据(免费),用于监控计费用量。账单数据来源于费用中心,日志服务使用账单拉取加工任务将数据拉取到表格存储中进行存储(账单数据所使用的表格存储实例免费),并通过日志服务外部数据关联能力,提供账单数据的查询分析能力。

image

基于账单数据,CloudLens for SLS提供了资源用量监控报表,帮助您分析日志服务计费项用量,实时监控用量情况。另外,您还可以使用账单数据,实现日志服务资源用户的自定义SQL分析、告警等功能。image.png

功能入口

  1. 登录日志服务控制台
  2. 日志应用区域的云产品Lens页签中,单击CloudLens for SLS

    更多信息,请参见CloudLens for SLS

账单数据介绍

日志服务账单数据包含每一个日志服务实例在不同计费项产生的使用量。在自定义分析前,您需要了解日志服务账单数据中的实例、计费项等基本概念。

基本概念

字段

说明

实例

InstanceID

日志服务的最小粒度资源,对应日志服务Logstore。

计费项

BillingItem

日志服务的收费项,例如存储空间-日志热存储、索引流量-日志索引等。

实例

日志服务实例是日志服务的最小粒度资源(Logstore),组成结构为${aliUid};${Project};${Logstore};${Region},详细说明如下表所示。

变量

说明

${aliUid}

阿里云账号ID。

${Project}

日志服务的资源管理单元,是进行多用户隔离与访问控制的主要边界。更多信息,请参见项目(Project)

${Logstore}

日志服务中日志数据的采集、存储和查询单元。更多信息,请参见日志库(Logstore)

${Region}

日志服务数据中心所在的物理位置。您可以在创建Project时指定地域,一旦指定之后就不允许更改。更多信息,请参见开服地域

计费项

日志服务计费项是日志服务提供能力的收费项。在日志服务中所有计费项都是单独计费的,例如您存储日志会产生日志存储费用,您采集日志会产生写流量费用等。计费项说明,请参见按使用功能计费模式计费项

在账单数据中,BillingItem字段代表计费项。日志服务的计费项组成,请参见计费组成

SLS用量分析典型场景

在账单数据的基础上,您可以自定义分析账单,以实现实时监控资源用量的能力。

用量趋势与实例用量明细监控

您可以监控用量趋势与实例用量明细,从而处理账单数据异常突变情况。

  • 用量趋势监控

    您可以使用date_trunc函数实现不同时间粒度的用量趋势统计分析。

    • 查询与分析语句

      其中BillingItem为计费项,Usage为用量。

      * |
      select
       date_trunc('day', __time__) as "日期",
       BillingItem,
       round(sum(Usage), 3) as "用量"
      FROM instance_bill
      where
       productcode = 'sls'
      group by
       "日期",
       BillingItem
      order by
       "日期"
    • 查询与分析结果:您可以使用流图(Pro版本)直观地展示查询与分析结果。其中,设置x轴字段日期y轴字段用量聚合列BillingItemimage.png

  • 实例用量明细监控

    对用量明细进行统计分析时,往往需要精细到某个实例的费用以及用量,以SLS实例为例,您可以组合费用、用量和存储量的分析语句。其中:

    • t1为计费项用量统计,统计每个实例的各计费项的用量信息。

    • t2为实例费用统计,统计每个实例的应付费用、同比上月的占比,其中PretaxAmount为应付费用。

    • t3为存储量总量统计,存储量以天为单位,存储量的用量信息只统计截止到您所选时间范围最后一日的总量。

      • 查询与分析语句

        * | with t1 as (
        	select
        	InstanceID,
        	BillingItem,
        	sum(Usage) as Usage
        	FROM instance_bill
        	where
        	ProductCode = 'sls'
        	and BillingItem not like '%存储空间%'
        	and BillingItem not like '%Storage%'
        	group by
        	InstanceID,
        	BillingItem
        ),
        t2 as (
        	select
        	InstanceID,
        	round(di [1], 3) as "费用",
        	concat(
        		cast(round(di [3] * 100 -100, 3) as varchar),
        		'%'
        	) "同比上月"
        	from(
        		select
        		InstanceID,
        		compare(cost, 2592000) as di
        		FROM (
        			select
        			InstanceID,
        			round(sum(PretaxAmount), 2) as cost
        			FROM instance_bill
        			where
        			ProductCode = 'sls'
        			group by
        			InstanceID
        		)
        		group by
        		InstanceID
        	)
        ),
        t3 as (
        	select
        	InstanceID,
        	max_by("存储空间", t) as "存储空间"
        	FROM (
        		select
        		t,
        		InstanceID,
        		round(sum("存储空间"), 2) as "存储空间"
        		from(
        			select
        			date_trunc('day', __time__) as t,
        			InstanceID,
        			case
        			when BillingItem like '%存储空间%'
        			or BillingItem like '%Storage%' then Usage
        			else 0
        			end as "存储空间"
        			FROM instance_bill
        			WHERE
        			ProductCode = 'sls'
        			group by
        			t,
        			InstanceID,
        			"存储空间"
        		)
        		group by
        		t,
        		InstanceID
        		order by
        		t asc
        	)
        	group by
        	InstanceID
        )
        select
         t1.InstanceID as InstanceID,
         t1.BillingItem as BillingItem,
         t1.Usage as Usage,
         t2."费用" as "费用(元)",
         t2."同比上月" as "同比上月(%)",
         t3."存储空间" as "存储空间"
        FROM t1
         left join t2 on t1.InstanceID = t2.InstanceID
         left join t3 on t1.InstanceID = t3.InstanceID
        order by
         "费用 (元)" desc
        limit
         150000
      • 查询与分析结果

        您可以使用交叉表直观地展示每个实例的各个计费项明细。其中,设置分类列BillIngItem指标列Usage聚合列InstanceID费用(元)同比上月(%)存储空间。配置完成后,您可以监控到每个实例的费用及用量数据。同时通过对某个计费项进行排序,可以直观地统计某个计费项用量对应的Top实例。image.png

实现用量趋势与实例用量明细监控后,您可以清晰地观测到资源用量情况。接下来,可以继续对读写流量、存储空间、索引用量等典型用量的变动场景进行进一步分析。

读写流量增长场景

下图为日志服务读写流量用量明细统计图,您可以从图中发现03-31~04-01期间读写流量用量明显上升,需要进一步分析上升原因。image.png

您可以使用如下查询与分析语句分析各实例的读写流量数据,然后通过统计图表展示查询与分析结果。

  • 查询与分析语句

    * |
    select
     "日期",
     InstanceID,
    "用量"
    from(
    	select
    	date_trunc('day', __time__) as "日期",
    	InstanceID,
    	round(sum(Usage), 3) as "用量"
    	FROM instance_bill
    	where
    	productcode = 'sls'
    	and BillingItem = '读写流量' 
    	group by
    	"日期",
    	InstanceID
    )
    group by
     "日期",
     "用量",
     InstanceID
    order by
     "日期"
    limit
     10000
  • 查询与分析结果

    您可以使用交叉表直观地展示每个实例本周的读写流量情况。例如将2023-04-01的读写流量数据进行倒序排列,您可以发现,instance1与instance2在2023-04-01发生了读写流量用量突变,导致整体的读写流量用量发生了突变。然后通过实例ID,您可以准确找到对应的Project、Logstore,便于进一步优化读写流量。

    image.png

存储空间用量增长场景

下图为日志服务存储空间用量统计图表,您可以从图中发现12-26~01-09期间的存储空间用量明显上升,需要进一步分析上升原因,并优化存储空间。

image.png

您可以通过如下查询与分析语句查询1月3号这天各实例的存储量,并统计同比-1天、同比-2天、同比-3天的数据,然后通过统计图表可视化展示查询与分析结果。

  • 查询与分析语句

    * |
    select
     InstanceID,
     round(diffreal [1], 3) as "Usage",
     concat(
    		cast(
    			round(diffreal [1] / sum(diffreal [1]) over() * 100, 2) as varchar
    		),
    		'%'
    	) as "用量占比",
     concat(
    		cast(
    			coalesce(round(diffreal [5] * 100 -100), 2) as varchar
    		),
    		'%'
    	) as "同比-1天",
     concat(
    		cast(
    			round(coalesce(diffreal [6] * 100 -100, 2)) as varchar
    		),
    		'%'
    	) as "同比-2天",
     concat(
    		cast(
    			round(coalesce(diffreal [7] * 100 -100), 2) as varchar
    		),
    		'%'
    	) as "同比-3天"
    from(
    	select
    	InstanceID,
    	compare(Usage, 86400, 172800, 259200) as diffreal
    	from(
    		select
    		InstanceID,
    		sum(Usage) as Usage
    		FROM instance_bill
    		where ProductCode='sls' and BillingItem = '存储空间'
    		group by
    		InstanceID
    	)
    	group by
    	InstanceID
    )
    order by
     diffreal [1] desc
    limit
     1000
  • 查询与分析结果

    您可以使用交叉表直观地展示查询与分析结果。您可以按照实例存储用量占比进行排序,从下述表格可知占比前四的实例均保持稳定的用量趋势,而instance5的存储空间用量在近三天同比中呈现较明显的上升趋势。因此,您需要针对instance5进一步分析存储量上升原因。

    image.png

您可以执行如下查询与分析语句,针对instance5进一步分析存储量上升原因。

  • 查询与分析语句

    其中,需将${instance5}替换为具体的实例。

    * |
    select
     date_trunc('day', __time__) as "日期",
     BillingItem,
     round(sum(Usage), 3) as "Usage"
    FROM instance_bill
    where
     productcode = 'sls'
    and InstanceID = ${instance5}
    group by
     "日期",
     BillingItem
    order by
     "日期"
  • 查询与分析结果

    通过该实例的用量趋势图可知,除存储空间用量外,该实例的读写流量、索引流量都有所增长。虽然后面的读写流量与索引流量稳定在一个固定区间,但存储量持续增长,特别是01-01~01-09期间的存储用量数据。这是因为存储空间用量包含日志写入流量和索引数据量,即数据存储时长不变时,每日写入流量、索引流量增加会导致总存储量增加。

    假设每日新写入流量和索引流量固定为1 GB,数据存储时长为30天,则总存储量稳定为30 GB。当新写入流量和索引流量增加为2 GB后,增加后的第一天总存储量为31 GB,第二天总存储量为32 GB,以此类推,新写入流量和索引流量增加的30天后,总存储量为2 GB*30=60 GB。这就导致了虽然索引流量和读写流量后续没有较大变化,但存储量持续上升的情况。

    在分析存储空间用量增长的原因后,您需要对存储空间用量进行优化。由于写入流量跟实际业务绑定,因此您可以根据实际使用情况适当减少索引数,同时采取缩短存储时长等方式减少存储量。

    image.png

    image.png

索引用量增长场景

下图展示了一个实例的用量趋势情况,您可以从图中发现该实例的索引流量于12-26~12-28期间有较明显上升趋势。 image.png

日志索引流量与写入流量、索引数量(全文索引+字段索引)相关。根据账单数据可知读写流量上升导致了索引流量同步上升。 由于读写流量与您的业务绑定,因此您可以采取减少索引数量的方式优化索引流量,例如关闭全文索引、按需减少字段索引的数量,仅对关键字段设置索引。

实际使用量没变,但用量统计为0场景

使用账单数据分析资源用量时,会发生实际存在使用量,但账单计算用量为0的情况。如下图所示,从02-28这天起资源用量降为0。针对此问题,需要进一步分析原因。

image.png

  1. 根据账单数据排查计费方式是否为资源包抵扣。

    • 查询与分析语句

      分别查询用量数据、资源包抵扣数据量。

      (*) |
      select
      	InstanceID,
       BillingItem,
       	Usage as "用量",
      	DeductedByResourcePackage as "资源包抵扣量"
      FROM instance_bill
      where
       productcode = 'sls'
    • 查询与分析结果

      从下图可知,虽然账单计算用量为0,但资源包抵扣量不为0,说明存在资源包抵扣情况。

      image.png

  2. 判断资源包抵扣量是否为计费项总用量。

    • 查询与分析语句

      查询资源包抵扣前的原始资源用量。其中,资源包抵扣用量为DeductedByResourcePackage,抵扣前总用量为Usage+DeductedByResourcePackage。

      * |
      select
       date_trunc('day', __time__) as "日期",
       BillingItem,
       round(sum(Usage + DeductedByResourcePackage), 3) as "抵扣前总用量"
      FROM instance_bill
      where
       productcode = 'sls'
      group by
       "日期",
       BillingItem
      order by
       "日期"
    • 查询与分析结果

      image.png

配置用量告警

日志服务告警是一站式的告警监控、降噪、事务管理、通知分派的智能运维平台。您可以通过使用SLS的告警功能,实现实时监控日志服务用量的能力。在CloudLens for SLS中集成了异常检测,可以快速进入告警中心。具体操作,请参见设置告警

image.png

昨日整体用量告警

通常情况下,为了控制整体成本,您需要关注整体用量。例如使用如下查询与分析语句查询存储空间用量。

  • 查询与分析语句

     * | 
    select
    	round(sum(Usage), 2) as "存储空间用量"
    from instance_bill
    where ProductCode='sls' 
    and BillingItem='存储空间'
  • 告警配置

    在告警配置中,设置触发条件有数据匹配,并将匹配条件设置为存储空间用量大于您的告警阈值,例如"存储空间用量">400

    image.png

单一实例用量告警

为了优化成本,您还需要关注具体实例的用量告警。例如使用如下查询与分析语句查询存储空间用量,当单个实例的存储空间用量超过10则告警。

  • 查询与分析语句

    * |
    select
     InstanceID,
     "存储空间用量"
    from(
     select
     InstanceID,
     round(sum(Usage), 2) as "存储空间用量"
     FROM instance_bill
     where
     ProductCode = 'sls'
     and BillingItem = '存储空间'
     group by
     InstanceID
     )
    where
     "存储空间用量" > 10
  • 告警配置

    在告警配置中,设置触发条件有数据,即存在有实例存储空间用量超过告警阈值则会告警。告警会展示实例ID与对应实例的存储空间用量。 image.png

除了上述两种告警场景外,您也可以根据实际业务需求自定义告警。具体操作,请参见快速设置日志告警