Setelah Anda menggunakan OpenTelemetry untuk menginstrumentasi aplikasi dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi tersebut. Anda dapat melihat data pemantauan aplikasi, seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan data analisis SQL. Topik ini menjelaskan cara menggunakan OpenTelemetry untuk secara otomatis atau manual menginstrumentasi aplikasi Node.js berbasis Express dan melaporkan data.
Prasyarat
Versi Node.js harus 14 atau lebih baru. Jika tidak, disarankan menggunakan Jaeger untuk melaporkan data jejak aplikasi Node.js. Untuk informasi lebih lanjut, lihat Laporkan Data Aplikasi Node.js.
Informasi Latar Belakang
OpenTelemetry menyediakan beberapa plug-in instrumentasi otomatis yang dapat digunakan untuk membuat rentang secara otomatis untuk kerangka kerja umum. Tabel berikut mencantumkan kerangka kerja yang didukung. Untuk informasi lebih lanjut, lihat Dokumentasi OpenTelemetry.
Kode Contoh
Anda dapat mengunduh kode contoh dari opentelemetry-nodejs-demo.
Metode 1: Instrumentasi Otomatis (direkomendasikan)
Unduh dependensi yang diperlukan untuk menjalankan proyek.
cd auto-instrumentation npm init -y npm install express npm install axiosUnduh dependensi yang diperlukan untuk instrumentasi otomatis OpenTelemetry.
npm install --save @opentelemetry/api npm install --save @opentelemetry/auto-instrumentations-nodeTulis kode aplikasi.
Berikut adalah contoh sederhana yang diimplementasikan menggunakan Express:
"use strict"; const axios = require("axios").default; const express = require("express"); const app = express(); app.get("/", async (req, res) => { const result = await axios.get("http://localhost:7001/hello"); return res.status(201).send(result.data); }); app.get("/hello", async (req, res) => { console.log("hello world!") res.json({ code: 200, msg: "success" }); }); app.use(express.json()); app.listen(7001, () => { console.log("Listening on http://localhost:7001"); });Gunakan variabel lingkungan untuk mengatur parameter OpenTelemetry dan jalankan aplikasi.
Ganti
${httpEndpoint}dengan titik akhir HTTP yang diperoleh di Prasyarat. Ganti${serviceName}dengan nama aplikasi.export OTEL_TRACES_EXPORTER="otlp" export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${httpEndpoint}" export OTEL_NODE_RESOURCE_DETECTORS="env,host,os" export OTEL_SERVICE_NAME="${serviceName}" export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register" node main.jsCatatanUntuk informasi tentang variabel lingkungan OpenTelemetry, lihat Konfigurasi Instrumentasi Otomatis.
Akses aplikasi.
Akses aplikasi dengan menjalankan perintah berikut atau menggunakan browser. Kemudian, Anda dapat menghasilkan jejak dan melaporkan data jejak ke Managed Service for OpenTelemetry.
curl localhost:7001/hello
Metode 2: Instrumentasi Manual
Tambahkan dependensi berikut untuk OpenTelemetry ke file package.json.
"dependencies": { "@opentelemetry/api": "^1.0.4", "@opentelemetry/exporter-trace-otlp-grpc": "^0.27.0", "@opentelemetry/instrumentation": "^0.27.0", "@opentelemetry/instrumentation-express": "^0.27.0", "@opentelemetry/instrumentation-http": "^0.27.0", "@opentelemetry/resources": "^1.0.1", "@opentelemetry/sdk-trace-base": "^1.0.1", "@opentelemetry/sdk-trace-node": "^1.0.1" }Buat penyedia.
const { Resource } = require("@opentelemetry/resources"); const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node"); const { SemanticResourceAttributes, } = require("@opentelemetry/semantic-conventions"); const provider = new NodeTracerProvider({ resource: new Resource({ [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(), [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express", // Anda bisa mengganti opentelemetry-express dengan nama layanan aktual. }), });Daftarkan kerangka kerja HTTP dan Express menggunakan penyedia. Aplikasi dalam kerangka kerja ini dipantau dan dicegat secara otomatis.
CatatanUntuk informasi tentang cara memantau aplikasi Node.js dalam kerangka kerja lain, lihat Dokumentasi OpenTelemetry.
const { registerInstrumentations } = require("@opentelemetry/instrumentation"); const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http"); const { ExpressInstrumentation, } = require("@opentelemetry/instrumentation-express"); registerInstrumentations({ tracerProvider: provider, instrumentations: [new HttpInstrumentation(), ExpressInstrumentation], });Konfigurasikan exporter untuk mengekspor data ke Managed Service for OpenTelemetry.
Ganti
<ENDPOINT>dan<AUTHENTICATION>dalam kode berikut dengan titik akhir dan token yang diperoleh di Prasyarat.const metadata = new grpc.Metadata(); metadata.set("Authentication", "<AUTHENTICATION>"); const exporter = new OTLPTraceExporter({ url: "<ENDPOINT>", metadata }); provider.addSpanProcessor(new SimpleSpanProcessor(exporter)); provider.register();Opsional. Tambahkan acara kustom dan atribut.
CatatanUntuk informasi tentang cara menggunakan API OpenTelemetry, lihat Dokumentasi OpenTelemetry.
const api = require("@opentelemetry/api"); const currentSpan = api.trace.getSpan(api.context.active()); currentSpan.addEvent("timestamp", { value: Date.now() }); currentSpan.setAttribute("tagKey-01", "tagValue-01");
Lihat data jejak di konsol ARMS
Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
