前言
如题,基于阿里云服务(ECS、OSS)实现 APP 的用户日志上传以及日志下载的功能,提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。
术语
ECS: 云服务器ECS(Elastic Compute Service) ,云服务器ECS(Elastic Compute Service)是一种基于云计算技术的虚拟服务器产品。它允许用户在云环境中快速部署和使用具有弹性伸缩能力的计算资源
OSS:云对象存储服务(Object Storage Service,简称OSS)是一种基于云计算的存储服务,它允许用户在云环境中存储和访问大量的非结构化数据,如文本、图片、音频、视频等
STS:阿里云的OSS STS(Security Token Service)是一种安全令牌服务,它允许用户临时地获取对阿里云服务的访问权限
如下是 OSS的应用场景:应用场说明
方案
应用日志上传功能,我们采用阿里云服务来实现。这一决策基于几个关键考虑:
1、非核心功能分离:日志上传虽然重要,但并非我们产品的核心功能。通过将其部署在阿里云上,我们可以确保它不会对主业务流程造成影响。
2、独立部署的优势:
- 业务连续性:即使我们的主部署环境遇到异常或不可用的情况,日志上传功能依然可以独立运行,保证业务连续性。
- 数据完整性:通过这种方式,我们可以持续收集用户反馈的日志,这对于分析和解决系统潜在的异常问题至关重要。
通过在阿里云上部署日志上传功能,我们不仅能够提高系统的稳定性和可靠性,还能确保在任何情况下都能收集到关键的用户数据,从而快速响应并解决可能出现的问题。
业务
整个主要业务流程: 用户触发日志上传 -> 日志上传到 OSS -> 研发企业群收通知-> 研发登录 OSS 下载文件
功能
1、利用 OSS 提供的OS文件上传功能( 使用上传 SDK)来实现我们的日志上传
2、使用 OSS 工作台的资源管理功能管理日志文件(查询、删除、下载等操作)
3、使用阿里云 RAM帐号管理体系,分别创建可读、可写、或下载的各种权限 RAM帐号,来实现日志文件的权限管理;
注:本身应用就已经用了一个日志导出到本地文件的功能,上面的产品功能图标没有涉及!
细节分享
文件上传
移动端的OSS文件上传,基于首位的安全考虑,大家通常选择 STS的方案
使用阿里云的临时安全令牌(STS)服务,我们可以构建一个高效且安全的文件上传架构。具体实施方案如下:
1、客户端文件上传:移动应用(APP)端利用阿里云对象存储服务(OSS)的SDK直接上传文件。这种方式简化了文件上传流程,同时确保了数据的安全性。
2、凭证获取:上传所需的临时凭证不是由APP端直接与阿里云OSS服务交互获取,而是通过我们的业务后端服务器与阿里云OSS服务进行通信来获取。这样做的好处是,它减少了APP端的复杂性,同时增强了安全性,因为敏感操作都在服务器端完成。
3、SDK支持:阿里云为文件上传和临时凭证获取提供了全面的SDK支持,这使得集成和开发过程更加便捷和高效。
通过这种架构,我们不仅能够确保文件上传的安全性和便捷性,还能有效控制和管理访问权限,从而保护用户数据和系统资源。
时序图如下所示:
当前方案中Android 端的 OSS SDK 的版本如下:
端侧上传的示例代码如参考文档即可:
后端服务(springboot)的 STS SDK的版本如下:
后端跟阿里云STS交互,获取 STS的前置关键是要配置好 AssumeRole - 获取扮演角色的临时身份凭证
在主帐号的访问控制》身份管理》角色,配置好角色并授权 AliyunOSSFullAccess
企微消息通知
为了实现用户上传日志后企业微信群即时收到通知的功能,我们采用了阿里云OSS的事件通知服务,并结合企业微信的Webhook机制。以下是实现这一功能的关键步骤:
1、配置OSS事件通知:
首先,确保已经开通了轻量消息队列SMQ服务。
在OSS管理控制台中,设置事件通知规则,指定当文件上传操作(如PutObject、PostObject等)发生时,OSS将触发事件通知。
配置事件通知规则,使其将事件消息发送到您指定的HTTP服务器或SMQ队列。
接收OSS事件通知:
2、搭建一个HTTP服务器,用于接收OSS发送的事件通知。这些通知将包含有关文件上传操作的详细信息,如文件名、大小等。
确保您的HTTP服务器能够处理Base64编码的JSON格式消息,并能解析出事件类型和相关数据。
配置企业微信群Webhook:
3、在企业微信中创建一个应用机器人,并获取该应用机器人的Webhook URL,这是用于接收消息的端点。
在您的业务服务器上,配置一个向企业微信群发送消息的机制。当接收到OSS的事件通知后,服务器将解析事件内容,并使用Webhook URL向企业微信群发送消息。
整合与测试:
4、将OSS事件通知与企业微信Webhook整合,确保当OSS检测到文件上传事件时,能够触发向企业微信群发送消息的操作。
进行测试,验证上传文件后企业微信群是否能够收到相应的通知消息。
通过以上步骤,您可以实现一个自动化的系统,当用户上传日志文件到OSS时,企业微信群能够实时收到通知,从而提高团队的响应速度和协作效率
值得最注意一点是:OSS给我们的 httpserver post 的事件,请求包的body 数据是做了Base64 encode 的,我们收到 Body 数据后需要先Base64 decode 一下,然后再解析与使用整个 json 数据(事件数据格式是 josn ,但被 Base64 encode 了 )
如下是配置 OSS的事件通知的示例:
我们的业务服务器收到 OSS的事件通知,并解析出对应的数据后,我们就可以构造一个自定义内容的企业消息,通过 webook 把该消息发送到群里。webook 需要在对应的企微群创建一个机器人,就可以获得机器人的 webbook。