aws-xray-yasdk-go

module
v1.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 23, 2022 License: MIT

README

Test PkgGoDev

aws-xray-yasdk-go

Yet Another AWS X-Ray SDK for Go

The Yet Another AWS X-Ray SDK for Go is compatible with Go 1.13 and above.

TODO

  • implement ECS plugin
  • implement EKS plugin
  • implement beanstalk plugin

Configuration

Environment Values
  • AWS_XRAY_DAEMON_ADDRESS: Set the host and port of the X-Ray daemon listener. By default, the SDK uses 127.0.0.1:2000 for both trace data (UDP) and sampling (TCP).
  • AWS_XRAY_CONTEXT_MISSING: LOG_ERROR or RUNTIME_ERROR. The default value is LOG_ERROR.
  • AWS_XRAY_TRACING_NAME: Set a service name that the SDK uses for segments.
  • AWS_XRAY_DEBUG_MODE: Set to TRUE 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 be debug, info, warn, error or silent. This value is ignored if AWS_XRAY_DEBUG_MODE is set.
  • AWS_XRAY_SDK_ENABLED: Disabling the SDK. It is parsed by strconv.ParseBool that accepts 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False. The default value is true.
Code

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))

Quick Start

Start a custom segment/subsegment
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
}
HTTP Server
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)
}
HTTP Client
import (
  "io"
  "net/http"

  "github.com/shogo82148/aws-xray-yasdk-go/xrayhttp"
)

func getExample(ctx context.Context) ([]byte, error) {
  req, err := http.NewRequest(http.MethodGet, "http://example.com")
  if err != nil {
    return nil, err
  }
  req = req.WithContext(ctx)

  client = xrayhttp.Client(nil)
  resp, err := client.Do(req)
  if err != nil {
      return nil, err
  }
  defer resp.Body.Close()
  return io.ReadAll(resp.Body)
}
AWS SDK
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{})
}
AWS SDK v2
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{})
SQL
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")
}

See Also

Directories

Path Synopsis
plugins
cwlogs
Package cwlogs provides a plugin for Amazon CloudWatch Logs.
Package cwlogs provides a plugin for Amazon CloudWatch Logs.
ec2
Package ec2 provides a plugin for Amazon Elastic Compute Cloud.
Package ec2 provides a plugin for Amazon Elastic Compute Cloud.
ecs
eks
schema
Package schema is a utils for generating AWS X-Ray Segment Documents.
Package schema is a utils for generating AWS X-Ray Segment Documents.
xraylog
Package xraylog implements a logger with a log level, and an interface for a custom logger.
Package xraylog implements a logger with a log level, and an interface for a custom logger.
xrayaws module
xrayaws-v2 module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL