数据中台赋能云成本管理(1):创建账单项目

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 背景 在成本管家中,SLS提供了云产品账单的数据,通过SLS强大的分析和可视化能力,帮助客户分析云产品账单,优化成本。在发布后在客户中间引起强烈的反馈,不少客户要求在账单中增加实例名,Tag,资源用量等信息,通过更多维度数据做分账。

背景

成本管家中,SLS提供了云产品账单的数据,通过SLS强大的分析和可视化能力,帮助客户分析云产品账单,优化成本。在发布后在客户中间引起强烈的反馈,不少客户要求在账单中增加实例名,Tag,资源用量等信息,通过更多维度数据做分账。客户对分账有比较强烈的需求,通过把账单分配到不同的部门,让不同部门各自完成自己的成本优化工作。为了满足客户的分账需求,我们在成本管家二期中引入了更加丰富的账单数据,本篇文档,讲介绍如何通过代码一步创建账单数据。

授权SLS成本管家获取账单数据

点击授权链接,同意SLS成本管家获取账单数据。

通过Java SDK创建账单数据

1. 引入Pom依赖

         <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>aliyun-log</artifactId>
            <version>0.6.45</version>
        </dependency>

2. 复制程序

创建类文件bill_ingestion_creator

import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.AliyunBSSSource;
import com.aliyun.openservices.log.common.Dashboard;
import com.aliyun.openservices.log.common.Ingestion;
import com.aliyun.openservices.log.common.IngestionConfiguration;
import com.aliyun.openservices.log.common.JobSchedule;
import com.aliyun.openservices.log.common.JobScheduleType;
import com.aliyun.openservices.log.common.JobState;
import com.aliyun.openservices.log.common.LogStore;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateDashboardRequest;
import com.aliyun.openservices.log.request.CreateIngestionRequest;
import com.aliyun.openservices.log.request.ListIngestionRequest;
import com.aliyun.openservices.log.response.ListIngestionResponse;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;

public class bill_ingestion_creator {

    static String endpoint = "cn-chengdu.log.aliyuncs.com";
    static String accessId = ""; // 修改成你的AccessId
    static String accessKey = ""; // 修改成你的accessKey
    static String aliuid = ""; // 修改成你的aliuid

    static String getIngestionName() {
        return "ingestion-" + (int) (new Date().getTime() / 1000);
    }

    private static Ingestion createIngestion() {
        Ingestion ingestion = new Ingestion();
        String jobName = getIngestionName();
        ingestion.setName(jobName);
        ingestion.setState(JobState.ENABLED);
        ingestion.setDisplayName("BSS-test");
        IngestionConfiguration configuration = new IngestionConfiguration();
        configuration.setLogstore("aliyun_bill");
        AliyunBSSSource source = new AliyunBSSSource();
        source.setHistoryMonth(7);
        source.setRoleARN("acs:ram::" + aliuid + ":role/AliyunLogAccessingBSSRole");
        configuration.setSource(source);
        ingestion.setConfiguration(configuration);
        JobSchedule schedule = new JobSchedule();
        schedule.setInterval("10m");
        schedule.setType(JobScheduleType.FIXED_RATE);
        schedule.setRunImmediately(true);
        ingestion.setSchedule(schedule);
        return ingestion;
    }

    public static void main(String args[]) throws LogException {
        Ingestion ingestion = createIngestion();
        String project = "bill-sls-" + aliuid;
        String logstore = "aliyun_bill";
        Client client = new Client(endpoint, accessId, accessKey);
        String index = downFile("index");
        try {
            client.CreateProject(project, "bill analysis");
        } catch (LogException e) {
            e.printStackTrace();
        }
        try {
            client.CreateLogStore(project, new LogStore("aliyun_bill", 3000, 5));
        } catch (LogException e) {
            e.printStackTrace();
        }
        try {
            client.CreateIndex(project, logstore, index);
        } catch (LogException e) {
            e.printStackTrace();
        }
        String dashboards[] = {"dashboard_sls", "dashboard_oss", "dashboard_ecs", "dashboard_all", "bill_summary_cn", "bill_detail_cn", "bill_optimize_cn"};
        for (String dashboardName : dashboards) {
            Dashboard dashboard = new Dashboard();
            String config = downFile(dashboardName);
            dashboard.FromJsonString(config);
            try {
                client.createDashboard(new CreateDashboardRequest(project, dashboard));
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        ListIngestionResponse response1 = client.listIngestion(new ListIngestionRequest(project));
        if(response1.getResults().size()> 0) {
            System.out.println("ingestion is already created,don't recreate");
        }
        else {
            client.createIngestion(new CreateIngestionRequest(project, ingestion));
        }
        response1 = client.listIngestion(new ListIngestionRequest(project));
        for (Ingestion ingestion1 : response1.getResults()) {
            System.out.println("bill ingestion:" + ingestion1.getName() + ", project:" + project + ", logstore :" + ingestion1.getConfiguration().getLogstore());
        }    }

    public static String downFile(String fileName) {
        try {
            URL url = new URL("http://logdemo.oss-cn-beijing.aliyuncs.com/bill_logstore/" + fileName);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3 * 1000);
            InputStream inputStream = conn.getInputStream();
            byte[] buf =  readInputStream(inputStream);
            return new String(buf);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    public static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }
}

3. 修改账号参数

在上述程序中,修改以下三个参数,分别是accessId, accessKey, aliuid。

     static String accessId = ""; // 修改成你的AccessId
    static String accessKey = ""; // 修改成你的accessKey
    static String aliuid = ""; // 修改成你的aliuid

查看账单数据

以上操作完成后,等待一分钟,即可进入sls控制台,选择bill-sls-开头的账单即可。

image.png

  1. 在logstore列表中选择aliyun_bill,即可查看账单原始数据。
    image.png
  2. 在dashboard中选择对应的报表,即可查看系统SLS提供的内置报表。

image.png

账单原始数据:

账单日期 BillingDate:  2020-02-05
计费项 BillingItem:  流出流量
计费类型 BillingType:  其它
消费单位 CostUnit:  未分配
货币 Currency:  CNY
现金券抵扣 DeductedByCashCoupons:  0.0
代金券抵扣 DeductedByCoupons:  0.0
预存卡抵扣 DeductedByPrepaidCard:  0.0
资源包抵扣 DeductedByResourcePackage:  0
实例配置 InstanceConfig:  iz:华东 1 可用区 F;实例规格名称:ecs.xn4.small;CPU:1;内存:1024;磁盘:1;带宽:512000;OS:UBUNTU;是否io优化:io_optimized_only
实例ID InstanceID:  i-bp14putxkqvmal310ian
实例描述 InstanceSpec:  ecs.xn4.small
公网IP InternetIP:  47.96.36.117
内网IP IntranetIP:  10.80.65.37
发票抵扣 InvoiceDiscount:  0.0
付费类型  Item:  PayAsYouGoBill
单价 ListPrice:  0.800000
单价单位 ListPriceUnit:  元/Mbps
昵称  NickName:  iZbp14putxkqvmal310ianZ
OutstandingAmount:  0.0
OwnerID:  1340796328858956
付费金额 PaymentAmount:  0.0
税前金额  PretaxAmount:  0.0
税前原始金额  PretaxGrossAmount:  0.009
产品ProductCode:  ecs
产品详情 ProductDetail:  云服务器ECS-按量付费
产品名称 ProductName:  云服务器 ECS
产品类型 ProductType:  
地域 Region:  华东1(杭州)
资源组 ResourceGroup:  默认资源组
服务周期 ServicePeriod:  86400
订阅类型 SubscriptionType:  PayAsYouGo
标签 Tag:  key:department value:mayunlei
使用量 Usage:  0.011000
使用量单位 UsageUnit:  Mbps
地域 Zone:  cn-hangzhou-f
__source__:  instance_bill

进行自定义分析

在实例账单分析中,各个企业的分账模式各不相同,有的采用TAG方式,有的在实例名称中定义责任人,有的在昵称中定义责任人,不同的方式如何进行分账管理,请参考本系列接下来的文章。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
存储 机器学习/深度学习 数据采集
推荐| AllData数据中台开源项目
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
推荐| AllData数据中台开源项目
|
4月前
|
人工智能 JSON API
|
6月前
|
大数据 BI 数据采集
推荐 | AllData开源数据中台项目
AllData是一个可定义的数据中台,采用Wujie微前端架构和可插拔后端设计,提供全链路数字化解决方案。它包括数据平台、数据中台、机器学习平台和大模型应用,旨在连接和优化数据处理流程。项目已在GitHub上开源(https://github.com/alldatacenter/alldata),并提供了详细的官方文档和安装指南。AllData 2.0版本针对商业版和开源版的功能进行了区分,商业版在稳定性方面表现更优,同时增加了数据平台等功能。项目团队积极参与开源社区,致力于提供稳定的架构和不断改进的用户体验。
推荐 | AllData开源数据中台项目
|
数据采集 数据可视化 大数据
“数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
“数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
“数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
|
供应链 算法 数据挖掘
解决方案应用实例 |数据中台全面赋能,三只松鼠多渠道、多业态数智化转变
三只松鼠运用数据中台的期间,充分感受到数据资产的再运用及所蕴含的价值,踏入2021年的三只松鼠,站立在阿里云数据中台新基建上,向阳拥抱着多渠道、多业态的数智化转变。
767 0
解决方案应用实例 |数据中台全面赋能,三只松鼠多渠道、多业态数智化转变
|
数据采集 新零售 双11
解决方案应用实例 |数据中台赋能,雅戈尔开辟新零售“战场”
雅戈尔目前已经实现了全员上云,保证了疫情期间整个公司的工作在线上运转正常。在货和场方面的改造推进也非常成功,消费者线上下单——线下发货,线下A门店下单——B门店发货都非常通畅,在直播带货方面也取得了非常不错的成绩,所有门店都行动起来,每次都能带来上千万的销售业绩,成为行业的示范标杆。
650 0
解决方案应用实例 |数据中台赋能,雅戈尔开辟新零售“战场”
|
人工智能 大数据 BI
阿里云数据中台赋能零售耐消品新客获取与转化
数字化新客运营指标体系NEW以消费者资产作为品牌方经营的运营基石,基于消费者人群的评估、监测、驱动来带动品牌当下及未来商业的增长。
4291 0
阿里云数据中台赋能零售耐消品新客获取与转化
|
人工智能 自然语言处理 供应链
企业双11业绩增长156% 、成交额突破151亿元...... 看这背后阿里云数据中台的赋能场景
刚刚过去的天猫双11,诸多品牌通过阿里云数据中台,联动阿里巴巴数字经济体生态,实现了业务问题解决和业绩强势增长。
13698 0
企业双11业绩增长156% 、成交额突破151亿元...... 看这背后阿里云数据中台的赋能场景
|
数据采集 数据可视化 大数据
“数据驱动”时代来临,数据中台如何赋能金融业?(附重磅报告下载)
为了金融行业对数据中台有更全面、系统的认知,《2020阿里云金融数据中台报告》为金融行业展示数据中台建设之道和实践路径。
4101 0
“数据驱动”时代来临,数据中台如何赋能金融业?(附重磅报告下载)
|
新零售 供应链 大数据
从提效、变革与创新看阿里云数据中台如何赋能企业
6月9日,在2020阿里云线上峰会上,阿里云数据中台进行全面升级。
1505 0
从提效、变革与创新看阿里云数据中台如何赋能企业