اتصال اپ های NodeJS به لاگ نگار
· خواندن 5 دقیقه
اتصال اپلیکیشنهای Node.js به لاگ نگار
این مقاله راهنمایی جامع برای توسعهدهندگان فراهم میکند تا بتوانند اپلیکیشنهای Node.js خود را به سرویس لاگ نگار متصل کنند. با استفاده از این راهنما، شما میتوانید دادههای لاگ خود را به لاگ نگار ارسال و به شکلی کارآمد مدیریت و مشاهده کنید.
علاوه بر راهنمای متنی به شما پیشنهاد میشود ویدیو یوتیوب همین آموزش را مشاهده کنید:
- برای ایجاد دیتای مانیتورینگ مانند لاگ، تریس و متریک در ابتدا نیاز به نصب پکیج های Open Telemetry داریم. برای نصب پکیج های مورد نیاز میتوانید از دستور زیر استفاده کنید:
npm install @opentelemetry/api @opentelemetry/api-logs @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-logs-otlp-http @opentelemetry/exporter-metrics-otlp-proto @opentelemetry/exporter-trace-otlp-http @opentelemetry/resources @opentelemetry/sdk-logs @opentelemetry/sdk-metrics @opentelemetry/sdk-node @opentelemetry/semantic-conventions
- سپس کانفیگ زیر را در یک فایل در پروژه خود اضافه میکنیم:
// otel.ts
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-proto";
import { Resource } from "@opentelemetry/resources";
import { BatchLogRecordProcessor } from "@opentelemetry/sdk-logs";
import { NodeSDK } from "@opentelemetry/sdk-node";
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
import env from "./configs/env";
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics/build/src";
const OTEL_URL = env.OTEL_URL ?? "";
const resource = new Resource({
[ATTR_SERVICE_NAME]: "Lognegar",
});
const logExporter = new OTLPLogExporter({
url: OTEL_URL + "/logs",
});
const traceExporter = new OTLPTraceExporter({
url: OTEL_URL + "/traces",
});
const metricExporter = new OTLPMetricExporter({
url: OTEL_URL + "/metrics",
});
const metricReader = new PeriodicExportingMetricReader({
exporter: metricExporter,
exportIntervalMillis: 10_000, // ms
});
const OTEL_SDK = new NodeSDK({
resource,
metricReader,
traceExporter,
instrumentations: [getNodeAutoInstrumentations()],
logRecordProcessors: [new BatchLogRecordProcessor(logExporter)],
});
// Graceful shutdown for OTEL
process.on("SIGTERM", () => {
OTEL_SDK.shutdown().then(() => console.log("Observation terminated"));
});
export default OTEL_SDK;
- برای استفاده از این کانفیگ باید اون رو در جایی که اپلیکیشن شروع به کار میکنه فعال کنیم:
نکته: با کانفیگ زیر به صورت اتوماتیک برای همه درخواست هایی که به سمت سرور ما میاد، تریس و متریک تولید میشه و به سمت Open Telemetry Collector ارسال میشه.
// app.ts
import express from "express";
import OTEL_SDK from "./otel";
import todoRouter from "./routes/todo.route";
import bodyParser from "body-parser";
import { errorHandler } from "./middlewares/errors.middleware";
const app = express();
const port = 3090;
app.use(bodyParser.json());
app.use("/todos", todoRouter);
app.get("/", (req, res) => {
res.status(200).json({ message: "Hello World" });
});
app.use(errorHandler);
app.listen(port, () => {
// Start OTEL SDK
OTEL_SDK.start();
console.log(`App listening on http://localhost:${port}`);
});
- برای ایجاد لاگ در سیستم ما باید یک Logger ایجاد کنیم و هر جایی که نیاز داریم یک داده ای رو به صورت لاگ ذخیره کنیم از اون استفاده کنیم. برای این کار کانفیگ زیر را در یک فایل قرار میدهیم: