返回

重构大型网站指南:第 1.2 部分:使用 OpenTelemetry + SigNoz 实现 Node.js 系统可观测性

前端







在上一篇文章中,我们探讨了 SonarQube,这是一种用于代码静态质量检查的宝贵工具。然而,并非所有问题都能在静态检查期间被充分发现,这可能导致问题在用户使用软件时在线上出现。因此,我们需要一种方法来监控和记录生产环境中的系统行为,这就是系统可观测性的用武之地。

在本文中,我们将重点介绍如何使用 OpenTelemetry 和 SigNoz 为 Node.js 系统实施全面的可观测性解决方案。OpenTelemetry 是一个开放标准,用于生成、收集和导出遥测数据,而 SigNoz 是一个强大的平台,用于聚合、存储和分析这些数据。通过将这两个工具结合使用,您可以获得对系统性能、可靠性和用户体验的深入了解。

## 为什么需要系统可观测性?

系统可观测性对于管理和维护大型网站至关重要。它使您能够:

* **快速识别和解决问题:** 通过持续监控系统,您可以主动识别性能下降、错误和异常,并在问题对用户造成重大影响之前采取措施。
* **提高性能:** 可观测性数据可用于识别性能瓶颈,使您可以针对性地进行优化,从而改善用户体验并降低成本。
* **确保可靠性:** 通过监控关键指标,您可以主动发现系统中的薄弱点,并采取措施防止中断和数据丢失。
* **改进用户体验:** 通过了解用户与网站的互动方式,您可以识别影响用户体验的领域,并采取措施进行改进。

## 使用 OpenTelemetry 和 SigNoz 实施可观测性

### 1. 安装 OpenTelemetry

要开始使用,您需要在 Node.js 应用程序中安装 OpenTelemetry。您可以使用以下命令通过 npm 安装它:

npm install --save @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/exporter-trace-otlp-http


### 2. 配置 OpenTelemetry

安装 OpenTelemetry 后,您需要配置它以导出遥测数据到 SigNoz。为此,请创建一个名为 `tracerProvider.js` 的文件,并添加以下配置:

```javascript
const { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor, TracerProvider } = require('@opentelemetry/sdk-trace-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');

const collectorEndpoint = 'YOUR_SIGNOZ_COLLECTOR_ENDPOINT';
const collectorToken = 'YOUR_SIGNOZ_COLLECTOR_TOKEN';

const exporter = new OTLPTraceExporter({
  url: collectorEndpoint,
  headers: {
    'Authorization': `Bearer ${collectorToken}`,
  },
});

const spanProcessor = new BatchSpanProcessor(exporter);

const tracerProvider = new TracerProvider({
  spanProcessor,
});

3. 使用 OpenTelemetry

配置 OpenTelemetry 后,您就可以在代码中使用它来记录遥测数据。要记录跟踪,请使用以下代码:

const { diag, trace } = require('@opentelemetry/api');
const tracer = trace.getTracer('my-tracer');

const span = tracer.startSpan('my-span');
// ... 做一些事情
span.end();

4. 安装 SigNoz Agent

SigNoz Agent 负责收集和发送 OpenTelemetry 数据到 SigNoz 平台。要安装代理,请运行以下命令:

curl -sSL "https://dl.signoz.io/install.sh" | sh

5. 配置 SigNoz Agent

安装代理后,您需要配置它以接收 OpenTelemetry 数据并将其发送到 SigNoz 平台。为此,请编辑 /etc/signoz/agent.yaml 文件,并添加以下配置:

receivers:
  otlp:
    protocols:
      grpc: {}

6. 启动 SigNoz Agent

配置代理后,请使用以下命令启动它:

systemctl start signo