基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等

前言
如题,基于阿里云服务(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. 错误处理的重要性 在开发中,错误处理至关重要。程序在运行时可能会出现各种问题,例如文件未找到、网络连接失败等。正确的错误处理能帮助我们…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
使用ch340继电器完成随机断电测试
前言 如图所示是市面上常见的OTA压测继电器,通过ch340串口模块完成对继电器的分路控制,这里我编写了一个脚本方便对4路继电器的控制,可以设置开启时间,关闭时间,复位等功能 软件界面 在设备管理器查看串口号后&…...
(12)-Fiddler抓包-Fiddler设置IOS手机抓包
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求,比如 iPhone、iPad 和 MacBook 等苹…...
Gitlab + Jenkins 实现 CICD
CICD 是持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD)的缩写,是现代软件开发中的一种自动化流程实践。下面介绍 Web 项目如何在代码提交到 Gitlab 后,自动发布…...
