கண்காணிப்பு அறிமுகம்
Node.js பயன்பாடுகளில் கண்காணிப்பு என்பது கணினி நடத்தையைப் புரிந்துகொள்ள அளவீடுகள் மற்றும் பதிவுகளைச் சேகரித்து பகுப்பாய்வு செய்வதை உள்ளடக்குகிறது.
கண்காணிப்பின் முக்கிய தூண்கள்
அளவீடுகள்
கணினி செயல்திறன் மற்றும் ஆரோக்கியத்தின் எண்ணியல் அளவீடுகள்
பதிவுகள்
கணினியில் நிகழும் நிகழ்வுகள் மற்றும் செயல்பாடுகளின் விரிவான பதிவுகள்
சுவடுகள்
பல சேவைகள் வழியாக கோரிக்கைகளின் பாதையைக் கண்காணித்தல்
அளவீடுகள், பதிவுகள் மற்றும் சுவடுகள் (பெரும்பாலும் "கண்காணிப்பின் மூன்று தூண்கள்" என்று அழைக்கப்படுகின்றன) உங்கள் கணினியின் ஆரோக்கியம் மற்றும் செயல்திறனின் வெவ்வேறு ஆனால் நிரப்பு காட்சிகளை வழங்குகின்றன.
பயன்பாட்டு அளவீடுகள் சேகரிப்பு
Prometheus கிளையண்டைப் பயன்படுத்துதல்
அடிப்படை அளவீடுகள் சேகரிப்பு
const express = require('express');
const client = require('prom-client');
// Create a Registry to register the metrics
const register = new client.Registry();
// Add a default label which is added to all metrics
register.setDefaultLabels({
app: 'nodejs-monitoring-demo'
});
// Enable collection of default metrics
client.collectDefaultMetrics({ register });
// Create a custom metric
const httpRequestDurationMicroseconds = new client.Histogram({
name: 'http_request_duration_seconds',
help: 'Duration of HTTP requests in seconds',
labelNames: ['method', 'route', 'code'],
buckets: [0.1, 0.3, 0.5, 0.7, 1, 3, 5, 7, 10] // buckets for response time
});
const app = express();
// Custom middleware to track request duration
app.use((req, res, next) => {
const end = httpRequestDurationMicroseconds.startTimer();
res.on('finish', () => {
end({ method: req.method, route: req.path, code: res.statusCode });
});
next();
});
// Expose metrics endpoint
app.get('/metrics', async (req, res) => {
res.set('Content-Type', register.contentType);
res.end(await register.metrics());
});
// Example route
app.get('/', (req, res) => {
res.send('Hello, Observability!');
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
கண்காணிக்க வேண்டிய முக்கிய அளவீடுகள்
கணினி அளவீடுகள்
பயன்பாட்டு அளவீடுகள்
விநியோகிக்கப்பட்ட சுவடு
விநியோகிக்கப்பட்ட சுவடு மைக்ரோசர்விசஸ் கட்டமைப்பில் பல சேவைகள் வழியாக பாயும் போது கோரிக்கைகளைக் கண்காணிக்க உதவுகிறது.
OpenTelemetry அமைப்பு
// Install required packages
// npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-http
// npm install @opentelemetry/exporter-trace-otlp-http
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { Resource } = require('@opentelemetry/resources');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const sdk = new NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: 'my-service',
[SemanticResourceAttributes.SERVICE_VERSION]: '1.0.0',
}),
traceExporter: new OTLPTraceExporter({
url: 'http://collector:4318/v1/traces',
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start()
.then(() => console.log('Tracing initialized'))
.catch((error) => console.log('Error initializing tracing', error));
பதிவு சிறந்த நடைமுறைகள்
Pino உடன் கட்டமைக்கப்பட்ட பதிவு
const pino = require('pino');
const express = require('express');
const pinoHttp = require('pino-http');
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
formatters: {
level: (label) => ({ level: label.toUpperCase() }),
},
});
const app = express();
// HTTP request logging middleware
app.use(pinoHttp({
logger,
customLogLevel: function (res, err) {
if (res.statusCode >= 400 && res.statusCode < 500) {
return 'warn';
} else if (res.statusCode >= 500 || err) {
return 'error';
}
return 'info';
},
}));
app.get('/', (req, res) => {
req.log.info('Processing request');
res.json({ status: 'ok' });
});
app.listen(3000, () => {
logger.info('Server started on port 3000');
});
பதிவு வளப்படுத்தல்
// Add context to logs
app.use((req, res, next) => {
const childLogger = logger.child({
requestId: req.id,
userId: req.user?.id || 'anonymous',
path: req.path,
method: req.method
});
req.log = childLogger;
next();
});
எச்சரிக்கை மற்றும் காட்சிப்படுத்தல்
Grafana டாஷ்போர்டு எடுத்துக்காட்டு
Grafana டாஷ்போர்டுகளுடன் உங்கள் அளவீடுகளைக் காட்சிப்படுத்தவும். பொதுவான அளவீடுகளுக்கான எடுத்துக்காட்டு வினவல்கள்:
# Node.js Memory Usage (RSS in MB)
process_resident_memory_bytes{job="nodejs"} / 1024 / 1024
# Request Duration (p99 in ms)
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) * 1000
# Error Rate
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
எச்சரிக்கை விதிகள் (Prometheus)
groups:
- name: nodejs
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
for: 10m
labels:
severity: critical
annotations:
summary: "High error rate on {{ $labels.instance }}"
உற்பத்தி கண்காணிப்பு கருவிகள்
திறந்த மூலம்
வணிகம்
கிளவுட் நேட்டிவ்
சிறந்த நடைமுறைகள்
செய்ய வேண்டியவை:
- சீரான வடிவங்களுடன் கட்டமைக்கப்பட்ட பதிவைப் பயன்படுத்தவும்
- கணினி மற்றும் பயன்பாட்டு அளவீடுகள் இரண்டையும் கண்காணிக்கவும்
- SLOகளின் (சேவை நிலை குறிக்கோள்கள்) அடிப்படையில் எச்சரிக்கைகளை அமைக்கவும்
- மைக்ரோசர்விசஸ்களுக்கு விநியோகிக்கப்பட்ட சுவட்டைப் பயன்படுத்தவும்
செய்ய வேண்டாம்:
- உணர்திறன் தகவலைப் பதிவு செய்ய வேண்டாம்
- அளவீடுகளில் உயர்-கார்டினாலிட்டி லேபிள்களைத் தவிர்க்கவும்
- பிழைத்திருத்தத்திற்காக பதிவுகளை மட்டும் நம்ப வேண்டாம்
- எச்சரிக்கை சோர்வைத் தவிர்க்கவும் - செயல்படுத்தக்கூடிய எச்சரிக்கைகளில் கவனம் செலுத்துங்கள்
பயிற்சி
சரியான தொகுப்பு பெயரை தேர்வு செய்யவும்.
The ______ package is commonly used for logging in Node.js applications.