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嵌码示例

results matching ""

    No results matching ""