Go 探针
安装Go 探针
使用UniAgent Linux版
当服务器上存在多种语言的应用时,推荐使用UniAgent安装,安装步骤请参见UniAgent Linux部署说明。
UniAgent安装完毕后,在应用启动脚本内增加/opt/tingyun-oneagent/agent/go_current/bin/agentinject
,重启应用即可。
例如,原Go应用启动脚本如下:
/opt/go-app/go-demo
更改后的应用启动脚本如下:
...
/opt/tingyun-oneagent/agent/go_current/bin/agentinject /opt/go-app/go-demo
使用UniAgent Kubernetes版
当使用Kubernetes或Openshift云平台时,安装步骤请参见UniAgent Kubernetes部署说明。
注意:目前仅适用于启动命令为Go应用路径的Pod
给deployment/daemonset/statefuset打label,将tingyun-go-injected设置为true。配置如下:
apiVersion: apps/v1 kind: Deployment metadata: name: demo1 namespace: default spec: selector: matchLabels: app: demo1 template: metadata: labels: tingyun-go-injected: enabled spec: containers: - name: demo1
同时至少增大Pod的内存资源 100M
使用独立探针
下载Go独立探针,安装完毕后,在应用启动脚本内增加/安装路径/bin/agentinject
,重启应用即可。
例如,原Go应用启动脚本如下:
/opt/go-app/go-demo
更改后的应用启动脚本如下:
...
/opt/tingyun-go-v1.0/bin/agentinject /opt/go-app/go-demo
Go SDK 嵌码
安装Go SDK
Go SDK与所有第三方模块的安装方式相同。
GOPATH模式下安装:
$ go get github.com/TingYunGo/goagent
GOMOD模式下安装:
在应用文件夹下执行:
$ go mod tidy
使用SDK嵌码
根据应用使用HTTP框架的不同,需要import不同的路径。
我们以一个使用内置HTTP框架的简单例子说明如何嵌码。
源文件: main.go
代码如下:
package main
import (
"encoding/json"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
header := w.Header()
header.Set("Cache-Control", "no-cache")
header.Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
b, _ := json.Marshal(map[string]interface{}{
"status": "success",
"URI": r.URL.RawQuery,
})
w.Write(b)
})
http.ListenAndServe(":3000", nil)
}
要对如上这个应用嵌码,在源文件同级目录下,创建tingyun.go文件,内容如下:
package main
import (
_ "github.com/TingYunGo/goagent"
)
至此,全部嵌码工作已完成。
嵌码说明:此例应用使用了内置HTTP框架,对于内置HTTP框架,需要引入github.com/TingYunGo/goagent。
如果您不确定嵌码要使用哪个/哪些 import 模块路径,可通过查看支持列表了解引用依赖。
获取当前应用的依赖模块:
GOMOD 方式:查看go.mod文件,或者使用命令:
$ go mod graph
GOPATH 方式:编译时使用
-a
-v
参数:$ go build -a -v
嵌码示例
以开源项目 photoprism 为例,项目地址 https://github.com/photoprism/photoprism。
步骤1:克隆项目。
$ git clone https://github.com/photoprism/photoprism.git
步骤2:确定项目使用哪些框架和库。
进入项目文件夹,查看 go.mod文件。
$ cd photoprism $ cat go.mod
我们会看到,此项目使用了gin框架,数据库支持:
postgresql:(github.com/lib/pq) postgresql:(github.com/lib/pq) sqlite:(github.com/mattn/go-sqlite3)
步骤3:查询支持列表确定引用路径,添加源码。
查看框架支持列表,我们的嵌码操作需要引用两个路径:
github.com/TingYunGo/goagent/frameworks/gin github.com/TingYunGo/goagent/database
在代码目录 internal/photoprism下创建 tingyun.go文件,内容如下:
package photoprism import ( _ "github.com/TingYunGo/goagent/database" _ "github.com/TingYunGo/goagent/frameworks/gin" )
步骤4:在项目go.mod所在目录下执行
go mod tidy
命令,然后编译。$ go mod tidy $ make
以上4个步骤完成后,项目编译和SDK嵌码工作就已全部完成。更多SDK嵌码示例,请参见使用Go SDK嵌码示例。