云端日志服务——UPLOG的实现

724

前言

本文源于我在开发和管理众多项目时遇到的统一问题和因此萌生出来的想法,那就是无论采用什么开发框架和架构,对于系统日志的处理都是必须且繁杂的工作

首先,在开发调试时,无论以控制台输出日志内容,或者是以导出文件流输出日志内容,都是较为分散精力的工作;其次,日志的管理也是尝尝令人烦恼的问题,比如日志的存储,日志的查询,日志的分类等等

对于大部分中小型系统而言,如果要包含一个功能强大的日志系统,显然是不现实的。尤其个人项目,所以我搜索寻找想知道是否有公开易用的日志管理服务,但是很遗憾的是我并没有找到这样的云服务

所以,这也就导致了实现一个云端日志服务的想法,目的很简单,个人开发者们只需通过RESTful网络接口上传日志,然后通过统一的可视化控制台管理查看日志即可,截止本文发布,该日志服务已经实现,有兴趣的可以看一下【云端日志服务UPLOG】

思路

作为日志服务,总体分为上传和查看两大部分

1、对于日志的上传,最通用简单的方案就是采用RESTful标准的网络接口。这样开发者们可以选择异步或者同步地通过网络上传日志流

2、对于日志的查看,最好是能够提供可视化的查询系统,可以按照日期和日志的字段属性进行排序分类,这样已然可以满足大部分中小型系统的日志管理需求

设计

1、上传

一个通用的云端日志服务,应该可以提供不同用户使用,所以日志的存储核心是根据用户分区,且对于日志,除了分区存储,按照时间排序也是十分关键。于此同时,上传接口要尽可能的简单和满足数据安全性 所以,最终UPLOG云日志服务的上传接口设计如下:

POST https://dl57vasdud645.cloudfront.net/uplog
BODY {"sid":"服务标识","log":"日志内容", ...}

该接口采用application/json的请求,其中【sid】是由平台提供的服务标识,【log】为必须的日志内容,其余可拓展任意字段

2、查询

日志系统存储数据量十分巨大,但是对查询时间也十分敏感,开发者们能够越快查询到日志内容,对于开发效率的提升明显。关于这一点,是我长时间使用AWS的CloudWatch之后的体会,亚马逊云提供的云日志服务访问性能和查询便捷性都很差,体验不好

所以在UPLOG云日志服务的查询设计上,我希望能尽可能简单和高效,最终实现效果是如下图所示(未来还会继续功能增强和展示美化)

UPLOG云日志服务查询演示.png

架构

这一个云日志服务,我不希望它很重,相反,我希望它很轻,但是需要有强大的吞吐能力和拓展性,最终我选择了采用 以 nodejs 中间件组件为核心开发 的后端架构

1、采用nodejs作为核心开发语言,开发框架为【up-koa】,利用koa的中间件复用提升开发效率和速度,以及利用nodejs高异步能力进行计算处理 2、采用up部署服务,依托与AWS的Lambda平台,实现无服务架构 3、采用dynamodb作为数据库存储,这是一个无服务架构的NOSQL数据库,特点自适应数据量吞吐拓展

后记

UPLOG云日志服务,我最终花费了一个周末完成,并且将其纳入【UPServer云应用开发平台】中,UPServer官网预览如下

UPServer官网.png

另外,需要说明的是可能很多人都担忧日志存储的私密性和数据安全性,这的确是一个值得考量问题,不过对于UPLOG而言,日志的上传内容是由开发者自己决定的,虽然UPLOG做了数据加密,但是依然没有办法对数据的绝对100%安全私密保证,毕竟这只是个人的兴趣项目。只是觉得应该有这么个东西,能够更让开发者更专注于核心业务逻辑。而且我更希望类似AWS和阿里云等这样的大型云平台在未来也能够推出这样的应用组件级的云服务,我所设想的未来云架构,开发者们只要像搭积木一样,把各种云服务自由组合,甚至不需要编写任意一行代码,就能完成一个灵活可拓展的业务系统应用(这也是UPServer的设想和理念)

感谢你的阅读,希望本文能够给你带来帮助:)

作者:CheneyXu

邮箱:457299596@qq.com

关于:UPServer官网