Production Monitoring and Alerting: The Complete Setup Guide

Set up production monitoring and alerting with Prometheus, Grafana, and Sentry. Covers metrics, logs, traces, alert policies, and incident response workflows.

E
ECOSIRE Research and Development Team
|16 मार्च 20267 मिनट पढ़ें1.6k शब्द|

हमारी Performance & Scalability श्रृंखला का हिस्सा

पूरी गाइड पढ़ें

उत्पादन निगरानी और चेतावनी: संपूर्ण सेटअप गाइड

औसत उत्पादन घटना की लागत प्रति मिनट $5,600 है। परिपक्व निगरानी वाली कंपनियां 5 मिनट से कम समय में समस्याओं का पता लगा लेती हैं, जबकि बिना निगरानी वाली कंपनियों को पता लगाने में औसतन 197 मिनट लगते हैं --- एक मामूली चूक और ग्राहक खोने वाली आपदा के बीच का अंतर।

यह मार्गदर्शिका शुरू से अंत तक उत्पादन निगरानी सेटअप को कवर करती है: क्या मापना है, इसे कैसे एकत्र करना है, इसे कहां देखना है और कब सचेत करना है।

मुख्य बातें

  • अवलोकन के तीन स्तंभ (मेट्रिक्स, लॉग, ट्रेस) अलग-अलग उद्देश्यों की पूर्ति करते हैं और तीनों आवश्यक हैं
  • लक्षणों पर अलर्ट (त्रुटि दर, विलंबता) शोर को 80% तक कम करने का कारण नहीं बनता (सीपीयू उपयोग)
  • प्रत्येक अलर्ट से जुड़ी रनबुक, कॉल पर चाहे कोई भी हो, लगातार घटना प्रतिक्रिया सुनिश्चित करती है
  • 5 आवश्यक अलर्ट से शुरुआत करें और आधार रेखा समझने पर ही विस्तार करें

अवलोकनशीलता के तीन स्तंभ

मेट्रिक्स

समय के साथ संख्यात्मक माप का नमूना लिया गया। मेट्रिक्स उत्तर "अभी क्या हो रहा है?"

एप्लिकेशन मेट्रिक्स:

  • अनुरोध दर (प्रति सेकंड अनुरोध)
  • त्रुटि दर (प्रति सेकंड 5xx प्रतिक्रियाएँ)
  • विलंबता वितरण (P50, P95, P99)
  • सक्रिय सत्र/समवर्ती उपयोगकर्ता

इंफ्रास्ट्रक्चर मेट्रिक्स:

  • प्रति सेवा सीपीयू उपयोग
  • मेमोरी उपयोग और कचरा संग्रहण
  • डिस्क I/O और उपलब्ध स्थान
  • नेटवर्क थ्रूपुट

बिजनेस मेट्रिक्स:

  • प्रति मिनट ऑर्डर
  • कार्ट परित्याग दर
  • प्रति घंटा राजस्व
  • एपीआई एंडपॉइंट द्वारा कॉल करता है

लॉग

अलग-अलग घटनाओं के टाइमस्टैम्प्ड, संरचित रिकॉर्ड। लॉग उत्तर देते हैं "ऐसा क्यों हुआ?"

{
  "timestamp": "2026-03-16T14:32:01.234Z",
  "level": "error",
  "service": "api",
  "requestId": "req_abc123",
  "userId": "usr_456",
  "message": "Payment processing failed",
  "error": "Stripe API timeout after 30000ms",
  "endpoint": "POST /billing/checkout",
  "duration": 30142
}

सर्वोत्तम अभ्यास लॉग करें:

  • संरचित JSON लॉगिंग का उपयोग करें, सादा पाठ का नहीं
  • सभी सेवाओं में सहसंबंध आईडी (requestId) शामिल करें
  • उचित स्तर पर लॉग इन करें (विफलताओं के लिए त्रुटि, गिरावट के लिए चेतावनी, प्रमुख घटनाओं के लिए जानकारी)
  • संवेदनशील डेटा (पासवर्ड, टोकन, पूर्ण क्रेडिट कार्ड नंबर) कभी लॉग न करें

निशान

वितरित सिस्टम के माध्यम से एंड-टू-एंड अनुरोध पथ। ट्रेसेस उत्तर देते हैं "अड़चन कहाँ है?"

ईकॉमर्स चेकआउट के लिए एकल उपयोगकर्ता का अनुरोध निम्न को छू सकता है:

  1. Nginx (2ms) से Next.js फ्रंटएंड (50ms) से NestJS API (120ms) से PostgreSQL (45ms) से स्ट्राइप API (800ms) से ईमेल सेवा (200ms)

ट्रेस किए बिना, आप देखते हैं "चेकआउट में 1.2 सेकंड लगते हैं।" ट्रेसिंग के साथ, आप देखते हैं "स्ट्राइप एपीआई चेकआउट विलंबता का 67% हिस्सा है।"


मॉनिटरिंग स्टैक सेटअप

प्रोमेथियस + ग्राफाना (स्वयं-होस्टेड)

# docker-compose.monitoring.yml
services:
  prometheus:
    image: prom/prometheus:v2.50.0
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus
    ports:
      - "9090:9090"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=30d'
      - '--web.enable-lifecycle'

  grafana:
    image: grafana/grafana:10.3.0
    volumes:
      - grafana-data:/var/lib/grafana
    ports:
      - "3030:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
      - GF_USERS_ALLOW_SIGN_UP=false

  loki:
    image: grafana/loki:2.9.0
    volumes:
      - loki-data:/loki
    ports:
      - "3100:3100"

  alertmanager:
    image: prom/alertmanager:v0.27.0
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    ports:
      - "9093:9093"

volumes:
  prometheus-data:
  grafana-data:
  loki-data:

प्रोमेथियस कॉन्फ़िगरेशन

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - "alerts/*.yml"

alerting:
  alertmanagers:
    - static_configs:
        - targets: ["alertmanager:9093"]

scrape_configs:
  - job_name: "api"
    metrics_path: /metrics
    static_configs:
      - targets: ["api:3001"]

  - job_name: "node-exporter"
    static_configs:
      - targets: ["node-exporter:9100"]

  - job_name: "postgres"
    static_configs:
      - targets: ["postgres-exporter:9187"]

  - job_name: "redis"
    static_configs:
      - targets: ["redis-exporter:9121"]

NestJS एप्लिकेशन मेट्रिक्स

प्रोमेथियस मेट्रिक्स को उजागर करना

// metrics.module.ts
import { Module } from '@nestjs/common';
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
import {
  makeCounterProvider,
  makeHistogramProvider,
  makeGaugeProvider,
} from '@willsoto/nestjs-prometheus';

@Module({
  imports: [
    PrometheusModule.register({
      path: '/metrics',
      defaultMetrics: { enabled: true },
    }),
  ],
  providers: [
    makeCounterProvider({
      name: 'http_requests_total',
      help: 'Total HTTP requests',
      labelNames: ['method', 'path', 'status'],
    }),
    makeHistogramProvider({
      name: 'http_request_duration_seconds',
      help: 'HTTP request duration in seconds',
      labelNames: ['method', 'path'],
      buckets: [0.01, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
    }),
    makeGaugeProvider({
      name: 'active_connections',
      help: 'Number of active connections',
    }),
  ],
  exports: [PrometheusModule],
})
export class MetricsModule {}

अलर्ट कॉन्फ़िगरेशन

पाँच आवश्यक चेतावनियाँ

प्रत्येक उत्पादन प्रणाली को पहले दिन से ही इन अलर्ट की आवश्यकता होती है:

# alerts/essential.yml
groups:
  - name: essential
    rules:
      - alert: ServiceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Service {{ $labels.job }} is down"
          runbook: "https://wiki.example.com/runbooks/service-down"

      - alert: HighErrorRate
        expr: |
          rate(http_requests_total{status=~"5.."}[5m])
          / rate(http_requests_total[5m]) > 0.01
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Error rate above 1% for 5 minutes"
          runbook: "https://wiki.example.com/runbooks/high-error-rate"

      - alert: HighLatency
        expr: |
          histogram_quantile(0.95,
            rate(http_request_duration_seconds_bucket[5m])
          ) > 2
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "P95 latency above 2 seconds"

      - alert: DiskSpaceLow
        expr: |
          node_filesystem_avail_bytes{mountpoint="/"}
          / node_filesystem_size_bytes{mountpoint="/"} < 0.2
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Disk space below 20% on {{ $labels.instance }}"

      - alert: SSLCertExpiringSoon
        expr: |
          probe_ssl_earliest_cert_expiry - time() < 14 * 24 * 3600
        labels:
          severity: warning
        annotations:
          summary: "SSL certificate expires within 14 days"

अलर्ट रूटिंग

# alertmanager.yml
global:
  slack_api_url: "${SLACK_WEBHOOK_URL}"

route:
  group_by: ['alertname', 'severity']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'default'
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty'
      repeat_interval: 15m
    - match:
        severity: warning
      receiver: 'slack'

receivers:
  - name: 'default'
    slack_configs:
      - channel: '#alerts'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ .CommonAnnotations.summary }}'

  - name: 'pagerduty'
    pagerduty_configs:
      - routing_key: "${PAGERDUTY_KEY}"
        severity: '{{ .GroupLabels.severity }}'

  - name: 'slack'
    slack_configs:
      - channel: '#alerts-warnings'
        title: '{{ .GroupLabels.alertname }}'

चेतावनी गुणवत्ता नियम

अभ्यास करेंक्यों
लक्षणों पर सचेत करें, कारणों पर नहीं"त्रुटि दर उच्च" कार्रवाई योग्य है; "सीपीयू 80% पर" नहीं हो सकता
प्रत्येक अलर्ट में एक रनबुक होती हैऑन-कॉल इंजीनियरों को सुबह 3 बजे सोचने की ज़रूरत नहीं होनी चाहिए
अलर्ट कार्रवाई योग्य होना चाहिएयदि कोई इस पर कार्यवाही नहीं कर सकता तो यह शोर है, चेतावनी नहीं
2 सप्ताह के बाद थ्रेशोल्ड ट्यून करेंप्रारंभिक सीमाएँ अनुमान हैं; आधारभूत आधार पर समायोजित करें
चेतावनी थकान की मासिक समीक्षा करेंयदि अलर्ट बिना किसी कार्रवाई के प्रतिदिन सक्रिय होते हैं, तो सीमाएँ बढ़ाएँ या उन्हें हटा दें

ग्राफाना डैशबोर्ड

डैशबोर्ड पदानुक्रम

  1. अवलोकन डैशबोर्ड: सभी सेवाओं में उच्च-स्तरीय स्वास्थ्य। यह पहली स्क्रीन है जिसे कोई भी किसी घटना के दौरान देखता है।
  2. सेवा डैशबोर्ड: प्रत्येक सेवा (एपीआई, वेब, कर्मचारी) के लिए विस्तृत मेट्रिक्स।
  3. इंफ्रास्ट्रक्चर डैशबोर्ड: नोड-स्तरीय मेट्रिक्स (सीपीयू, मेमोरी, डिस्क, नेटवर्क)।
  4. व्यावसायिक डैशबोर्ड: राजस्व, ऑर्डर, उपयोगकर्ता गतिविधि।

सेवा डैशबोर्ड के लिए लाल विधि

प्रत्येक सेवा के लिए, प्रदर्शित करें:

  • आरएट: अनुरोध प्रति सेकंड
  • त्रुटि: प्रतिशत के रूप में त्रुटि दर
  • डीउरेशन: विलंबता वितरण (पी50, पी95, पी99)

यह संज्ञानात्मक अधिभार के बिना सेवा स्वास्थ्य में तत्काल दृश्यता प्रदान करता है।


संतरी के साथ ट्रैकिंग में त्रुटि

// sentry.config.ts
import * as Sentry from '@sentry/nestjs';

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.NODE_ENV,
  tracesSampleRate: 0.1,
  profilesSampleRate: 0.1,
  integrations: [
    Sentry.postgresIntegration(),
  ],
  beforeSend(event) {
    // Strip sensitive data
    if (event.request?.headers) {
      delete event.request.headers['authorization'];
      delete event.request.headers['cookie'];
    }
    return event;
  },
});

संतरी प्रदान करता है:

  • स्वचालित त्रुटि समूहन और डिडुप्लीकेशन
  • स्रोत मानचित्रों के साथ ढेर के निशान
  • रिलीज़ ट्रैकिंग (जिस परिनियोजन से त्रुटि उत्पन्न हुई)
  • प्रदर्शन की निगरानी (लेन-देन के निशान)

अक्सर पूछे जाने वाले प्रश्न

एक निगरानी स्टैक की लागत कितनी है?

स्व-होस्टेड (प्रोमेथियस + ग्राफाना + लोकी): होस्टिंग संसाधनों के लिए लगभग $50-100/माह। प्रबंधित विकल्प: डेटाडॉग बुनियादी ढांचे के लिए $15/होस्ट/माह से शुरू होता है, साथ ही लॉग के लिए $0.10/जीबी से शुरू होता है। टीम योजना के लिए सेंट्री क्लाउड $26/माह है। एक छोटे व्यवसाय के लिए एक उचित प्रारंभिक बजट कुल $100-200/माह है।

निगरानी और अवलोकन के बीच क्या अंतर है?

मॉनिटरिंग आपको बताती है कि कब कुछ गलत है। अवलोकनशीलता आपको बताती है कि क्यों। मॉनिटरिंग ज्ञात विफलता मोड के लिए पूर्वनिर्धारित डैशबोर्ड और अलर्ट के बारे में है। अवलोकनशीलता मेट्रिक्स, लॉग और ट्रेस का उपयोग करके आपके सिस्टम के व्यवहार के बारे में मनमाने ढंग से प्रश्न पूछने की क्षमता के बारे में है। आपको दोनों की आवश्यकता है, लेकिन निगरानी इसका आधार है।

हम सतर्क थकान से कैसे बचें?

तीन नियम: (1) प्रत्येक अलर्ट के लिए मानवीय कार्रवाई की आवश्यकता होनी चाहिए, (2) सैद्धांतिक आदर्शों के बजाय वास्तविक आधार रेखाओं के आधार पर सीमाएँ निर्धारित करें, (3) अलर्ट की मासिक समीक्षा करें और ट्यून करें। यदि कोई अलर्ट बिना कार्रवाई की आवश्यकता के प्रति सप्ताह एक से अधिक बार सक्रिय होता है, तो या तो अंतर्निहित समस्या को ठीक करें या सीमा बढ़ाएँ। अलर्ट थकान से पीड़ित टीमें महत्वपूर्ण अलर्ट सहित सभी अलर्ट को नजरअंदाज कर देती हैं।

क्या हमें अपने ईआरपी सिस्टम की निगरानी अलग तरीके से करनी चाहिए?

ईआरपी सिस्टम की अद्वितीय निगरानी आवश्यकताएँ होती हैं। मानक वेब मेट्रिक्स से परे, मॉनिटर: डेटाबेस कनेक्शन पूल उपयोग, पृष्ठभूमि नौकरी कतार गहराई, एकीकरण सिंक स्थिति (शॉपिफाई, भुगतान गेटवे), निर्धारित रिपोर्ट निष्पादन समय, और मॉड्यूल द्वारा उपयोगकर्ता सत्र गणना। ECOSIRE हमारे समर्थन पैकेज के हिस्से के रूप में प्रबंधित ओडू मॉनिटरिंग प्रदान करता है।


आगे क्या आता है

निगरानी आपके उत्पादन बुनियादी ढांचे की आंखें और कान हैं। तैनाती के आत्मविश्वास के लिए इसे CI/CD स्वचालन और लचीलेपन के लिए आपदा पुनर्प्राप्ति योजना के साथ जोड़ें। व्यापक DevOps रोडमैप के लिए, हमारा छोटे व्यवसायों के लिए DevOps गाइड देखें।

सेटअप और प्रबंधित बुनियादी ढांचा सेवाओं की निगरानी के लिए ECOSIRE से संपर्क करें।


ECOSIRE द्वारा प्रकाशित - व्यवसायों को यह देखने में मदद करना कि उत्पादन में क्या मायने रखता है।

शेयर करें:
E

लेखक

ECOSIRE Research and Development Team

ECOSIRE में एंटरप्राइज़-ग्रेड डिजिटल उत्पाद बना रहे हैं। Odoo एकीकरण, ई-कॉमर्स ऑटोमेशन, और AI-संचालित व्यावसायिक समाधानों पर अंतर्दृष्टि साझा कर रहे हैं।

WhatsApp पर चैट करें