
OpenTelemetry通过两种主要方式处理错误:
javascript
const { trace } = require(‘@opentelemetry/api’);
function riskyOperation {
const tracer = trace.getTracer(‘error-demo’);
const span = tracer.startSpan(‘riskyOperation’);
try {
throw new Error(‘Database connection failed’);
} catch (err) {
span.setStatus({
code: trace.StatusCode.ERROR,
message: err.message
});
span.recordException(err);
throw err;
} finally {
span.end;
在上述代码中,`riskyOperation` 函数内部的 `try-catch` 块捕获了一个错误。一旦捕获到错误,通过 `span.setStatus` 将Span标记为错误状态,并使用 `span.recordException` 记录错误的详细信息。
1. 错误属性增强:为错误添加自定义属性,便于后续分析。
javascript
span.recordException(err, {
‘error.type’: err.constructor.name,
‘error.stack’: err.stack,
‘service.version’: ‘1.0.1’
});
通过增强错误属性,可以更好地理解错误发生的上下文。
2. 错误严重度分级:根据业务需求对错误进行严重度分级,以便更有针对性地处理和响应。
3. 跨服务错误传播:在分布式系统中,错误需要跨服务边界传播。
javascript
const span = tracer.startSpan(‘clientCall’);
try {
await service.call;
} catch (err) {
span.setStatus({ code: trace.StatusCode.ERROR });
span.recordException(err);
throw err;
} finally {
span.end;
const ctx = propagation.extract(context.active, carrier);
const span = tracer.startSpan(‘serverProcess’, { kind: SpanKind.SERVER }, ctx);
上述代码展示了如何在客户端和服务器之间传播错误,确保分布式系统中错误的一致性和可追溯性。
以电商订单处理为例,展示OpenTelemetry在实际业务中的错误处理能力。
javascript
async function processOrder(orderId) {
const span = tracer.startSpan(‘processOrder’);
try {
const payment = await chargeCreditCard(orderId);
span.addEvent(‘payment_processed’, { amount: payment.amount });
const inventory = await updateInventory(orderId);
span.addEvent(‘inventory_updated’);
await sendConfirmationEmail(orderId);
} catch (err) {
span.setStatus({ code: trace.StatusCode.ERROR });
const attributes = {
‘order.id’: orderId,
‘error.retryable’: isRetryableError(err)
};
span.recordException(err, attributes);
logger.error(`Order ${orderId} failed`, { error: err });
if (isRetryableError(err)) {
await retryOrder(orderId);
} finally {
span.end;
在这个案例中,`processOrder` 函数处理电商订单的整个流程。如果在支付、库存更新或邮件发送过程中发生错误,OpenTelemetry会捕获并记录这些错误,同时提供详细的订单和错误信息,以便进行后续的分析和处理。
异常分析是识别、诊断和解决系统或数据中异常情况的重要环节。通过对异常现象的深入研究,可以帮助企业或组织及时发现潜在问题,避免风险扩大,并采取有效的应对措施。
1. 登录可观测链路OpenTelemetry版控制台。
2. 选择左侧导航菜单场景化分析>异常分析。
3. 在页面右上角,根据需求选择特定的时间范围数据进行展示分析。
4. 在快捷筛选区域,按异常名称、接口名称、应用名称、实例对异常进行筛选过滤。
5. 在趋势图区域,查看指定时间范围内的异常次数,按照异常名称做堆叠展示。
6. 在异常列表区域,查看异常名称、对应抛出异常的应用、异常次数、占比、异常信息摘要等。
对于在正常状态下起伏不定的指标(如RT和QPS),可以使用区间检测功能,通过动态阈值对指标数据进行异常检测。
1. 登录可观测链路OpenTelemetry版控制台。
2. 在左侧导航栏中选择告警管理>告警规则。
3. 在告警规则页面单击创建告警规则。
4. 在创建告警规则页面自定义告警名称,并选择告警检测类型为区间检测。
5. 在告警对象区域根据需求选择对应的告警应用、指标类型和筛选条件。
6. 在告警规则区域设置告警条件。
7. 设置告警通知和高级告警设置。
可观测链路OpenTelemetry版的日志分析功能依赖日志服务(SLS),可以在控制台直接展示日志中心页面。当应用出现业务异常问题时,可以通过查看和分析日志,精准定位异常。
1. 登录可观测链路OpenTelemetry版控制台,在左侧导航栏单击应用列表。
2. 在应用列表页面顶部选择目标地域,然后单击目标应用名称。
3. 在左侧导航栏单击应用设置。
4. 在自定义配置页签的业务日志关联设置区域,绑定Project和Logstore,设置关联索引。
5. 在自定义配置页签左下角单击保存。
1. 在左侧导航栏,单击日志分析。
2. 在右侧页面,执行以下操作:
OpenTelemetry提供了强大而灵活的数据错误处理和异常管理机制。通过标准化的API和丰富的工具集,开发者可以方便地在分布式系统中实现全面的错误追踪、详细的异常分析以及高效的问题解决。无论是在开发新应用还是优化现有系统,OpenTelemetry都能帮助提升系统的可靠性和性能。
Lei
April 23, 2025
技术探讨