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

代码传送门

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

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

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

说明:

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

6、golang elasticsearch 查询封装:

  • 初始化
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import (
	"github.com/xxjwxc/esLog/view/es"
)
	client,_ := New(WithIndexName("test_log"), WithAddrs("http://192.168.198.17:9200/"))
	//精确搜索
	term := make(map[string]interface{})
	term["topic"] = "topic"
	term["etype"] = oplogger.EOpType_EOpGunbuster
	term["user_name"] = "username"
	term["ekey"] = "iddd-1"
	term["elevel"] = oplogger.ELogLevel_EOperate
	//模糊匹配
	match := make(map[string]interface{})
	match["desc"] = "desc"
	match["attach"] = "attach"

	// 时间范围
	timeCase := make(map[string]CaseSection)
	timeCase["creat_time"] = CaseSection{
		Min: time.Now().AddDate(0, 0, -1),
		Max: time.Now(),
	}

	//构造搜索器
	var que EsQuery
	que.OnPages(0, 10).OnTerm(term).OnMatch(match).OnRangeTime(timeCase)

	// 答应查询字符串 
	data1, _ := json.Marshal(que.OnSource())
	fmt.Println(string(data1))

	// 查询结果
	client, _ := New(WithIndexName(Index), WithAddrs(url))
	var eslog []ESLog
	client.WithOption(WithIndexName(Index), WithTypeName(Index)).Search(que.OnSource(), func(e []byte) error {
		var tmp ESLog
		json.Unmarshal(e, &tmp)
		eslog = append(eslog, tmp)
		return nil
	})

	fmt.Println(eslog)// 答应结果

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

日志写入调用:

1
2
//批量添加
client.BulkAdd(list)

日志写入调用:

1
2
//批量添加
client.Add(info)

日志搜索:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

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


// tools 搜索
eslist := tools.Search(term, match, timeCase, req.Page, req.Limit)

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

传送门

设计思想