ECS에서만 xray-sdk-go가 움직이지 않는 원인과 해결 방법
무엇을하고 싶었습니까?
어떤 느낌으로 만들었습니까?
main.go
package main
import (
"github.com/gin-gonic/gin"
apm "project/apm"
)
// GinRouter is router that API method router.
func main() {
router := gin.Default()
// helth check
router.GET("/helth", func(c *gin.Context) {
apm.TraceSeg(c, "/helth")
c.JSON(200, gin.H{
"message": "helth check ok",
})
})
// other URI
// ...
router.Run(":8080")
}
apm.go
package main
import (
"context"
"github.com/aws/aws-xray-sdk-go/xray"
_ "github.com/aws/aws-xray-sdk-go/plugins/ecs"
)
func TraceSeg(c context.Context, service string) (*context.Context) {
ctx, seg := xray.BeginSegment(c, service)
seg.Close(nil)
return &ctx
}
func TraceSubSeg(c context.Context, service string) (*context.Context) {
ctx, subSeg := xray.BeginSubsegment(c, service)
subSeg.Close(nil)
return &ctx
}
task_difinition
version: '2'
services:
api:
image: xxxxx:${CI_BUILD_REF}
mem_limit: xxxxMB
cpu_shares: xxxx
ports:
- "0:8080"
links:
- xray-daemon
environment:
AWS_REGION: xxxx
AWS_XRAY_DAEMON_ADDRESS: "xray-daemon:2000"
SERVICE: xxxxx
logging:
driver: "awslogs"
options:
awslogs-region: "ap-northeast-1"
awslogs-group: "xxxxx"
awslogs-create-group: "true"
xray-daemon:
image: amazon/aws-xray-daemon
hostname: xray-deamon
mem_limit: xxxxB
cpu_shares: xx
ports:
- "2000:2000/udp"
environment:
AWS_REGION: xxxxx
무슨 일이야?
ECS → 움직이지 않았다
[Trace] Beginning segment named /helth
[Trace] Closing segment named /helth
[Error] write udp 127.0.0.1:52419->127.0.0.1:2000: write: connection refused
※ ENV나 process에는 변수는 전달되고 있었다
# EC2で動いているdocker processに変数が渡されているかの確認
[ec2-user@ip-172-28-22-74 ~]$ sudo sed "s/\x0/\n/g" /proc/5351/environ
~
AWS_XRAY_DAEMON_ADDRESS=xray-daemon:2000
~
# run している containerから変数は見れるか
root@559381b52506:/# env
GOLANG_VERSION=1.12.1
~
AWS_XRAY_DAEMON_ADDRESS=xray-daemon:2000
~
왜 움직이지 않니?
AWS에 문의하면 AWS X-Ray SDK for Go의 1.0.0-rc.8 이전 버전에서도 유사한 이벤트가 발생할 수 있습니다.
확인해보기
mod를 이용하여 버전 관리하고 있으므로, mod의 내용을 보자
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v0.9.4
→ 「v0.9.4」를 이용하고 있다
go get -u로 버전 업 해 보자.
$ go clean -cache
$ go get -u github.com/aws/aws-xray-sdk-go
↓
$ go build
$ grep xray go.mod
github.com/aws/aws-xray-sdk-go v0.9.4
→ 변하지 않는다 ...
git commit 확인
$ cd $GOPATH/src/github.com/aws/aws-xray-sdk-go
$ git log -1
commit 5ffa743a8b8db87a9d4449c2f63fe95a4a53a8c5 (HEAD -> master, origin/master, origin/HEAD)
Author: Christopher Radek <[email protected]>
Date: Tue Apr 9 13:59:20 2019 -0700
upkeep: adds -race to travis test scripts (#104)
→ 일치했다. 라고 하는 것은 최신 버젼은 잡혀 있을 것.
왜 mod에서 "1.0.0-rc.x"가 지정되지 않는가?
A. 사소한 버전이기 때문에
마이너 버전을 이용하는 경우는 직접 mod를 편집해 줄 필요가 있는 모양
[before]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v0.9.4
[after]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
# こんな感じに動く
$ go build
go: finding github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: finding github.com/aws/aws-sdk-go v1.17.12
go: finding github.com/stretchr/testify v1.1.4
go: finding github.com/davecgh/go-spew v0.0.0-20160907170601-6d212800a42e
go: finding github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0
go: finding github.com/DATA-DOG/go-sqlmock v1.2.0
go: finding golang.org/x/text v0.0.0-20190306152657-5d731a35f486
go: finding golang.org/x/net v0.0.0-20190301231341-16b79f2e4e95
go: finding golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e
go: downloading github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: extracting github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
요약
mod를 이용하여 버전 관리하고 있으므로, mod의 내용을 보자
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v0.9.4
→ 「v0.9.4」를 이용하고 있다
go get -u로 버전 업 해 보자.
$ go clean -cache
$ go get -u github.com/aws/aws-xray-sdk-go
↓
$ go build
$ grep xray go.mod
github.com/aws/aws-xray-sdk-go v0.9.4
→ 변하지 않는다 ...
git commit 확인
$ cd $GOPATH/src/github.com/aws/aws-xray-sdk-go
$ git log -1
commit 5ffa743a8b8db87a9d4449c2f63fe95a4a53a8c5 (HEAD -> master, origin/master, origin/HEAD)
Author: Christopher Radek <[email protected]>
Date: Tue Apr 9 13:59:20 2019 -0700
upkeep: adds -race to travis test scripts (#104)
→ 일치했다. 라고 하는 것은 최신 버젼은 잡혀 있을 것.
왜 mod에서 "1.0.0-rc.x"가 지정되지 않는가?
A. 사소한 버전이기 때문에
마이너 버전을 이용하는 경우는 직접 mod를 편집해 줄 필요가 있는 모양
[before]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v0.9.4
[after]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
# こんな感じに動く
$ go build
go: finding github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: finding github.com/aws/aws-sdk-go v1.17.12
go: finding github.com/stretchr/testify v1.1.4
go: finding github.com/davecgh/go-spew v0.0.0-20160907170601-6d212800a42e
go: finding github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0
go: finding github.com/DATA-DOG/go-sqlmock v1.2.0
go: finding golang.org/x/text v0.0.0-20190306152657-5d731a35f486
go: finding golang.org/x/net v0.0.0-20190301231341-16b79f2e4e95
go: finding golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e
go: downloading github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: extracting github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
요약
[before]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v0.9.4
[after]
$ cat go.mod | grep xray
github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
# こんな感じに動く
$ go build
go: finding github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: finding github.com/aws/aws-sdk-go v1.17.12
go: finding github.com/stretchr/testify v1.1.4
go: finding github.com/davecgh/go-spew v0.0.0-20160907170601-6d212800a42e
go: finding github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0
go: finding github.com/DATA-DOG/go-sqlmock v1.2.0
go: finding golang.org/x/text v0.0.0-20190306152657-5d731a35f486
go: finding golang.org/x/net v0.0.0-20190301231341-16b79f2e4e95
go: finding golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e
go: downloading github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
go: extracting github.com/aws/aws-xray-sdk-go v1.0.0-rc.11
Reference
이 문제에 관하여(ECS에서만 xray-sdk-go가 움직이지 않는 원인과 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/i-dach/items/06735172e82387614929텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)