DevOps बूटकैंप · पाठ

रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ

लाइव लॉग धाराओं को पढ़कर फ़िल्टर करें, ताकि त्रुटि पैटर्न दिखाई देते ही चेतावनियाँ सक्रिय हो जाएँ।

पाठ 2, कुल 4 में से13 चरण

रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ, CoddyKit पर DevOps बूटकैंप का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह DevOps बूटकैंप सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। DevOps बूटकैंप पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

रीयल-टाइम लॉग फ़ॉलो करना क्यों महत्वपूर्ण है

उत्पादन प्रणालियों में लॉग फ़ाइलें लगातार बढ़ती रहती हैं। समस्या की सूचना मिलने तक लॉग की जाँच करने की प्रतीक्षा करने का अर्थ है कि डाउनटाइम से आपको पहले ही नुकसान हो चुका है। रीयल-टाइम लॉग फ़ॉलो करना आपको घटनाएँ लिखे जाते ही घटित होते देखने देता है, जिससे विफलताओं, सुरक्षा घटनाओं और प्रदर्शन में गिरावट पर तुरंत प्रतिक्रिया दी जा सकती है।

  • वेब सर्वर हर अनुरोध के लिए एक पंक्ति लिखते हैं — त्रुटियाँ तुरंत दिखाई देती हैं
  • अनुप्रयोग डेमॉन अपवाद उत्पन्न होते ही स्टैक ट्रेस लॉग करते हैं
  • प्रमाणीकरण प्रणालियाँ असफल लॉगिन प्रयासों को रीयल टाइम में दर्ज करती हैं

इसके लिए मूल Unix टूल tail -f है, जिसे फ़िल्टरिंग और चेतावनी उपयोगिताओं के साथ मिलाकर कच्ची लॉग धाराओं को कार्रवाई योग्य संकेतों में बदला जा सकता है।

tail -f: लाइव लॉग फ़ॉलो करना

tail -f (फ़ॉलो) फ़ाइल को खुला रखता है और जोड़ी गई नई पंक्तियों को प्रिंट करता है। यह रीयल-टाइम लॉग के लिए सबसे सरल और लगभग हर जगह उपलब्ध टूल है।

आम उपयोग के तरीके:

  • tail -f /var/log/syslog — सिस्टम लॉग फ़ॉलो करें
  • tail -n 50 -f app.log — पहले अंतिम 50 पंक्तियाँ दिखाएँ, फिर फ़ॉलो करें
  • tail -f /var/log/nginx/access.log — nginx अनुरोधों को लाइव फ़ॉलो करें

रोकने के लिए Ctrl+C दबाएँ। जब तक आप इसे रद्द नहीं करते या टर्मिनल बंद नहीं होता, प्रक्रिया जुड़ी रहती है।

#!/usr/bin/env bash
# Simulate a live log and follow it
LOGFILE='/tmp/demo_app.log'

# Write a header
echo '[INFO] Application started' >> "$LOGFILE"

# In a real scenario you would run:
# tail -f "$LOGFILE"
# Below we demonstrate tail showing the last 3 lines then exit
tail -n 3 "$LOGFILE"

tail -F: लॉग रोटेशन के बाद भी काम करना

कई प्रणालियाँ आधी रात को या आकार सीमा तक पहुँचने पर लॉग फ़ाइलों को रोटेट करती हैं। ऐसा होने पर मूल फ़ाइल का नाम बदल दिया जाता है (जैसे app.log.1) और नई app.log बनाई जाती है। tail -f के साथ आप चुपचाप पुरानी नाम बदली गई फ़ाइल पढ़ते रहते हैं और सभी नए आउटपुट से चूक जाते हैं।

tail -F (बड़ा F) फ़ाइल डिस्क्रिप्टर के बजाय फ़ाइल नाम पर नज़र रखकर इस समस्या को हल करता है। जब फ़ाइल गायब होकर फिर दिखाई देती है, तो tail -F उसे अपने-आप फिर खोलता है और फ़ॉलो करना जारी रखता है।

  • उत्पादन स्क्रिप्ट में हमेशा tail -f के बजाय tail -F को प्राथमिकता दें
  • यह logrotate, newsyslog और फ़ाइलों को रोटेट करने वाले Docker लॉग ड्राइवरों के साथ काम करता है
# Follow nginx access log, surviving log rotation
tail -F /var/log/nginx/access.log

# Follow multiple files simultaneously
tail -F /var/log/nginx/access.log /var/log/nginx/error.log

grep से धारा को फ़िल्टर करना

व्यस्त लॉग को कच्चे रूप में फ़ॉलो करना भारी पड़ सकता है — सक्रिय वेब सर्वर प्रति सेकंड सैकड़ों पंक्तियाँ लिख सकता है। केवल अपने इच्छित पैटर्न अलग करने के लिए tail -F के आउटपुट को grep में पाइप करें।

स्ट्रीमिंग grep के लिए प्रमुख फ़्लैग:

  • --line-buffered — बफ़र करने के बजाय हर मिलान वाली पंक्ति को तुरंत फ्लश करें; पाइपलाइनों में यह अनिवार्य है, वरना आउटपुट देर से आएगा या खो जाएगा
  • -i — बड़े-छोटे अक्षरों की परवाह किए बिना मिलान
  • -E — विकल्पों के लिए विस्तारित रेगेक्स (error|warn|crit)
  • -v — मिलान उलटें (पंक्तियाँ बाहर करें)
# Show only ERROR and WARN lines from a live application log
tail -F /var/log/myapp/app.log | grep --line-buffered -Ei 'error|warn|critical'

# Follow nginx and exclude health-check requests
tail -F /var/log/nginx/access.log | grep --line-buffered -v '/health'

awk से टाइमस्टैम्प और संदर्भ जोड़ना

लॉग पंक्तियों में कभी-कभी समस्या की प्रारंभिक जाँच में सहायक संदर्भ नहीं होता। awk का उपयोग करके आप रीयल टाइम में धारा को समृद्ध कर सकते हैं — स्थानीय टाइमस्टैम्प जोड़कर, फ़ील्ड निकालकर या पठनीयता के लिए आउटपुट का पुनःस्वरूपण करके।

पाइप से जोड़े जाने पर awk स्ट्रीमिंग (पंक्ति-बफ़रित) मोड में भी चलता है, इसलिए अतिरिक्त फ़्लैग के बिना लाइव पाइपलाइनों में इसका उपयोग सुरक्षित है।

# Prepend a reception timestamp to every ERROR line
tail -F /var/log/myapp/app.log | \
  grep --line-buffered -i 'error' | \
  awk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0; fflush() }'

# Extract HTTP status code (field 9) and URL (field 7) from nginx combined log
tail -F /var/log/nginx/access.log | \
  awk '{ print $9, $7; fflush() }' | \
  grep --line-buffered '^5'

Slack वेबहुक से चेतावनियाँ भेजना

फ़िल्टरिंग काम का केवल आधा हिस्सा है — त्रुटि पैटर्न का पता चलने के बाद आपको किसी को सूचित करना होता है। Slack का इनकमिंग वेबहुक आपको एक ही curl कॉल से किसी चैनल पर POST संदेश भेजने देता है; वेबहुक URL के अलावा Slack SDK या क्रेडेंशियल की आवश्यकता नहीं होती।

तरीका यह है: धारा को फ़िल्टर करें और हर मिलान वाली पंक्ति के लिए HTTP POST भेजें।

#!/usr/bin/env bash
# Real-time alert: send every ERROR line to a Slack channel
LOGFILE='/var/log/myapp/app.log'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  payload=$(printf '{"text":"*[ERROR ALERT]*\n%s"}' "$line")
  curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
    -d "$payload" "$WEBHOOK_URL"
done

शोर रोकने के लिए चेतावनियों की दर सीमित करना

लॉग की बाढ़ प्रति मिनट हज़ारों त्रुटि पंक्तियाँ उत्पन्न कर सकती है। हर पंक्ति के लिए एक Slack संदेश भेजने से चैनल भर जाएगा और चेतावनी-थकान पैदा होगी। आपको दर-सीमा निर्धारण की आवश्यकता है — चेतावनी भेजें, फिर शीतलन अवधि तक आगे की सूचनाएँ रोक दें।

यह एक सरल टाइमस्टैम्प फ़ाइल से किया जाता है: अंतिम चेतावनी भेजे जाने का समय दर्ज करें और यदि शीतलन अवधि पूरी नहीं हुई है तो चेतावनी न भेजें।

#!/usr/bin/env bash
# Alert on ERROR lines but no more than once every 60 seconds
LOGFILE='/var/log/myapp/app.log'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'
COOLDOWN=60
LAST_ALERT_FILE='/tmp/last_alert_ts'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  now=$(date +%s)
  last=0
  [ -f "$LAST_ALERT_FILE" ] && last=$(cat "$LAST_ALERT_FILE")

  if (( now - last >= COOLDOWN )); then
    echo "$now" > "$LAST_ALERT_FILE"
    payload=$(printf '{"text":"*[ERROR ALERT]*\n%s"}' "$line")
    curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
      -d "$payload" "$WEBHOOK_URL"
    echo "[$(date)] Alert sent: $line"
  else
    echo "[$(date)] Suppressed (cooldown): $line"
  fi
done

स्लाइडिंग विंडो से त्रुटियों की बाढ़ गिनना

कभी-कभी एक अकेली त्रुटि पंक्ति महत्वपूर्ण नहीं होती — लेकिन 30 सेकंड में 20 त्रुटियाँ गंभीर समस्या हैं। स्लाइडिंग-विंडो काउंटर आपको केवल तब चेतावनी देने देता है जब त्रुटि दर की सीमा पार हो जाए, जिससे झूठे सकारात्मक परिणाम कम होते हैं।

इस तकनीक में हर मिलान हुई घटना का epoch टाइमस्टैम्प एक अस्थायी फ़ाइल में रखा जाता है, फिर यह तय करने से पहले गिना जाता है कि विंडो के भीतर कितनी घटनाएँ आती हैं।

#!/usr/bin/env bash
# Alert when more than 10 errors occur within any 60-second window
LOGFILE='/var/log/myapp/app.log'
WINDOW=60
THRESHOLD=10
TS_FILE='/tmp/error_timestamps'
WEBHOOK_URL='https://hooks.slack.com/services/T000/B000/XXXX'

tail -F "$LOGFILE" | grep --line-buffered -i 'error' | while IFS= read -r line; do
  now=$(date +%s)
  echo "$now" >> "$TS_FILE"

  # Keep only timestamps within the window
  cutoff=$(( now - WINDOW ))
  tmp=$(mktemp)
  awk -v c="$cutoff" '$1 > c' "$TS_FILE" > "$tmp" && mv "$tmp" "$TS_FILE"

  count=$(wc -l < "$TS_FILE")
  if (( count > THRESHOLD )); then
    msg="*[BURST ALERT]* ${count} errors in ${WINDOW}s — last: ${line}"
    curl -s -o /dev/null -X POST -H 'Content-Type: application/json' \
      -d "{\"text\":\"$msg\"}" "$WEBHOOK_URL"
    # Clear to avoid re-alerting until next burst
    > "$TS_FILE"
  fi
done

journalctl -f: systemd जर्नल फ़ॉलो करना

आधुनिक Linux प्रणालियों (RHEL, Ubuntu 20.04+, Debian 10+) में सेवाएँ साधारण टेक्स्ट फ़ाइलों के बजाय systemd जर्नल में लिखती हैं। जर्नल के लिए journalctl -f, tail -F के समतुल्य है।

उपयोगी फ़्लैग:

  • -u myapp.service — केवल किसी विशिष्ट यूनिट को फ़ॉलो करें
  • -p err — प्राथमिकता के आधार पर फ़िल्टर करें (emerg, alert, crit, err, warning, notice, info, debug)
  • --since '5 min ago' — सापेक्ष समय से शुरू करें
  • -o json — मशीन द्वारा पार्स करने के लिए संरचित JSON आउटपुट
# Follow only error-and-above entries for nginx
journalctl -f -u nginx.service -p err

# Stream journal as JSON and extract MESSAGE field with jq
journalctl -f -u myapp.service -o json | \
  jq --unbuffered -r 'select(.PRIORITY <= "3") | .MESSAGE'

multitail और रंग-कोडित बहु-स्रोत निगरानी

जब आपको एक साथ कई लॉग स्रोतों पर नज़र रखनी हो, तो multitail टर्मिनल को पैन में बाँट देता है — हर पैन अलग फ़ाइल या कमांड को फ़ॉलो करता है — और पैटर्न के आधार पर वैकल्पिक रंग-कोडिंग भी देता है।

यदि multitail इंस्टॉल नहीं है, तो हल्का शुद्ध-Bash विकल्प यह है कि हर धारा के आगे स्रोत का नाम जोड़कर उन्हें एक दृश्य में मिला दिया जाए।

# multitail: watch nginx access + error + app log in split panes
# (requires: apt install multitail  or  brew install multitail)
multitail /var/log/nginx/access.log /var/log/nginx/error.log /var/log/myapp/app.log

# Pure-Bash alternative — merge three streams with labeled prefixes
(
  tail -F /var/log/nginx/access.log | sed --unbuffered 's/^/[nginx-access] /' &
  tail -F /var/log/nginx/error.log  | sed --unbuffered 's/^/[nginx-error]  /' &
  tail -F /var/log/myapp/app.log    | sed --unbuffered 's/^/[myapp]        /' &
  wait
)

स्व-निहित चेतावनी डेमॉन बनाना

इस पाठ की सभी बातों को मिलाकर, उत्पादन-स्तर के चेतावनी डेमॉन को यह करना चाहिए:

  • tail -F से लॉग फ़ाइल को विश्वसनीय रूप से फ़ॉलो करना
  • बफ़रयुक्त grep से महत्वपूर्ण पैटर्न फ़िल्टर करना
  • चेतावनी-थकान से बचने के लिए सूचनाओं की दर सीमित करना
  • अपनी गतिविधि लॉग करना, ताकि भेजी गई चीज़ों का ऑडिट किया जा सके
  • systemd या किसी पर्यवेक्षक द्वारा प्रबंधित पृष्ठभूमि प्रक्रिया के रूप में चलना

नीचे दी गई स्क्रिप्ट एक न्यूनतम लेकिन संपूर्ण डेमॉन है, जिसे आप /usr/local/bin/ में रखकर systemd से प्रबंधित कर सकते हैं।

#!/usr/bin/env bash
# log_alert_daemon.sh — tail a log and fire Slack alerts with cooldown
set -euo pipefail

LOGFILE=${1:-'/var/log/myapp/app.log'}
PATTERN=${2:-'error|critical|fatal'}
WEBHOOK_URL=${SLACK_WEBHOOK_URL:?'Set SLACK_WEBHOOK_URL env var'}
COOLDOWN=${ALERT_COOLDOWN:-120}
DAEMON_LOG='/var/log/log_alert_daemon.log'
LAST_SENT_FILE='/tmp/log_alert_last_sent'

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$DAEMON_LOG"; }

log "Starting alert daemon: watching $LOGFILE for pattern: $PATTERN"

tail -F "$LOGFILE" | grep --line-buffered -Ei "$PATTERN" | while IFS= read -r line; do
  now=$(date +%s)
  last=0
  [ -f "$LAST_SENT_FILE" ] && last=$(cat "$LAST_SENT_FILE")

  if (( now - last >= COOLDOWN )); then
    echo "$now" > "$LAST_SENT_FILE"
    msg=$(printf '{"text":"*[ALERT]* %s\n%s"}' "$(hostname)" "$line")
    if curl -s -o /dev/null -w '%{http_code}' -X POST \
         -H 'Content-Type: application/json' -d "$msg" "$WEBHOOK_URL" | grep -q '^200$'; then
      log "Alert sent: $line"
    else
      log "Alert FAILED to send: $line"
    fi
  else
    log "Suppressed (cooldown ${COOLDOWN}s): $line"
  fi
done

ज्ञान जाँच: स्ट्रीमिंग लॉग पाइपलाइनें

रीयल-टाइम लॉग फ़ॉलो करने और स्ट्रीमिंग चेतावनियों की अपनी समझ जाँचें।

एक Bash पाइपलाइन लॉग फ़ाइल को फ़ॉलो करती है और हर मिलान वाली पंक्ति के लिए Slack चेतावनी भेजती है। लॉग की बाढ़ के दौरान 10 सेकंड में 3,000 त्रुटि पंक्तियाँ लिखी जाती हैं। कौन-सा एक बदलाव स्क्रिप्ट को Slack चैनल में 3,000 संदेश भेजकर भर देने से सबसे अच्छी तरह रोकता है?

पाठ का पुनरावलोकन: रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ

इस पाठ में आपने मूल सिद्धांतों से एक संपूर्ण रीयल-टाइम लॉग निरीक्षण पाइपलाइन बनाई:

  • tail -F लॉग फ़ाइल को नाम से फ़ॉलो करता है और लॉग रोटेशन के बाद भी काम करता है — उत्पादन में हमेशा इसे tail -f पर प्राथमिकता दें
  • grep --line-buffered लाइव धारा को विलंब जोड़े बिना फ़िल्टर करता है; पाइप किए गए grep कमांड में यह फ़्लैग हमेशा जोड़ें
  • fflush() वाले awk से स्ट्रीमिंग के लिए सुरक्षित तरीके से हर पंक्ति में टाइमस्टैम्प या निकाले गए फ़ील्ड जोड़े जा सकते हैं
  • curl के माध्यम से Slack वेबहुक एक HTTP POST से चेतावनियाँ पहुँचाते हैं — SDK आवश्यक नहीं
  • शीतलन फ़ाइलें सूचनाओं के बीच न्यूनतम अंतराल लागू करके लॉग की बाढ़ के दौरान चेतावनी-थकान रोकती हैं
  • स्लाइडिंग-विंडो काउंटर हर पंक्ति पर प्रतिक्रिया देने के बजाय त्रुटियों की बाढ़ (दर-आधारित चेतावनी) का पता लगाते हैं
  • journalctl -f systemd का tail -F के समतुल्य मूल टूल है, जिसमें प्राथमिकता फ़िल्टरिंग और JSON आउटपुट अंतर्निहित हैं
  • एक स्व-निहित चेतावनी डेमॉन स्क्रिप्ट इन सभी पैटर्नों को मिलाती है और उत्पादन विश्वसनीयता के लिए systemd द्वारा प्रबंधित की जा सकती है

ये मूलभूत साधन मिलकर किसी भी कस्टम निरीक्षण पाइपलाइन की नींव बनाते हैं — किसी तृतीय-पक्ष एजेंट की आवश्यकता नहीं होती।

शुरुआत निःशुल्क

एआई शिक्षक के साथ DevOps बूटकैंप सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
142
पाठ
568

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

क्या “रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ” पाठ निःशुल्क है?

हाँ — DevOps बूटकैंप अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। DevOps बूटकैंप पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ” में मैं क्या सीखूँगा?

लाइव लॉग धाराओं को पढ़कर फ़िल्टर करें, ताकि त्रुटि पैटर्न दिखाई देते ही चेतावनियाँ सक्रिय हो जाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ DevOps बूटकैंप का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या DevOps बूटकैंप शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर DevOps बूटकैंप शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस DevOps बूटकैंप पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर DevOps बूटकैंप पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. बड़े पैमाने पर वेब और एप्लिकेशन लॉग पार्स करना
  2. रीयल-टाइम लॉग फ़ॉलो करना और स्ट्रीमिंग चेतावनियाँ
  3. स्क्रिप्ट में journalctl से journald को क्वेरी करना
  4. लॉग धाराओं से मेट्रिक और हिस्टोग्राम निकालना
← DevOps बूटकैंप पर वापस जाएँ