go get 下载源码:
go get github.com/TingYunAPM/go
import "github.com/TingYunAPM/go"
Go探针使用json文件获取配置信息,在main函数开始处初始化探针。
func main() {
//初始化tingyun: 应用名称、账号等在tingyun.json中配置
tingyun.AppInit("tingyun.json")
defer tingyun.AppStop()
//原有业务逻辑
... }
Action说明 应用性能分解过程中,我们使用Action定义一个完整事务,通常它对应的是一个完整的HTTP请求过程。
代码
action, _ := tingyun.CreateAction("URI", "/index")
defer action.Finish()
Component说明 一个事务通常会包含多个子过程,子过程还可能由其他子过程组成。我们将这样的子过程定义为Component,通过对 Component树的耗时分析来定位事务执行过程中的性能瓶颈。
从Action创建Component
component_mysub := action.CreateComponent("my_submethod")
创建一个数据库的Component:
mytable_select := action.CreateDBComponent(tingyun.ComponentMysql, "", "mydatabase", "mytable", "select", "database_method")
创建一个外部调用(RPC、HTTP等)的Component:
external := action.CreateExternalComponent("http://tingyun.com/", "rpc_method")
从Component创建Component
component_next := component_mysub.CreateComponent("my_nextsub")
子过程结束时,需要调用对应的Component.Finish(),才能达到采集数据的目的。
package main
import (
"io"
"net/http"
"github.com/TingYunAPM/go"
)
func handler(w http.ResponseWriter, r *http.Request) {
action, _ := tingyun.CreateAction("URI", r.URL.Path)
defer action.Finish()
header := w.Header()
headerComponent := action.CreateComponent("header")
header.Set("Cache-Control", "no-cache")
header.Set("Access-Control-Allow-Origin", "*")
header.Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusOK)
action.SetStatusCode(uint16(http.StatusOK))
headerComponent.Finish()
bodyComponent := action.CreateComponent("body")
io.WriteString(w, "helloworld.")
bodyComponent.Finish()
}
func main() {
tingyun.AppInit("tingyun.json")
defer tingyun.AppStop()
http.HandleFunc("/pf", handler)
http.ListenAndServe(":8000", nil)
}