Распределённая трассировка с AWS X-Ray
Реализуйте и интерпретируйте распределённую трассировку с помощью AWS X-Ray, чтобы визуализировать прохождение запросов через бессерверную архитектуру и выявлять узкие места производительности.
«Распределённая трассировка с AWS X-Ray» — бесплатный урок Serverless AWS Lambda Development на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Serverless AWS Lambda Development, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Serverless AWS Lambda Development содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Tracing Serverless Requests
In serverless applications, a single user request often travels through many services, like an API Gateway, multiple Lambda functions, and databases. Understanding this journey can be complex!
This is where distributed tracing comes in. It's a technique to track a request as it flows across these different services, providing a complete end-to-end view.
Meet AWS X-Ray
AWS X-Ray is a service that helps developers analyze and debug distributed applications built using microservices. It provides an end-to-end view of requests as they travel through your application.
With X-Ray, you can:
- Visualize service interactions.
- Identify performance bottlenecks.
- Debug errors across distributed systems.
X-Ray Segments Explained
The basic unit of data in X-Ray is a segment. Each service (like a Lambda function or an API Gateway) that's part of your application sends its own segment to X-Ray.
A segment contains information about the work done by that service, including:
- The service's name and ID.
- Details about the incoming request.
- Timing information (start and end times).
- Any errors or faults that occurred.
Deeper Dive: Subsegments
Within a service's segment, you can create subsegments for more detailed tracing. Subsegments represent discrete units of work within that service.
For example, a Lambda function's segment might contain subsegments for:
- Calls to a database (like DynamoDB).
- HTTP requests to an external API.
- Specific business logic within your code.
They help pinpoint exactly where time is being spent inside a service.
Traces and The Service Map
All segments and subsegments generated by a single request are grouped together to form a trace. This trace provides a complete, end-to-end view of the request's journey.
X-Ray then uses these traces to generate a service map. This is a visual representation of your application's components and the connections between them, showing latency and error rates.
Enable X-Ray for Lambda
To start tracing your Lambda functions, you first need to enable X-Ray tracing for them. This can be done easily through the AWS Management Console or via Infrastructure as Code (like AWS SAM or CloudFormation).
In the Console:
- Go to your Lambda function.
- Under 'Configuration', select 'Monitoring and operations tools'.
- Edit and enable 'Active tracing' for AWS X-Ray.
This sets up Lambda to send basic function invocation data to X-Ray.
Instrument Python Lambda Code
While enabling X-Ray captures basic data, for deeper insights (like custom subsegments or tracing non-AWS SDK calls), you need to instrument your code using the X-Ray SDK.
Here's a Python example:
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
# Patch all AWS SDK calls automatically
patch_all()
def lambda_handler(event, context):
# Start a custom subsegment for specific logic
with xray_recorder.in_subsegment('## my_custom_logic'):
print("Executing custom business logic...")
# Simulate some work
import time
time.sleep(0.05)
# Any AWS SDK calls after patch_all() will be automatically traced.
# For example, a DynamoDB put_item() call.
return {
'statusCode': 200,
'body': 'Hello from Lambda with X-Ray!'
}
# For local testing (not typically deployed with Lambda)
if __name__ == '__main__':
print(lambda_handler({}, {}))Instrument Node.js Lambda Code
Similarly, for Node.js Lambda functions, you use the aws-xray-sdk package to instrument your code. This allows you to capture custom subsegments and ensure AWS SDK calls are traced.
Here's a Node.js example:
const AWSXRay = require('aws-xray-sdk');
// Patch all AWS SDK calls automatically.
// This ensures calls to other AWS services are traced.
AWSXRay.captureAWS(require('aws-sdk'));
exports.handler = async (event, context) => {
// Get the current segment created by Lambda's X-Ray integration.
const segment = AWSXRay.getSegment();
// Create a custom subsegment to trace specific logic.
if (segment) { // Ensure segment exists for safe local execution
const customSubsegment = segment.addNewSubsegment('## MyCustomLogic');
try {
console.log("Executing custom business logic...");
await new Promise(resolve => setTimeout(resolve, 50)); // Simulate work
} finally {
customSubsegment.close();
}
} else {
console.log("X-Ray segment not found, executing without tracing.");
await new Promise(resolve => setTimeout(resolve, 50)); // Simulate work
}
return {
statusCode: 200,
body: JSON.stringify('Hello from Lambda with X-Ray!'),
};
};
// For local execution, you can simulate a call to the handler.
if (require.main === module) {
console.log("Running handler locally...");
exports.handler({}, {}).then(result => console.log(result));
}Reading the Service Map
Once X-Ray collects trace data, you can view the service map in the X-Ray console. This map visually represents your application's components as nodes and their interactions as edges.
Look for:
- Nodes: Represent services (Lambda, API Gateway, DynamoDB).
- Edges: Show connections and data flow between services.
- Colors: Indicate service health (green for healthy, red for errors).
- Latency: Visual cues and metrics on edges show request duration.
Pinpointing Bottlenecks
The real power of X-Ray is in identifying performance issues. By examining a trace's timeline, you can see how long each segment and subsegment took to complete.
This helps you:
- Identify slow services: Which service is taking the most time?
- Find inefficient code: Which subsegment within a function is causing delays?
- Detect external dependencies: Is a third-party API call or database query slowing things down?
X-Ray Tracing Check
Let's test your understanding of AWS X-Ray's capabilities.
Tracing the Path Forward
Congratulations! You've learned how AWS X-Ray provides invaluable visibility into your serverless applications.
By enabling X-Ray, instrumenting your code, and interpreting the service map and trace timelines, you can effectively:
- Understand complex request flows.
- Diagnose latency issues and errors.
- Optimize your application's performance.
Embrace X-Ray to build more robust and performant serverless systems!
Часто задаваемые вопросы
Урок «Распределённая трассировка с AWS X-Ray» бесплатный?
Да — полный текст урока «Распределённая трассировка с AWS X-Ray» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Serverless AWS Lambda Development, подпишись на CoddyKit PRO. Курс Serverless AWS Lambda Development содержит 4 уроков всего.
Чему я научусь в уроке «Распределённая трассировка с AWS X-Ray»?
Реализуйте и интерпретируйте распределённую трассировку с помощью AWS X-Ray, чтобы визуализировать прохождение запросов через бессерверную архитектуру и выявлять узкие места производительности. Ты практикуешь Serverless AWS Lambda Development с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Serverless AWS Lambda Development?
Предыдущий опыт не требуется. Serverless AWS Lambda Development на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Распределённая трассировка с AWS X-Ray»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Serverless AWS Lambda Development?
Да. Каждый урок Serverless AWS Lambda Development включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Расширенные политики и разрешения IAM
- Управление секретами с помощью AWS Secrets Manager
- Распределённая трассировка с AWS X-Ray
- Структурированное журналирование и идентификаторы корреляции