Yet Another AWS X-Ray SDK for Go
The Yet Another AWS X-Ray SDK for Go is compatible with Go 1.18 and above.
- implement ECS plugin
- implement EKS plugin
- implement beanstalk plugin
-
AWS_XRAY_DAEMON_ADDRESS
: Set the host and port of the X-Ray daemon listener. By default, the SDK uses127.0.0.1:2000
for both trace data (UDP) and sampling (TCP). -
AWS_XRAY_CONTEXT_MISSING
:LOG_ERROR
orRUNTIME_ERROR
. The default value isLOG_ERROR
. -
AWS_XRAY_TRACING_NAME
: Set a service name that the SDK uses for segments. -
AWS_XRAY_DEBUG_MODE
: Set toTRUE
to configure the SDK to output logs to the console -
AWS_XRAY_LOG_LEVEL
: Set a log level for the SDK built in logger. it should bedebug
,info
,warn
,error
orsilent
. This value is ignored ifAWS_XRAY_DEBUG_MODE
is set. -
AWS_XRAY_SDK_ENABLED
: Disabling the SDK. It is parsed bystrconv.ParseBool
that accepts1
,t
,T
,TRUE
,true
,True
,0
,f
,F
,FALSE
,false
,False
. The default value istrue
. -
AWS_EC2_METADATA_DISABLED
: Disabling the EC2 metadata plugin. It acceptstrue
orfalse
. -
AWS_EC2_METADATA_SERVICE_ENDPOINT
: The endpoint of the metadata service. -
AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE
: The IP version to access the metadata service.IPv4
orIPv6
. -
AWS_METADATA_SERVICE_TIMEOUT
: the number of seconds before timing out when attempting to retrieve data from the instance metadata service. The default is 1 second. -
AWS_METADATA_SERVICE_NUM_ATTEMPTS
: the number of total attempts to make before giving up when attempting to retrieve data from the instance metadata service. The default is 1.
These configure overwrites the environment configure.
// configure the daemon address and the context missing strategy.
xray.Configure(&xray.Config{
DaemonAddress: "127.0.0.1:2000",
ContextMissingStrategy: &ctxmissing.RuntimeErrorStrategy{},
})
// configure the default logger.
xraylog.SetLogger(NewDefaultLogger(os.Stderr, xraylog.LogLevelDebug))
import (
"github.com/shogo82148/aws-xray-yasdk-go/xray"
)
func DoSomethingWithSegment(ctx context.Context) error {
ctx, seg := xray.BeginSegment(ctx, "service-name")
defer seg.Close()
ctx, sub := xray.BeginSubsegment(ctx, "subsegment-name")
defer sub.Close()
err := doSomething(ctx)
if sub.AddError(err) { // AddError returns the result of err != nil
return err
}
return nil
}
import (
"fmt"
"net/http"
"github.com/shogo82148/aws-xray-yasdk-go/xrayhttp"
)
func main() {
namer := xrayhttp.FixedTracingNamer("myApp")
h := xrayhttp.Handler(namer, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World!")
}))
http.ListenAndServe(":8000", h)
}
import (
"io"
"net/http"
"github.com/shogo82148/aws-xray-yasdk-go/xrayhttp"
)
func getExample(ctx context.Context) ([]byte, error) {
client := xrayhttp.Client(nil)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://example.com", nil)
if seg.AddError(err) {
panic(err)
}
resp, err := client.Do(req)
if seg.AddError(err) {
panic(err)
}
defer resp.Body.Close()
}
import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/shogo82148/aws-xray-yasdk-go/xrayaws"
)
func listTables() {
sess := session.Must(session.NewSession())
dynamo := dynamodb.New(sess)
xrayaws.Client(dynamo.Client)
dynamo.ListTablesWithContext(ctx, &dynamodb.ListTablesInput{})
}
import (
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
"github.com/shogo82148/aws-xray-yasdk-go/xrayaws-v2"
)
cfg, err := config.LoadDefaultConfig(ctx, xrayaws.WithXRay())
if err != nil {
panic(err)
}
dynamo := dynamodb.NewFromConfig(cfg)
dynamo.ListTables(ctx, &dynamodb.ListTablesInput{})
import (
"github.com/shogo82148/aws-xray-yasdk-go/xraysql"
)
func main() {
db, err := xraysql.Open("postgres", "postgres://user:password@host:port/db")
row, err := db.QueryRowContext(ctx, "SELECT 1")
}
- AWS X-Ray
- Official AWS X-Ray SDK for Go