通过会话日志进行分账

在多个业务部门共用NAT网关以访问外部资源的场景中,进行成本分析时常常面临合理拆分NAT网关所产生费用的挑战。因此,您可以使用会话日志功能,将捕获的SNAT会话与流量数据存储于阿里云日志服务中,以便在日志服务中对捕获的日志内容进行整理,从而实现对NAT网关费用的合理拆分。

场景示例

某企业在云端设有业务部和企划部。两者均需访问外部资源。为提高安全性并简化网络架构,企业决定通过NAT网关统一为这两个部门提供外部资源的访问能力。

财务部门在月末进行成本分析时遇到了难题,无法合理地将NAT网关产生的费用分配给业务部和企划部。为实现费用的合理分摊,企业的运维人员首先利用会话日志功能,将捕获的SNAT会话日志存储至阿里云日志服务。运维人员通过SQL语句对存储的数据进行分析,根据各部门使用流量的占比情况,对NAT网关产生的费用进行分摊。

通过上述方法,企业能够有效地将NAT网关的费用合理分配给各部门,确保成本的透明性。同时,该方案还有助于提高资源利用效率和安全性,从而节省企业整体运营成本。

image

使用须知

费用说明

会话日志不收取日志生成费用,但会话日志所捕获的SNAT会话将存储于阿里云日志服务中,日志服务将收取相应的存储和检索等费用。更多信息,请参见日志服务计费

使用限制

  • 按固定规格计费(停止新购)的NAT 网关实例不支持开启会话日志服务。

  • 会话日志不支持捕获DNAT会话。

操作步骤

步骤一:启用会话日志

重要

在启用会话日志后,请务必进行索引配置并设置日志存储时间,以确保数据的有效性与可查性。

  1. 登录NAT网关管理控制台,找到目标NAT网关实例,单击NAT网关实例ID。

  2. 监控和日志页签,单击会话日志 > 启用会话日志,选择现有的或创建日志服务Project日志库Logstore

    image

  3. 监控和日志页签,单击目标信息列的名称,以查看日志内容。

    image

步骤二:统计流量占比

通过SQL语句,查看按网段(部门)区分后,经过NAT网关的流量占比情况。

说明
  • 日志服务Project支持使用查询语句对存储在Logstore中的日志进行筛选。筛选结果可独立使用,也可以用于分析语句,进行更复杂的分析处理。更多信息,请参见查询语法与功能

  • NAT网关计费指标中的处理流量是指统计的总处理流量,包括出流量和入流量。采集到的出流量和入流量数据均为在NAT网关处理前的数据。

完整语句

select 
    concat(split_part(pri_ip, '.', 1), '.', split_part(pri_ip, '.', 2), '.', split_part(pri_ip, '.', 3), '*') as pri_ip, 
    sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) as total_bytes, 
    round(sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) * 100.0 / 
         (select sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) from log), 2) as percentage 
from 
    log 
group by 
    pri_ip 
order by 
    percentage desc

语句解析

  1. 该企业的网络架构采用按部门划分子网的方式,业务部 172.16.10.0/24,企划部172.16.20.0/24。通过将网络流量按子网聚合,可以清晰地归属到各个部门。

    concat(
        split_part(pri_ip, '.', 1), '.',  
        split_part(pri_ip, '.', 2), '.',  
        split_part(pri_ip, '.', 3), '.*' 
    ) as pri_ip
  2. 此数据是成本核算分摊的核心依据,采集到的出流量和入流量数据均为在NAT网关处理前的数据。

    sum(
        cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)
    ) as total_bytes  

image

  • 当多个NAT网关实例共用同一日志服务时,请您在查询语句之前添加相应的查询条件。

    instance_id : NAT网关实例ID |
  • 当数据量较大时,可以将数据流量转换为千兆字节total_GB进行展示

    示例

    sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) / 1024 / 1024 / 1024 as total_GB

    完整语句

    select 
        concat(split_part(pri_ip, '.', 1), '.', split_part(pri_ip, '.', 2), '.', split_part(pri_ip, '.', 3), '*') as pri_ip, 
        sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) / 1024 / 1024 / 1024 as total_GB, 
        round(
            (sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) / 1024 / 1024 / 1024) * 100.0 / 
            (select sum(cast(bytes_from_vpc as bigint) + cast(bytes_from_pub as bigint)) / 1024 / 1024 / 1024 from log), 2) as percentage 
    from 
        log 
    group by 
        pri_ip 
    order by 
        percentage desc

相关内容