当前位置: 首页 > news >正文

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

在这里插入图片描述

前言

如题,基于阿里云服务(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支持,这使得集成和开发过程更加便捷和高效。

通过这种架构,我们不仅能够确保文件上传的安全性和便捷性,还能有效控制和管理访问权限,从而保护用户数据和系统资源。
在这里插入图片描述
时序图如下所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d5f8abb03af1441697d00ccce8e0c17e.png
当前方案中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. 错误处理的重要性 在开发中,错误处理至关重要。程序在运行时可能会出现各种问题,例如文件未找到、网络连接失败等。正确的错误处理能帮助我们…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...