基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等
前言
如题,基于阿里云服务(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。
相关文档
- 群机器人配置说明
- HTTP订阅方接收示例_消息服务(SMQ)-阿里云帮助中心
- 结合轻量消息队列实现OSS事件通知
相关文章:

基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等
前言 如题,基于阿里云服务(ECS、OSS)实现 APP 的用户日志上传以及日志下载的功能,提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。 术语 ECS: 云服务器ECS(Elastic Compute Service)…...

Python浪漫之画星星
效果图(动态的哦!): 完整代码(上教程): import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…...

Android使用协程实现自定义Toast弹框
Android使用协程实现自定义Toast弹框 最近有个消息提示需要显示10s,刚开始使用协程写了一个shoowToast方法,传入消息内容、显示时间和toast显示类型即可,以为能满足需求,结果测试说只有5s,查看日志和源码发现Android系统中Toa…...
git diff命令详解
git diff 是 Git 中非常常用的命令,用于比较不同版本的文件改动。可以比较工作区、暂存区、或者提交之间的差异。下面是对 git diff 常用场景的详细解释: 1. git diff 当你执行 git diff 时,它会显示工作区与暂存区之间的差异,也…...

Vue 插槽:组件通信的“隐形通道”
在 Vue 中,插槽(slot)是实现组件内容分发的机制,允许我们将子组件的内容传递给父组件,从而提升组件的可复用性和灵活性。插槽的本质是通过将父组件内容传递到子组件指定的插槽位置,使得子组件在渲染时可以动…...

react1816中的setState同步还是异步的深层分析
setState 是 react 中更新 UI 的唯一方法,其内部实现原理如下: 调用 setState 函数时,React 将传入的参数对象加入到组件的更新队列中。React 会调度一次更新(reconciliation),在调度过程中,Re…...

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第七篇-体积纹理绘制】
我们前几篇已经完成了渲染部分,现在终于开始做动态绘制功能了 之前使用的是这样一个体积雾的切片图,那么现在要做的就是动态编辑它 首先,让我们简单了解一下它是如何运作的: 开始绘制画布以渲染目标,并将材质绘制到画…...

Linux的环境搭建
目录 1、linux的简单介绍 2、搭建linux环境 2.1 linux的环境安装 2.2 使用Xshell远程登入linux 2.2.1 Xshell免密登入 2.3 windows与Xshell与linux云服务器的关系 1、linux的简单介绍 linux操作系统 为 部分汇编 C语言编写 的操作系统 源代码公开(开源),官…...

WPF+Mvvm案例实战(五)- 自定义雷达图实现
文章目录 1、项目准备1、创建文件2、用户控件库 2、功能实现1、用户控件库1、控件样式实现2、数据模型实现 2、应用程序代码实现1.UI层代码实现2、数据后台代码实现3、主界面菜单添加1、后台按钮方法改造:2、按钮添加:3、依赖注入 3、运行效果4、源代码获…...
网络爬虫-Python网络爬虫和C#网络爬虫
爬虫是一种从互联网抓取数据信息的自动化程序,通过 HTTP 协议向网站发送请求,获取网页内容,并通过分析网页内容来抓取和存储网页数据。爬虫可以在抓取过程中进行各种异常处理、错误重试等操作,确保爬取持续高效地运行 1、Python网…...
如何有效解除TikTok账号间的IP关联
在当今社交媒体环境中,TikTok凭借其独特的短视频形式吸引了数以亿计的用户。对许多内容创作者而言,运营多个账号是获取更大曝光和丰富内容的有效策略。然而,如何避免这些账号之间的IP关联,以防止被平台识别并封禁,成为…...
Python自省机制
Python 自省机制 Python 自省(Introspection)是一种动态检查对象的能力,使得开发者可以在运行时获取对象的相关信息,比如属性、方法、类型等。自省机制让 Python 具备了更强的动态性和灵活性,便于调试和开发。 自省&…...
wgan-gp 对连续变量 训练,6万条数据,训练结果不错,但是到局部的时候,拟合不好,是否可以对局部数据也进行计算呢
Wasserstein GAN with Gradient Penalty (WGAN-GP) 是一种改进的生成对抗网络(GAN),它通过引入梯度惩罚来改进训练过程,从而提高生成模型的稳定性和质量。如果你在使用WGAN-GP对连续变量进行训练时,发现整体训练结果不…...

python 制作 发货单 (生成 html, pdf)
起因, 目的: 某个小店,想做个发货单。 过程: 先写一个 html 模板。准备数据, 一般是从数据库读取,也可以是 json 格式,或是 python 字典。总之,是数据内容。使用 jinja2 来渲染模板。最终的结果可以是 h…...

GeoWebCache1.26调用ArcGIS切片
常用网址: GeoServer GeoWebCache (osgeo.org) GeoServer 用户手册 — GeoServer 2.20.x 用户手册 一、版本需要适配:Geoserver与GeoWebCache、jdk等的版本适配对照 查看来源 二、准备工作 1、数据:Arcgis标准的切片,通过…...

深度学习-卷积神经网络-基于VGG16模型, 实现猫狗二分类(文末附带数据集下载链接, 长期有效)
简介: 1.基于VGG16模型进行特征提取, 结合mlp实现猫狗二分类 2.训练数据--"dog_cat_class\training_set" 3.模型训练流程 1.对图像数据进行导入和预处理 2.搭建模型, 导入VGG16模型, 去除mlp层, 将经过VGG16训练后的数据作为输入, 输入到自建的mlp层中进行训练, 要…...
计算Java集合占用的空间【详解】
以ArrayList为例,假设集合元素类型是Person类型,假设集合容量为10,目前有两个person对象{name:“Jack”,age12} {name:“Tom”,age14} public class Person{private String name;private int age; }估算Person对象占用的大小: 对…...

仕考网:关于中级经济师考试的介绍
中级经济师考试是一种职称考试,每年举办一次,报名时间在7-8月,考试时间在10-11月 报名入口:中guo人事考试网 报名条件: 1.高中毕业并取得初级经济专业技术资格,从事相关专业工作满10年; 2.具备大学专科…...

SYN590RL 300MHz至450MHz ASK接收机芯片IC
一般描述 SYN590RL是赛诺克全新开发设计的一款宽电压范围,低功耗,高性能,无需外置AGC电容,灵敏度达到典型-110dBm,300MHz”450MHz 频率范围应用的单芯片ASK或OOK射频接收器。 SYN59ORL是一款典型的即插即用型单片高集成度无线接收器&…...
15分钟学 Go 第 20 天:Go的错误处理
第20天:Go的错误处理 目标 学习如何处理错误,以确保Go程序的健壮性和可维护性。 1. 错误处理的重要性 在开发中,错误处理至关重要。程序在运行时可能会出现各种问题,例如文件未找到、网络连接失败等。正确的错误处理能帮助我们…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...