Golang Agent 0.1.7

2022-01-04

베타

업데이트

database/sql 라이브러리를 지원합니다.

database/sql 패키지의 sql.Open 함수 대신 whatapsql.OpenContext 함수를 사용합니다. PrepareContext, QueryContext, ExecContext 등 context를 전달하는 함수를 사용하기를 권장합니다.

전달하는 context는 trace.Start()를 통해서 whatap TraceCtx 정보가 있어야합니다.

설치 안내
import (
    _ "github.com/go-sql-driver/mysql"
	"github.com/whatap/go-api/instrumentation/database/sql/whatapsql"
)


func main() {
    config := make(map[string]string)
    trace.Init(config)
    defer trace.Shutdown()

    // whataphttp.Func 내부에서 whatap TraceCtx를 생성합니다.
    http.HandleFunc("/query", whataphttp.Func(func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context()

        // Use WhaTap Driver. whatap의 TraceCtx가 있는 context 를 전달합니다.
        db, err := whatapsql.OpenContext(ctx, "mysql", dataSource)
    	if err != nil {
    		fmt.Println("Error whatapsql.Open ", err)
    		return
    	}
    	defer db.Close()

	    ...
	    query := "select id, subject from tbl_faq limit 10"

	    // whatap TraceCtx가 있는 context 를 전달합니다.
	    if rows, err := db.QueryContext(ctx, query); err == nil {
		    ...
		}
	}

	...
}
설정
go.sql_profile_enabled

Default : true
Type : boolean
database/sql 정보 수집여부를 설정합니다.

github.com/go-gonic/gin 라이브러리를 지원합니다.

설치 안내
import (
    "github.com/go-gonic/gin"

    "github.com/whatap/go-api/trace"
    "github.com/whatap/go-api/instrumentation/github.com/go-gonic/gin/whatapgin"
)


func main() {
    config := make(map[string]string)
    trace.Init(config)
    defer trace.Shutdown()

    r := gin.Default()

    // Set the whatap
    r.Use(whatapgin.Middleware())

    r.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "ok",
        })
    })
}

github.com/gorilla/mux 라이브러리를 지원합니다.

설치 안내
import (
    "github.com/gorilla/mux"

    "github.com/whatap/go-api/trace"
    "github.com/whatap/go-api/instrumentation/github.com/gorilla/mux/whatapmux"
)


func main() {

    config := make(map[string]string)
    trace.Init(config)
    defer trace.Shutdown()

    r := mux.NewRouter()

    // Set the whatap
    r.Use(whatapmux.Middleware())

    r.HandleFunc("/index", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Add("Content-Type", "text/html")
        reply := "/index <br/>Test Body"
        _, _ = w.Write(([]byte)(reply))
        fmt.Println("Response -", r.Response)
    }
}

github.com/labstack/echo 라이브러리를 지원합니다.

설치 안내
import (
    "github.com/labstack/echo"

    "github.com/whatap/go-api/trace"
    "github.com/whatap/go-api/instrumentation/github.com/labstack/echo/whatapecho"
)


func main() {

    config := make(map[string]string)
    trace.Init(config)
    defer trace.Shutdown()

    ...

    e := echo.New()

    // Set the whatap
    e.Use(whatapecho.Middleware())

    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!\n")
    })
}