#日志系统说明
先来传送门:
代码传送门
-
1、日志主要说明:谁在什么时间,在什么地方,做了什么事情,产生了什么影响,影响的变化因子。
-
2、日志系统主要建设在oplogger基础上。将现有的mysql存储方式改成elasticsearch的存储方式。并且更新了现有字段,使其更优化
-
3、以下为主要设计原理图:
说明:
- trace_id : 用来追踪一个请求的全服务调用流向
- 应用/服务的唯一标识: 用来确定日志产生的应用服务器的唯一标识(可以细分)
- 业务项的唯一标识: 用来确定逻辑段的唯一标识,如orderid,sku,stokin_code 等
- 时间序列表: 用来记录日志的变化时间序,及日志创建的时间点
- 事件序列、描述: 具体描述一件事情;如打包调试信息,封箱错误信息,拆包裹业务信息
- 变化值序列: 描述事件内部的不同变化值
- 备注: 用于一些说明
- 预留字段: 用来扩展日志系统业务能力
- caller: 日志产生的当前文件名及行号等信息
- 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)
|
说明:以接口解耦,具体业务根据不同需求实现接口实现。主要用来对数据分流。
传送门
设计思想