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