이 문서는 스팬 이 UI의 특정 속성을 표시하도록 Trace API 로 전송된 추적 데이터에 속성을 추가하는 방법을 설명합니다.
스팬을 장식하는 이유는 무엇입니까?
Trace API로 데이터를 보낼 때 스팬에 사용자 지정 속성 을 추가할 수 있습니다. 예를 들어, 추적 데이터를 분석하는 데 도움이 되도록 customer.id
또는 user.id
과 같은 속성을 추가하기로 결정할 수 있습니다.
일부 예상 속성 값으로 인해 분산 추적 UI가 일부 특정 추적 속성 및 세부 정보를 표시합니다. 예를 들어 범위에 error.
접두사가 있는 속성이 있는 경우 UI는 해당 범위를 오류와 함께 표시합니다. 다른 예로 db.
접두사가 있는 속성이 있는 범위는 UI에 데이터 저장소 범위로 표시되고 해당 데이터 저장소 쿼리가 강조표시됩니다.
UI에 특정 속성을 표시하도록 스팬을 장식하면 다음을 수행하는 데 도움이 됩니다.
- 추적 데이터의 구조를 더 잘 이해합니다.
- 문제를 더 쉽게 해결할 수 있습니다.
속성으로 스팬을 장식하는 방법
이 표에서는 UI의 특정 속성과 함께 표시하기 위해 Trace API로 전송된 스팬을 가져오는 방법을 설명합니다. 속성 설명은 span 속성 을 참조하세요.
원하는 범위 속성 | UI 표시기 | 속성을 추가하는 방법 |
---|---|---|
오류 |
| |
외부 |
| |
데이터 저장소 |
| |
서비스 | 이것은 속성으로 수행할 수 없습니다. 범위가 루트 범위이거나 상위 항목이 다른 엔터티에 있는 경우 범위는 서비스 범위로 분류됩니다. 범위에 여러 속성이 있는 경우 UI에서 서비스 범위 분류가 우선합니다. | |
과정에서 | 이것은 속성으로 수행할 수 없습니다. 범위가 서비스 범위, 데이터 저장소 범위 또는 외부 범위로 분류되지 않은 경우 해당 범위는 진행 중인 것으로 분류됩니다. |
이러한 범위 속성이 결정되고 저장되는 방법에 대한 자세한 내용은 구조 추적 을 참조하세요.
속성 추가 팁:
- 범위에 모든 속성을 추가할 수 있습니다. 예를 들어
customer.id
과 같은 속성을 추가하여 특정 고객을 포함하는 추적에 대해 전역적으로 추적을 검색 할 수 있습니다. - 범위는 여러 범주에 있을 수 있습니다. 예를 들어
external
은datastore
보다 더 일반적인 카테고리이므로 스팬이external
및datastore
모두로 분류되는 경우 UI에서 데이터 저장소 스팬으로 표시됩니다.
JSON 예제
다음은 속성을 사용하여 범위 속성을 설정하는 방법을 보여주는 JSON 예입니다.
여러 유형의 속성이 추가된 New Relic 형식 JSON. 맞춤 속성의 중요성은 customAttribute
에 설명되어 있습니다.
[ { "common": { "attributes": { "hostname": "cattle456.example.com", "environment": "staging" } }, "spans": [ { "id": "1-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 3.5, "error.name": "StackOverflowException", "name": "/placeOrder [POST]", "customer.id": "datanerd@newrelic.com", "description": "This span is the root of the whole trace. It has no parent.id. Custom attributes like 'customer.id' can have any name. Using these kinds of attributes will allow you to do a global search across all traces for desired traces." } }, { "id": "2-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 1, "parent.id": "1-abcdefg", "db.query": "foo selection", "db.statement": "SELECT FOO FROM BAR", "name": "DB Span", "description": "This is a datastore span. The presence of one or more attributes prefixed with db. makes this display as a datastore span in the UI." } }, { "id": "3-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "parent.id": "1-abcdefg", "duration.ms": 1.5, "http.method": "POST", "name": "HTTP Span", "description": "An external (HTTP) span. Spans with one or more attributes prefixed with http. are treated as external spans." } }, { "id": "4-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 1.2, "error.text": "404 file not found", "parent.id": "1-abcdefg", "http.method": "GET", "http.statusCode": 404, "name": "Error Http Span", "description": "Spans with error. prefixed attributes are displayed in red text in the UI. Errors can coexist with other span categories." } }, { "id": "5-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "error.message": "404 file not found", "duration.ms": 1.2, "parent.id": "1-abcdefg", "http.method": "GET", "http.statusCode": 404, "db.query": "SELECT FOO FROM BAR", "name": "Error Http DB Span", "description": "Spans can have multiple properties. Relevant attributes are highlighted when you select a span to view its details." } }, { "id": "6-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 1.6, "parent.id": "1-abcdefg", "http.method": "GET", "db.query": "SELECT FOO FROM BAR", "name": "Http DB Span", "description": "External (HTTP) is a more general category than is datastore, so a span with both http.- and db.-prefixed attributes is displayed as a datastore span in the UI." } }, { "id": "7-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 2.0, "parent.id": "1-abcdefg", "description": "Spans with no explicit types that belong to the same entity as its parent and children are considered in-process spans.", "name": "In-process span 1" } }, { "id": "8-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 1.7, "parent.id": "7-abcdefg", "name": "In-process span 2", "description": "In-process spans can represent a breakdown of work being done within a process." } }, { "id": "9-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 1.0, "parent.id": "8-abcdefg", "name": "In-process span 3", "description": "The number and granularity of in-process spans vary depending on instrumentation and frameworks being used." } }, { "id": "10-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 2.2, "parent.id": "1-abcdefg", "name": "In-process span" } }, { "id": "11-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Service", "duration.ms": 2.2, "parent.id": "10-abcdefg", "name": "External determined by entity change", "description": "A span that’s a parent to a span from another entity is displayed as an external span in the UI." } }, { "id": "12-abcdefg", "trace.id": "abc123-xyz789", "attributes": { "service.name": "Order Notification Service", "duration.ms": 1.8, "parent.id": "11-abcdefg", "name": "Entry span determined by entity change", "description": "The attribute 'service.name' is used to detect process boundaries in the UI. For compatibility with data from Lambda monitoring and APM agents, the attribute 'entity.name' can be used to search across all traces." } } ] }]
여러 속성 유형이 추가된 Zipkin 형식 JSON. 속성(키-값 쌍)의 중요성은 customAttribute
에 설명되어 있습니다.
[ { "traceId": "zipkinSampleTrace", "id": "1", "kind": "SERVER", "name": "Error Span", "duration": 35000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "This span is the root of the whole trace. It has no parent.id" } }, { "traceId": "zipkinSampleTrace", "id": "2", "parentId": "1", "kind": "SERVER", "name": "post", "duration": 10000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "This is a datastore span. The presence of one or more attributes prefixed with db. makes this display as a datastore span in the UI." } }, { "traceId": "zipkinSampleTrace", "id": "2", "parentId": "1", "kind": "CLIENT", "name": "DB Span", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "db.query": "foo selection", "db.statement": "SELECT FOO FROM BAR", "customAttribute": "This is a datastore span. The presence of one or more attributes prefixed with db. makes this display as a datastore span in the UI." } }, { "traceId": "zipkinSampleTrace", "id": "3", "parentId": "1", "kind": "CLIENT", "name": "HTTP Span", "duration": 15000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "http.method": "POST", "customAttribute": "AAn external (HTTP) span. Spans with one or more attributes prefixed with http. are treated as external spans." } }, { "traceId": "zipkinSampleTrace", "id": "4", "parentId": "1", "kind": "CLIENT", "name": "Error Span", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "error.message": "404 file not found", "http.method": "GET", "http.statusCode": 404, "customAttribute": "Spans with error. prefixed attributes are displayed in red text in the UI. Errors can coexist with other span categories." } }, { "traceId": "zipkinSampleTrace", "id": "5", "parentId": "1", "kind": "CLIENT", "name": "HTTP Error DB Span", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "error.message": "404 file not found", "http.method": "GET", "http.statusCode": 404, "db.query": "SELECT FOO FROM BAR", "customAttribute": "Spans can have multiple properties. Relevant attributes are highlighted when you select a span to view its details." } }, { "traceId": "zipkinSampleTrace", "id": "6", "parentId": "1", "kind": "CLIENT", "name": "HTTP DB Span", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "http.method": "GET", "db.query": "SELECT FOO FROM BAR", "customAttribute": "External (HTTP) is a more general category than is datastore, so a span with both http.- and db.-prefixed attributes is displayed as a datastore span in the UI." } }, { "traceId": "zipkinSampleTrace", "id": "7", "parentId": "1", "kind": "SERVER", "name": "In process span 1", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "Spans with no explicit types that belong to the same entity as its parent and children are considered in-process spans." } }, { "traceId": "zipkinSampleTrace", "id": "8", "parentId": "7", "kind": "SERVER", "name": "In process span 2", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "In-process spans can represent a breakdown of work being done within a process." } }, { "traceId": "zipkinSampleTrace", "id": "9", "parentId": "8", "kind": "SERVER", "name": "In process span 2", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "The number and granularity of in-process spans vary depending on instrumentation and frameworks being used." } }, { "traceId": "zipkinSampleTrace", "id": "10", "parentId": "1", "kind": "CLIENT", "name": "In process remote parent", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "name": "in process remote parent" } }, { "traceId": "zipkinSampleTrace", "id": "10", "parentId": "1", "kind": "CLIENT", "name": "In process remote parent", "duration": 12000, "localEndpoint": { "serviceName": "sampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "A span that is a parent to a span from another entity will be displayed as an external span." } }, { "traceId": "zipkinSampleTrace", "id": "11", "parentId": "10", "kind": "SERVER", "name": "Downstream entry span", "duration": 12000, "localEndpoint": { "serviceName": "downstreamSampleApp", "ipv4": "127.0.0.1", "port": 8080 }, "tags": { "customAttribute": "The attribute 'service.name' is used to detect process boundaries in the UI. For compatibility with data from Lambda monitoring and APM agents, the attribute 'entity.name' can be used to search across all traces." } }]