Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shogo82148/aws-xray-yasdk-go
Yet Another AWS X-Ray SDK for Go
https://github.com/shogo82148/aws-xray-yasdk-go
aws aws-xray go
Last synced: 7 days ago
JSON representation
Yet Another AWS X-Ray SDK for Go
- Host: GitHub
- URL: https://github.com/shogo82148/aws-xray-yasdk-go
- Owner: shogo82148
- License: mit
- Created: 2020-02-23T04:04:19.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-05-17T03:30:18.000Z (6 months ago)
- Last Synced: 2024-05-20T15:12:37.098Z (6 months ago)
- Topics: aws, aws-xray, go
- Language: Go
- Homepage:
- Size: 1.4 MB
- Stars: 7
- Watchers: 4
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-golang-repositories - aws-xray-yasdk-go - Ray SDK for Go (Repositories)
README
![Test](https://github.com/shogo82148/aws-xray-yasdk-go/workflows/Test/badge.svg)
[![PkgGoDev](https://pkg.go.dev/badge/github.com/shogo82148/aws-xray-yasdk-go)](https://pkg.go.dev/github.com/shogo82148/aws-xray-yasdk-go)# aws-xray-yasdk-go
Yet Another [AWS X-Ray](https://aws.amazon.com/xray/) SDK for Go
The Yet Another AWS X-Ray SDK for Go is compatible with Go 1.18 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`](https://golang.org/pkg/strconv/#ParseBool) that accepts `1`, `t`, `T`, `TRUE`, `true`, `True`, `0`, `f`, `F`, `FALSE`, `false`, `False`. The default value is `true`.- `AWS_EC2_METADATA_DISABLED`: Disabling the EC2 metadata plugin. It accepts `true` or `false`.
- `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` or `IPv6`.
- `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.### Code
These configure overwrites the environment configure.
```go
// 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
```go
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
```go
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
```go
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()
}
```### AWS SDK
```go
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
```go
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
```go
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
- [AWS X-Ray](https://aws.amazon.com/xray/)
- Official [AWS X-Ray SDK for Go](https://github.com/aws/aws-xray-sdk-go)