golang elasticsearch 通用日志系统

该博客介绍日志系统,将现有mysql存储改为elasticsearch存储并优化字段。阐述日志主要内容,给出设计原理图和时序图,说明需重写的接口及新日志系统数据格式,还介绍业务逻辑接口、代码调用及日志搜索等,以接口解耦实现数据分流。

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

代码传送门

  • 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、新日志系统的数据格式说明:

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

在这里插入图片描述
以下归类列出数据列。

在这里插入图片描述

说明:

说明:

  1. trace_id : 用来追踪一个请求的全服务调用流向
  2. 应用/服务的唯一标识: 用来确定日志产生的应用服务器的唯一标识(可以细分)
  3. 业务项的唯一标识: 用来确定逻辑段的唯一标识,如orderid,sku,stokin_code 等
  4. 时间序列表: 用来记录日志的变化时间序,及日志创建的时间点
  5. 事件序列、描述: 具体描述一件事情;如打包调试信息,封箱错误信息,拆包裹业务信息
  6. 变化值序列: 描述事件内部的不同变化值
  7. 备注: 用于一些说明
  8. 预留字段: 用来扩展日志系统业务能力
  9. caller: 日志产生的当前文件名及行号等信息
  10. 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)

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

传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值