github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/catgo/README.md (about) 1 # Catgo CAT 客户端集成 2 3 在 tools 的 **v1.2.0-paystd** 开始集成cat 的客户端,基于 github.com/Meituan-Dianping/cat-go 修改封装 4 5 Transaction 6 7 * transaction适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控 8 * 某些运行期单元要花费一定时间完成工作, 内部需要其他处理逻辑协助, 我们定义为Transaction. 9 * Transaction可以嵌套(如http请求过程中嵌套了sql处理). 10 * 大部分的Transaction可能会失败, 因此需要一个结果状态码. 11 * 如果Transaction开始和结束之间没有其他消息产生, 那它就是Atomic Transaction(合并了起始标记). 12 13 Event 14 15 Event用来记录次数,表名单位时间内消息发生次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小 16 17 Metric 18 一共有三个API,分别用来记录次数、平均、总和,统一粒度为一分钟 19 20 * logMetricForCount用于记录一个指标值出现的次数 21 * logMetricForDuration用于记录一个指标出现的平均值 22 * logMetricForSum用于记录一个指标出现的总和 23 24 25 Heartbeat 26 这个是系统CAT客户端使用,应用程序不使用此API. 27 Heartbeta表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等。 28 29 ## 使用方式 30 31 32 ### 配置 33 34 |||| 35 |:---:|:---:|:----:| 36 |Domain|域|g7pay| 37 |Debug|是否输出debug 日志| true| 38 |HttpServers|接入服务器信息|| 39 40 ### 初始化 41 42 ``` 43 (&Catgo{}).Init() 44 ``` 45 46 在tools 中只需要配置在 config 中,默认会调用 Init 初始化 47 48 ### api 49 50 **首先先确认cat 的引用** 51 52 ``` 53 import "git.chinawayltd.com/golib/tools/catgo/cat-go/cat" 54 ``` 55 56 示例 57 58 ``` 59 // send transaction 60 func case1() { 61 t := cat.NewTransaction(TestType, "test") 62 defer t.Complete() 63 64 if rand.Int31n(100) == 0 { 65 t.SetStatus(cat.FAIL) 66 } 67 68 t.AddData("foo", "bar") 69 70 t.NewEvent(TestType, "event-1") 71 t.Complete() 72 73 if rand.Int31n(100) == 0 { 74 t.LogEvent(TestType, "event-2", cat.FAIL) 75 } else { 76 t.LogEvent(TestType, "event-2") 77 } 78 t.LogEvent(TestType, "event-3", cat.SUCCESS, "k=v") 79 80 t.SetDurationStart(time.Now().Add(-5 * time.Second)) 81 t.SetTime(time.Now().Add(-5 * time.Second)) 82 t.SetDuration(time.Millisecond * 500) 83 } 84 85 // send completed transaction with duration 86 func case2() { 87 cat.NewCompletedTransactionWithDuration(TestType, "completed", time.Second*24) 88 cat.NewCompletedTransactionWithDuration(TestType, "completed-over-60s", time.Second*65) 89 } 90 91 // send event 92 func case3() { 93 // way 1 94 e := cat.NewEvent(TestType, "event-4") 95 e.Complete() 96 // way 2 97 98 if rand.Int31n(100) == 0 { 99 cat.LogEvent(TestType, "event-5", cat.FAIL) 100 } else { 101 cat.LogEvent(TestType, "event-5") 102 } 103 cat.LogEvent(TestType, "event-6", cat.SUCCESS, "foobar") 104 } 105 106 // send error with backtrace 107 func case4() { 108 if rand.Int31n(100) == 0 { 109 err := errors.New("error") 110 cat.LogError(err) 111 } 112 } 113 114 // send metric 115 func case5() { 116 cat.LogMetricForCount("metric-1") 117 cat.LogMetricForCount("metric-2", 3) 118 cat.LogMetricForDuration("metric-3", 150*time.Millisecond) 119 cat.NewMetricHelper("metric-4").Count(7) 120 cat.NewMetricHelper("metric-5").Duration(time.Second) 121 } 122 123 ``` 124 125 126 ## 测试环境 127 128 Http服务地址: test.dubhe.chinawayltd.com:2280 129 130 查看地址: http://test.dubhe.chinawayltd.com/cat/r/t?domain=g7pay&ip=All&reportType=day&op=view