Go용 X-Ray SDK 구성
Configure
을 Config
객체와 함께 호출하거나 기본값을 가정하여 환경 변수를 통해 Go용 X-Ray SDK에 대한 구성을 지정할 수 있습니다. 환경 변수는 모든 기본값보다 우선하는 Config
값보다 우선합니다.
서비스 플러그인
plugins
을 사용하여 애플리케이션을 호스팅하는 서비스에 대한 정보를 기록할 수 있습니다.
플러그인
Amazon EC2 —
EC2Plugin
은 인스턴스 ID, 가용 영역 및 CloudWatch Logs 그룹을 추가합니다.Elastic Beanstalk –
ElasticBeanstalkPlugin
이 환경 이름, 버전 레이블 및 배포 ID를 추가합니다.Amazon ECS —
ECSPlugin
이 컨테이너 ID를 추가합니다.
플러그인을 사용하려면 다음 패키지 중 하나를 가져옵니다.
"github.com/aws/aws-xray-sdk-go/awsplugins/ec2"
"github.com/aws/aws-xray-sdk-go/awsplugins/ecs"
"github.com/aws/aws-xray-sdk-go/awsplugins/beanstalk"
각 플러그인에는 플러그인을 로드하는 명시적 Init()
함수 호출이 있습니다.
예 ec2.Init()
import (
"os"
"github.com/aws/aws-xray-sdk-go/awsplugins/ec2"
"github.com/aws/aws-xray-sdk-go/xray"
)
func init() {
// conditionally load plugin
if os.Getenv("ENVIRONMENT") == "production" {
ec2.Init()
}
xray.Configure(xray.Config{
ServiceVersion: "1.2.3",
})
}
SDK는 플러그인 설정을 사용하여 세그먼트에 origin
필드를 설정하기도 합니다. 이는 애플리케이션을 실행하는 AWS 리소스의 유형을 나타냅니다. 여러 플러그인을 사용하는 경우 SDK는 ElasticBeanstalk> EKS> ECS> EC2 순서로 확인하여 오리진을 결정합니다.
샘플링 규칙
SDK는 X-Ray 콘솔에서 정의하는 샘플링 규칙을 사용하여 기록할 요청을 결정합니다. 기본 규칙은 매초 첫 번째 요청을 추적하고, 모든 서비스에서 추가 요청의 5%를 X-Ray로 추적 전송합니다. X-Ray 콘솔에서 추가 규칙을 생성하여 각 애플리케이션에 대해 기록되는 데이터의 양을 사용자 지정합니다.
SDK는 사용자 지정 규칙을 정의된 순서대로 적용합니다. 요청이 여러 사용자 지정 규칙과 일치하는 경우 SDK는 첫 번째 규칙만 적용합니다.
참고
SDK가 샘플링 규칙을 가져오기 위해 X-Ray에 연결할 수 없는 경우, 매초 첫 번째 요청과 호스트당 추가 요청의 5%에 대한 기본 로컬 규칙으로 되돌아갑니다. 호스트가 샘플링 API를 직접 호출할 수 있는 권한이 없거나, X-Ray 대몬(daemon)에 연결할 수 없을 경우 이러한 상황이 발생할 수 있고 이 대몬(daemon)은 SDK에서 수행한 API 직접 호출에 대한 TCP 프록시 역할을 합니다.
JSON 문서에서 샘플링 규칙을 불러오도록 SDK를 구성할 수도 있습니다. SDK는 X-Ray 샘플링을 사용할 수 없을 경우 로컬 규칙을 백업으로 사용하거나, 로컬 규칙을 전용으로 사용할 수 있습니다.
예 sampling-rules.json
{
"version": 2,
"rules": [
{
"description": "Player moves.",
"host": "*",
"http_method": "*",
"url_path": "/api/move/*",
"fixed_target": 0,
"rate": 0.05
}
],
"default": {
"fixed_target": 1,
"rate": 0.1
}
}
이 예에서는 하나의 사용자 지정 규칙과 기본 규칙을 정의합니다. 사용자 지정 규칙은 최소 추적 요청 수 없이 5% 샘플링 비율을 /api/move/
아래 경로에 적용합니다. 기본 규칙은 매초 최초 요청과 추가 요청의 10%를 추적합니다.
로컬로 규칙의 정의할 때의 단점은 고정 대상이 X-Ray 서비스를 통해 관리되는 대신, 레코더의 각 인스턴스별로 독립적으로 적용된다는 것입니다. 호스트를 많이 배포할수록 고정 속도가 크게 증대하기 때문에 기록되는 데이터의 양을 제어하기가 어려워집니다.
AWS Lambda에서는 샘플링 속도를 수정할 수 없습니다. 구성된 서비스가 함수를 호출하는 경우 해당 서비스에서 샘플링한 요청을 생성한 호출이 Lambda에 의해 기록됩니다. 활성 추적이 활성화되고 트레이스 헤더가 없는 경우 Lambda에서 샘플링 결정을 내립니다.
백업 규칙을 제공하려면 NewCentralizedStrategyWithFilePath
를 사용하여 로컬 샘플링 JSON 파일을 가리킵니다.
예 main.go – 로컬 샘플링 규칙
s, _ := sampling.NewCentralizedStrategyWithFilePath("sampling.json") // path to local sampling json
xray.Configure(xray.Config{SamplingStrategy: s})
로컬 규칙만 사용하려면 NewLocalizedStrategyFromFilePath
를 사용하여 로컬 샘플링 JSON 파일을 가리킵니다.
예 main.go – 샘플링 비활성화
s, _ := sampling.NewLocalizedStrategyFromFilePath("sampling.json") // path to local sampling json
xray.Configure(xray.Config{SamplingStrategy: s})
로깅
참고
xray.Config{}
필드인 LogLevel
및 LogFormat
은 버전 1.0.0-rc.10부터 사용 중지됩니다.
X-Ray는 로깅을 위해 다음 인터페이스를 사용합니다. 기본 로거는 LogLevelInfo
이상에서 stdout
에 씁니다.
type Logger interface {
Log(level LogLevel, msg fmt.Stringer)
}
const (
LogLevelDebug LogLevel = iota + 1
LogLevelInfo
LogLevelWarn
LogLevelError
)
예 io.Writer
에 쓰기
xray.SetLogger(xraylog.NewDefaultLogger(os.Stderr
, xraylog.LogLevelError
))
환경 변수
환경 변수를 사용하여 Go용 X-Ray SDK를 구성할 수 있습니다. SDK는 다음 변수를 지원합니다.
AWS_XRAY_CONTEXT_MISSING
– 열려 있는 세그먼트가 없는 경우 구성된 구성된 코드가 데이터를 기록하려고 할 때 발생하는 예외를 방지하려면RUNTIME_ERROR
로 설정합니다.유효한 값
-
RUNTIME_ERROR
— 런타임 예외가 발생합니다. -
LOG_ERROR
– 오류를 기록하고 계속합니다 (기본값). -
IGNORE_ERROR
— 오류를 무시하고 계속합니다.
열린 요청이 없을 때 실행되는 시작 코드 또는 새 스레드를 생성하는 코드에서 계측된 클라이언트를 사용하려고 하는 경우 누락된 세그먼트 또는 하위 세그먼트와 관련된 오류가 발생할 수 있습니다.
-
-
AWS_XRAY_TRACING_NAME
– SDK가 세그먼트에 사용하는 서비스 이름을 설정합니다. AWS_XRAY_DAEMON_ADDRESS
– X-Ray 대몬(daemon) 리스너의 호스트와 포트를 설정합니다. 기본적으로 SDK는127.0.0.1:2000
에 트레이스 데이터를 보냅니다. 다른 포트에서 수신 대기하도록 대몬(daemon)을 구성한 경우 또는 다른 호스트에서 실행 중인 경우 이 변수를 사용합니다.-
AWS_XRAY_CONTEXT_MISSING
– SDK가 누락된 컨텍스트 오류를 처리하는 방법을 결정하는 값을 설정합니다. 열린 요청이 없을 때 시작 코드 또는 새 스레드를 생성하는 코드에서 구성된 클라이언트를 사용하려고 하는 경우 누락된 세그먼트 또는 하위 세그먼트와 관련된 오류가 발생할 수 있습니다.-
RUNTIME_ERROR
– 기본적으로 SDK는 런타임 예외를 생성하도록 설정되어 있습니다. -
LOG_ERROR
– 오류를 기록하고 계속합니다.
-
환경 변수는 코드에 설정된 동등한 값을 재정의합니다.
configure 사용
Configure
메서드를 사용하여 Go용 X-Ray SDK를 구성할 수도 있습니다. Configure
는 Config
객체라는 하나의 인수를 다음 선택적 필드와 함께 가져옵니다.
- DaemonAddr
-
이 문자열은 X-Ray 대몬(daemon) 리스너의 호스트 및 포트를 지정합니다. 지정하지 않으면 X-Ray는
AWS_XRAY_DAEMON_ADDRESS
환경 변수의 값을 사용합니다. 해당 값이 설정되어 있지 않으면 "127.0.0.1:2000"을 사용합니다. - ServiceVersion
-
이 문자열은 서비스 버전을 지정합니다. 지정하지 않으면 X-Ray는 빈 문자열("")을 사용합니다.
- SamplingStrategy
-
이
SamplingStrategy
객체는 트레이스되는 애플리케이션 호출을 지정합니다. 지정하지 않으면 X-Ray는xray/resources/DefaultSamplingRules.json
에 정의된 전략을 가져오는LocalizedSamplingStrategy
를 사용합니다. - StreamingStrategy
-
이
StreamingStrategy
객체는 RequiresStreaming이 true를 반환할 때 세그먼트를 스트림할지 여부를 지정합니다. 지정하지 않으면 X-Ray는 하위 세그먼트 수가 20보다 크면 샘플링된 세그먼트를 스트림하는DefaultStreamingStrategy
를 사용합니다. - ExceptionFormattingStrategy
-
이
ExceptionFormattingStrategy
객체는 여러 예외를 처리하는 방법을 지정합니다. 지정하지 않으면 X-Ray는DefaultExceptionFormattingStrategy
를error
유형의XrayError
, 오류 메시지 및 스택 추적과 함께 사용합니다.