DataKit 추적 개요
현재 DataKit에서 지원하는 타사 추적 데이터에는 다음이 포함됩니다.
- DDTrace
- Apache Jaeger
- OpenTelemetry
- SkyWalking
- Zipkin
- Cat
- PinPoint
DataKit Tracing Frontend¶
Tracing Frontend는 다양한 유형의 Trace 데이터를 수신하는 API입니다. 일반적으로 HTTP 또는 gRPC를 통해 다양한 Trace SDK에서 보낸 데이터를 수신합니다. DataKit은 이러한 데이터를 수신한 후 이를 통일된 스팬 구조로 변환합니다. 그런 다음 처리를 위해 Backend로 보냅니다.
Tracing Frontend는 Span 구조 변환 외에도 Tracing Backend의 필터 장치 및 작동 장치 구성도 완료합니다.
트레이스 데이터 수집 공통 설정¶
구성 파일의 추적 프로그램은 현재 구성된 추적 에이전트를 참조합니다. 지원되는 모든 추적 에이전트는 다음 구성을 사용할 수 있습니다.
## customer_tags is a list of keys contains keys set by client code like span.SetTag(key, value)
## that want to send to data center. Those keys set by client code will take precedence over
## keys in [inputs.tracer.tags]. DOT(.) IN KEY WILL BE REPLACED BY DASH(_) WHEN SENDING.
customer_tags = ["key1", "key2", ...]
## Keep rare tracing resources list switch.
## If some resources are rare enough(not presend in 1 hour), those resource will always send
## to data center and do not consider samplers and filters.
keep_rare_resource = false
## By default every error presents in span will be send to data center and omit any filters or
## sampler. If you want to get rid of some error status, you can set the error status list here.
omit_err_status = ["404"]
## Ignore tracing resources map like service:[resources...].
## The service name is the full service name in current application.
## The resource list is regular expressions uses to block resource names.
## If you want to block some resources universally under all services, you can set the
## service name as "*". Note: double quotes "" cannot be omitted.
[inputs.tracer.close_resource]
service1 = ["resource1", "resource2", ...]
service2 = ["resource1", "resource2", ...]
"*" = ["close_resource_under_all_services"]
## Sampler config uses to set global sampling strategy.
## sampling_rate used to set global sampling rate.
[inputs.tracer.sampler]
sampling_rate = 1.0
[inputs.tracer.tags]
key1 = "value1"
key2 = "value2"
## Threads config controls how many goroutines an agent cloud start.
## buffer is the size of jobs' buffering of worker channel.
## threads is the total number fo goroutines at running time.
## timeout is the duration(ms) before a job can return a result.
[inputs.tracer.threads]
buffer = 100
threads = 8
timeout = 1000
customer_tags: 기본적으로 DataKit은 관심 있는 태그(즉, Guance 트레이스 세부정보에서 볼 수 있는 message를 제외한 필드)만 선택합니다.
사용자가 트레이스에 의해 보고된 다른 태그에 관심이 있는 경우 이 구성을 추가하여 DataKit에 해당 태그를 선택하도록 지시할 수 있습니다. 이 구성 우선순위는 [inputs.tracer.tags]보다 높습니다.
keep_rare_resource: 리source의 트레이스가 지난 한 시간 동안 나타나지 않은 경우 시스템은 해당 트레이스를 드문 트레이스로 간주하여 데이터 센터에 직접 보고합니다.omit_err_status: 기본적으로 트레이스에 오류 상태의 Span이 있으면 데이터가 데이터 센터에 직접 보고됩니다. 사용자가 HTTP 오류 상태(예: 429 요청이 너무 많음)가 있는 특정 트레이스를 무시해야 하는 경우 이 항목을 구성하여 DataKit에 이를 무시하도록 지시할 수 있습니다.[inputs.tracer.close_resource]: 사용자는 span_type가 항목인 리source 트레이스를 닫도록 이 항목을 구성할 수 있습니다.[inputs.tracer.sampler]: DataKit 구성 예의 현재 글로벌 샘플링 속도를 구성합니다.[inputs.tracer.tags]:customer_tags보다 우선순위가 낮은 DataKit 글로벌 태그를 구성합니다.[inputs.tracer.threads]: 데이터 처리 중에 사용할 수 있는 CPU 및 메모리 리소스를 제어하도록 현재 추적 에이전트의 스레드 큐를 구성합니다.- 버퍼: 작업 대기열의 캐시입니다. 구성이 클수록 메모리 소비도 늘어납니다. 동시에 에이전트로 전송된 요청은 성공적으로 대기열에 추가되어 신속하게 반환될 확률이 더 높습니다. 그렇지 않으면 삭제되고 429 오류가 반환됩니다.
- 스레드: 작업 대기열의 최대 스레드 수입니다. 구성이 클수록 더 많은 스레드가 시작되고 CPU 사용량이 높아집니다. 일반적으로 CPU 코어 수로 구성됩니다.
- timeout: 작업 시간 초과입니다. 구성이 클수록 버퍼를 차지하는 시간이 길어집니다.
DataKit Tracing Backend¶
DataKit 백엔드는 구성에 따라 트레이스 데이터를 작동하는 역할을 담당합니다. 현재 지원되는 작업에는 추적 필터 및 샘플러가 포함됩니다.
DataKit Filters¶
user_rule_filter: 사용자 행동에 의해 트리거되는 DataKit 기본 필터.omit_status_code_filter:omit_err_status = ["404"]가 구성되면 HTTP 서비스 아래의 트레이스에 상태 코드 404의 오류가 포함된 경우 데이터 센터에 보고되지 않습니다.penetrate_error_filter: DataKit 기본 필터, 트레이스 오류로 인해 트리거됨.close_resource_filter:[inputs.tracer.close_resource]에 구성합니다. 서비스 이름은 서비스의 전체 이름 또는*이고 리source 이름은 리source의 정규식입니다.- 예 1: 구성이
login_server = ["^auth\_.*\?id=[0-9]*"]인 경우login_server서비스 이름resource아래에 있는auth_name?id=123모양의 트레이스가 닫힙니다. - 예 2: 구성이
"*" = ["heart_beat"]와 같은 경우 현재 DataKit에 속한 모든 서비스의heart_beat리소스가 닫힙니다.
- 예 1: 구성이
keep_rare_resource_filter:keep_rare_resource = true가 구성되면 드물게 결정된 트레이스가 데이터 센터에 직접 보고됩니다.
현재 DataKit 버전에서 필터(샘플러는 필터 유형이기도 함)의 실행 순서가 고정되어 있습니다.
error status penetration --> close resource filter --> omit certain http status code list --> rare resource keeper --> sampler
각 DataKit 필터에는 실행 트레이스를 종료하는 기능이 있습니다. 즉, 종료 조건을 충족하는 필터는 후속 필터를 실행하지 않습니다.
DataKit Samplers¶
현재 DataKit은 클라이언트의 샘플링 우선순위 구성인 DDTrace Sampling Rules를 따릅니다.
- 상황 1
DDTrace를 예로 들어 DDTrace lib SDK 또는 클라이언트에 샘플링 우선 순위 태그가 구성되어 있고 환경 변수(DD_TRACE_SAMPLE_RATE) 또는 시작 매개 변수(dd.trace.sample.rate)를 통해 클라이언트 샘플링 속도가 0.3으로 구성되고 DataKit 샘플링 속도(inputs.tracer.sampler)가 지정되지 않은 경우 데이터 센터에 보고되는 데이터의 양은 전체 양의 약 30%가 됩니다.
- 상황 2
고객이 DataKit 샘플링 속도(inputs.tracer.sampler)만 구성하는 경우(예: sampling_rate = 0.3), 이 DataKit이 데이터 센터에 보고하는 데이터 양은 전체 양의 약 30%입니다.
Note 여러 서비스 및 여러 DataKit의 분산 배포에서 DataKit 샘플링 속도를 구성하는 경우 샘플링 효과를 얻으려면 샘플링 속도를 동일한 샘플링 속도로 균일하게 구성해야 합니다.
- 상황 3
즉, 클라이언트 샘플링 레이트를 A로 설정하고, DataKit 샘플링 레이트를 B로 설정합니다. 여기서 A와 B는 0보다 크고 1보다 작습니다. 이 경우 데이터 센터에 보고되는 데이터의 양은 전체 데이터의 약 A*B%입니다.
Note 여러 서비스 및 여러 DataKit의 분산 배포에서 DataKit 샘플링 속도를 구성하는 경우 샘플링 효과를 얻으려면 샘플링 속도를 동일한 샘플링 속도로 균일하게 구성해야 합니다.
Span 구조 설명¶
DataKit이 DataKit Span 데이터 구조를 사용하는 방법에 대한 비즈니스 설명
- DataKit Tracing 데이터 구조에 대한 자세한 설명은 DataKit Tracing Structure를 참조하세요.
- 여러 DataKit Span 데이터가 DataKit Trace에 배치되어 추적 데이터를 형성하고 데이터 센터에 업로드되어 모든 Span이 하나의 TraceID만 갖도록 합니다.
- DDTrace의 경우 TraceID가 동일한 DDTrace 데이터가 일괄적으로 보고될 수 있습니다.
- 프로덕션 환경(다중 서비스, 다중 DataKit 배포)에서는 전체 Trace 데이터가 일괄적으로 데이터 센터에 업로드되며 호출 순서대로 데이터 센터에 업로드되지 않습니다.
parent_id = 0는 루트 span입니다.span_type = entry는 service의 첫 번째 resource를 호출하는 주체, 즉 해당 service의 첫 번째 span을 의미합니다.
FAQ¶
트레이스의 HTTP 상태가 4xx 오류인데 Span 상태가 OK인 이유는 무엇인가요?¶
트레이스 시스템의 Span 상태는 대상 비즈니스 시스템의 실행 상태를 모니터링합니다. 대부분의 경우 대상 시스템은 전송 계층이나 네트워크 계층 또는 하위 수준 시스템이 아닌 사용자 비즈니스 시스템에 해당합니다. HTTP도 비즈니스 계층에 있지만 4xx 오류는 고객 비즈니스 계층에 입력되지 않고 HTTP 프로토콜 스택의 클라이언트에 속합니다. 따라서 고객 비즈니스 계층에 해당하는 API는 이 클라이언트 오류를 올바르게 식별했으므로 Span 상태는 여전히 OK입니다.