golang elasticsearch 通用日志系统

    xiaoxiao2023-11-18  163

    #日志系统说明 先来传送门:

    代码传送门

    1、日志主要说明:谁在什么时间,在什么地方,做了什么事情,产生了什么影响,影响的变化因子。

    2、日志系统主要建设在oplogger基础上。将现有的mysql存储方式改成elasticsearch的存储方式。并且更新了现有字段,使其更优化

    3、以下为主要设计原理图:

    以下为时序图:

    4、需要重写的接口如下: //! 本地物流服务 service Logger { rpc Operate(Operation) returns (common.Empty); //MultiOperate 批量插入操作日志 rpc MultiOperate(Operations) returns (common.Empty); rpc SearchLog(SearchLogReq) returns (SearchLogResp); }

    说明:为了兼容性,不修改接口调用参数及返回值内容。只修改内部实现细节。

    5、新日志系统的数据格式说明:

    根据日志基本形态结合实际需求,列出一下思维导图

    以下归类列出数据列。

    说明:

    说明:

    trace_id : 用来追踪一个请求的全服务调用流向应用/服务的唯一标识: 用来确定日志产生的应用服务器的唯一标识(可以细分)业务项的唯一标识: 用来确定逻辑段的唯一标识,如orderid,sku,stokin_code 等时间序列表: 用来记录日志的变化时间序,及日志创建的时间点事件序列、描述: 具体描述一件事情;如打包调试信息,封箱错误信息,拆包裹业务信息变化值序列: 描述事件内部的不同变化值备注: 用于一些说明预留字段: 用来扩展日志系统业务能力caller: 日志产生的当前文件名及行号等信息user_id,user_name :添加操作人记录 6、业务逻辑接口说明 采用接口,或者插件的形式引入具体业务逻辑中。 以下为接口实现及逻辑:

    6、逻辑及代码调用说明:

    业务逻辑调用:

    //------ 日志记录 ------ var oploger logerlogic.OpLogerTuple //创建一个三元组日志类型 for _, v := range list {//添加多个日志 oploger.AddOne(oplogger.EOpType_EOpSTokin,"service", username, sku,"操作补拍", "", oplogger.ELogLevel_EOperate) } //发送日志 logerlogic.OnAddLogOplogger(ctx, &oploger)

    6、逻辑及代码调用说明:

    日志写入调用:

    eslist := tools.ConvertRe2ESLog(req.Info) for _, v := range eslist { tmp = append(tmp, v) } //批量添加 b := es.GetClient().BulkAdd(config.Config.ElasticSearch.Index, config.Config.ElasticSearch.Index, "", tmp)

    日志写入调用:

    eslist := tools.ConvertRe2ESLog(req.Info) for _, v := range eslist { tmp = append(tmp, v) } //批量添加 b := es.GetClient().BulkAdd(config.Config.ElasticSearch.Index, config.Config.ElasticSearch.Index, "", tmp)

    日志搜索:

    //精确搜索 term := make(map[string]interface{}) ... //模糊匹配 match := make(map[string]interface{}) ... //时间段搜索 timeCase := make(map[string]es.CaseSection) ... eslist := tools.Search(term, match, timeCase, req.Page, req.Limit)

    说明:以接口解耦,具体业务根据不同需求实现接口实现。主要用来对数据分流。

    传送门

    最新回复(0)