原标题:一文了解亚马逊云科技Amazon Athena云上服务的日志结构化建表与查询流程
服务介绍
亚马逊云科技Amazon Bedrock是一项完全托管的服务,使用单个API提供来自AI21 Labs、Anthropic、Cohere、Meta、Stability AI和Amazon等领先人工智能公司的高性能基础模型,以及构建生成式人工智能应用程序所需的一系列广泛功能,在维护隐私和安全的同时简化开发。借助Amazon Bedrock的全面功能,您可以轻松尝试各种热门FM,使用微调和检索增强生成等技术利用数据对其进行私人定制,并创建可执行复杂业务任务的托管代理,所有这些都无需编写任何代码。由于Amazon Bedrock是无服务器的,因此无需管理任何基础设施,并且可以使用已经熟悉的亚马逊云科技服务将生成式人工智能功能安全地集成和部署到应用程序中。
Amazon Athena是一种交互式查询服务,能够轻松使用标准SQL直接分析Amazon Simple Storage Service(Amazon S3)中的数据。只需在服务界面中执行几项操作,即可将Athena指向Amazon S3中存储的数据,并开始使用标准SQL运行临时查询,然后在几秒钟内获得结果。
在这篇文章中,以Amazon Bedrock的服务调用日志为例,阐述Amazon Athena对于云上服务的日志结构化建表与查询流程,并获取cost_input_token_cnt与cost_output_token_cnt两个字段,可以快速帮助Bedrock用户计算服务调用的费用,并以日期与小时为分组进行指标的统计。
开启Bedrock日志
首先,在Amazon Bedrock的控制台上开启模型调用日志,选择要开启日志的日志类别以及日志的存储目的地,这里选择将模型调用日志输出到Amazon S3中,如下图所示。
在Amazon Athena中建立日志表
开启Amazon Bedrock的模型调用日志后,将会在指定的Amazon S3路径中看到Bedrock的模型调用日志。下载其中的日志文件后,可以看到具体的日志内容。每条日志是一次完整的调用记录,以JSON对象的形式进行记录,JSON对象中包括schemaType,schemaVersion,timestamp,accountId,region,requestId,operation,modelId,input,output字段,分别表示schema类型,schema版本,调用时间戳,账号Id,调用的AWS region,请求Id,调用方法,使用的模型Id,调用的输入以及调用的输出。其中输入input,输出output均为嵌套的JSON对象字段,重要的包括inputBodyJson,inputTokenCount,outputBodyJson,outputTokenCount字段,分别表示输入内容JSon,输入的Token的数量,输出内容JSon,输出Token的数量。
另外,Amazon Bedrock转存到Amazon S3的日志目录层次较深,形式如S3://bucket/prefix/AWSLogs/YourAccount Id/BedrockModelInvocationLogs/region/year/month/day/hour,日志目录是按区域、年、月、日、时这几个维度来组织的。具体如下所示:
在了解了Amazon Bedrock模型调用日志的格式以及日志文件组织形式后,就可以对日志数据采用Amazon Athena来进行数据建模。考虑到Bedrock的日志是以小时为单位来对日志做轮转的,结合对数据查询的要求,可以采用日期和小时这两个维度来进行数据分区。由于Bedrock自动按小时来组织日志数据,日志数据建模时,需要考虑数据分区的自动更新问题,也就是说需要让Athena感知到数据分析元数据信息。
对于分区信息的更新,可以采用基于事件的方式来动态更新数据的分区信息,当Amazon S3中产生了新的日期或者小时日志目录时自动更新分区信息,这种方式可以比较 的控制分区数量。但是考虑到面向终端用户的应用,应用都会实时在线,基本上每个小时都会有日志产生,并且这种的日志产生的模式是固定的,并且在长期会积累较多的分区信息。基于此,可以使用Amazon Athena的Partition Projection特性来自动化分区管理,并且加速查询效率。
使用Athena Partition Projection进行数据建模
根据对Bedrock模型调用日志的分析,使用Amazon Athena建立日志数据表。
在SQL中,表中的各个字段映射到日志JSON对象中的各个字段,input和output字段采用struct类型映射嵌套的JSON对象,并指定日期dt和小时h这两个分区字段。通过LOCATION指定日志数据的路径,这个路径指定到Region这个层级即可。在TBLPROPERTIES中,设置‘projection.enabled’属性为‘true’来开启表的分区映射功能,并且分别指定dt和h这两个分区字段的类型以及对应的配置,其中dt映射为‘date’日期类型,日期格式为‘yyyyMMdd’,并设定日期的范围以及日期间隔,h为枚举类型,并给出所有的值。关于Athena的partition projection配置可以参考服务文档。最后,由于日志数据的分区格式不是默认的Hive分区格式,需要设置‘storage.location.template’属性来告知Athena底层数据的存放形式,具体的设置方法可以参考相关文档。在Athena中建完表后,即可对数据进行查询、统计和分析。
使用Amazon Athena进行数据查询与成本分析
Bedrock price页面提供了多种LLM模型调用计费模式,其中Claude On-Demand计费单价如下:
此外token count不足100按照100计算。基于以上信息,可以查询某天(或某时)模型调用明细,包括每次的实际输入Token数量、计费输入Token数量、实际输出Token数量、计费输出Token数量。
比如想查看每个模型在当天总的输入Token数、总的计费输入Token数、总的输出Token数、总的计费输出Token数。
输出结果如下:
数据建模后,除了可以通过Athena做交互式统计查询、分析外,还可以通过Athena对接Amazon QuickSight或者Tableau等BI工具进行数据报表展示以获得更好的使用体验。
总结
综上所述,以Bedrock为例,阐述了Amazon Athena这一Serverless服务进行云上日志结构化建表与查询,并提取inputtokencount与outputtokencount两个字段来帮助Bedrock用户计算服务调用的费用。
投稿邮箱:chuanbeiol@163.com 详情请访问川北在线:http://www.guangyuanol.cn/