مراقبة الشبكة: SNMP والسجلات والتدفقات
درس 1 من 4
1مراقبة الشبكة: SNMP والسجلات والتدفقات
الصورة الكبيرةفي مرحلة المبتدئ تعلمت أن تشخّص العطل بعد أن يحدث. في الشركة الحقيقية مئات الأجهزة، ولا أحد يريد أن يسمع بالعطل من المدير. المراقبة تجعل الشبكة تتكلم: وصلة امتلأت 90%، منفذ يزيد أخطاؤه، موجّه حرارته ترتفع. السؤال ليس هل تجمع البيانات، بل أي بيانات، وكيف تجعلها تنبيهًا يستحق أن يوقظ أحدًا.
ماذا تشاهد في الرسم: الأجهزة ترسل أو تُسأل، والبيانات تُخزّن كسلاسل زمنية، والرسوم تُظهر الاتجاه، والتنبيه يصل فقط حين يتجاوز شيء حدًا يحتاج تدخلًا.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
الشبكة مثل مريض في العناية المركزة. SNMP هو الممرضة التي تقيس الضغط كل خمس دقائق. السجلات (syslog) دفتر الملاحظات: «الساعة 3:12 سقط المنفذ 7». التدفقات (NetFlow) تقول من زار المريض وكم بقي. والقياس المتدفق جهاز يرسل نبض القلب كل ثانية. وكل هذا بلا فائدة إن كانت ساعات الغرف مختلفة، لذلك يضبط NTP كل الساعات على وقت واحد.
SNMP: المدير يسأل الجهاز (poll) على UDP 161 عن OIDs من MIB (مثل عدّادات ifHCInOctets بـ 64 بت)، والجهاز يرسل trap على UDP 162 عند حدث. استخدم SNMPv3 (مصادقة وتشفير بـ authPriv)، لا v2c بكلمة community نصية. syslog (RFC 5424) بثمانية مستويات من 0 Emergency إلى 7 Debug، على UDP 514 أو TLS على 6514. NetFlow v9 / IPFIX (RFC 7011) يصدّر سجلات التدفق (المصدر والوجهة والمنفذ والبايتات) لمعرفة من يستهلك. القياس المتدفق (gNMI على gRPC) يدفع البيانات كل ثوانٍ بنماذج YANG بدل السحب كل خمس دقائق. للفوترة والتخطيط تُستخدم النسبة المئوية 95: ترمي أعلى 5% من القراءات وتأخذ الأعلى بعدها.
قبل أن تبدأ
🧰أدوات التشخيص
تعرف ping وtraceroute وسلّم التشخيص.
🌐الشبكات الحديثة
مرّ بك معنى المراقبة والأتمتة باختصار.
الفكرة الجوهرية
1ماذا تقيس؟
لا تجمع كل شيء. ابدأ بما يجيب عن سؤال «هل الشبكة بخير؟». لكل وصلة وجهاز خمسة مؤشرات تغطي أغلب الأعطال:
| المؤشر | ماذا يكشف | من أين | حد تنبيه نموذجي |
|---|---|---|---|
| الحالة up/down | وصلة أو جهاز سقط | SNMP trap وsyslog | فورًا للوصلات الأساسية |
| الاستخدام % | وصلة تمتلئ | عدّادات SNMP | فوق 80% لمدة 15 دقيقة |
| الأخطاء والمرمي | كابل تالف أو ازدحام | ifInErrors وifOutDiscards | أي زيادة مستمرة |
| الكمون والفقد | تجربة المستخدم | ping وIP SLA | فقد فوق 1% |
| المعالج والذاكرة والحرارة | جهاز مرهق أو مروحة معطلة | SNMP | فوق 85% مستمر |
2SNMP: السؤال والتنبيه
المدير يسأل كل جهاز كل دقيقة إلى خمس دقائق عن عدّادات تتزايد دائمًا، مثل عدد البايتات الداخلة. الاستخدام يُحسب من الفرق بين قراءتين: (الفرق × 8) ÷ (الثواني × السرعة). استخدم العدّادات بـ 64 بت (HC)، لأن عدّاد 32 بت على وصلة 10 Gbps يلتف إلى الصفر كل نحو 3.4 ثانية.
هكذا ترسم كل أدوات المراقبة منحنى الاستخدام. جرّب أن تغيّر السرعة إلى 100 Mbps.
speed = 1_000_000_000 # 1 Gbps link
interval = 300 # polled every 5 minutes
readings = [812_440_120_331, 824_470_350_995, 851_521_903_117, 885_559_100_004] # ifHCInOctets
for before, after in zip(readings, readings[1:]):
bits = (after - before) * 8
print(f"{bits / interval / 1e6:7.1f} Mbps -> {100 * bits / (interval * speed):5.1f}% used")
wrap32 = 2 ** 32 * 8 / 10e9
print(f"a 32-bit counter wraps every {wrap32:.1f} s on 10 Gbps")3السجلات والوقت: syslog وNTP
كل جهاز يكتب أحداثه، وأنت ترسلها إلى خادم مركزي لأن الجهاز ينسى عند إعادة التشغيل. لكل رسالة مستوى من 0 إلى 7: كلما صغر الرقم زادت الخطورة. وبلا NTP تكون ساعة كل جهاز مختلفة، فلا تستطيع أن تقول ماذا حدث أولًا. اضبط كل الأجهزة على خوادم NTP نفسها، وعلى منطقة زمنية واحدة في السجلات (UTC).
الرقم بين < > يجمع الجهة والمستوى: المستوى هو باقي القسمة على 8.
import re
from collections import Counter
LEVELS = ["emerg", "alert", "crit", "err", "warning", "notice", "info", "debug"]
log = """<187>Nov 2 03:12:44 sw-acc-3 %LINK-3-UPDOWN: Interface Gi1/0/7, changed state to down
<189>Nov 2 03:12:45 sw-acc-3 %LINEPROTO-5-UPDOWN: Line protocol on Gi1/0/7, changed state to down
<187>Nov 2 03:13:02 sw-acc-3 %LINK-3-UPDOWN: Interface Gi1/0/7, changed state to up
<187>Nov 2 03:13:09 sw-acc-3 %LINK-3-UPDOWN: Interface Gi1/0/7, changed state to down
<186>Nov 2 03:15:30 rtr-edge-1 %SYS-2-MALLOCFAIL: Memory allocation failed
<190>Nov 2 03:16:00 sw-core-1 %SYS-6-LOGGINGHOST_STARTSTOP: Logging to host started"""
counts, flaps = Counter(), Counter()
for line in log.splitlines():
pri = int(re.match(r"<(\d+)>", line).group(1))
level = LEVELS[pri % 8] # priority = facility * 8 + severity
counts[level] += 1
port = re.search(r"Interface (\S+), changed state to down", line)
if port:
flaps[port.group(1)] += 1
print(dict(counts))
for port, n in flaps.items():
if n >= 2:
print(f"flapping port {port}: down {n} times -> check the cable")4التدفقات والقياس المتدفق وخط الأساس
SNMP يقول لك إن الوصلة ممتلئة، لكن لا يقول من يملؤها. NetFlow/IPFIX يجيب: الموجّه يلخّص كل محادثة (المصدر والوجهة والمنفذ والبايتات) ويرسلها لمحلّل. والقياس المتدفق يدفع العدّادات كل ثانية إلى عشر ثوانٍ، فترى الانفجارات القصيرة التي يخفيها متوسط خمس دقائق. وقبل أن تضع حدود التنبيه، اجمع أسبوعين وابنِ خط أساس: ما الطبيعي يوم الأحد الساعة 9؟
النسبة 95 تتجاهل لحظة شاذة واحدة، لذلك يُفوتر بها المزوّدون ويُخطط بها للسعة.
samples = [42, 38, 51, 47, 300, 45, 49, 55, 61, 58, 44, 39, 47, 52, 60,
57, 49, 41, 46, 53] # Mbps, one reading every 5 minutes
ordered = sorted(samples)
p95 = ordered[int(len(ordered) * 0.95) - 1]
print("average:", sum(samples) / len(samples), "Mbps")
print("peak :", max(samples), "Mbps")
print("95th :", p95, "Mbps (the short 300 Mbps burst is ignored)")مثال محلول
المسألة: المستخدمون في الفرع يشتكون أن الإنترنت «يثقل» بين 10 و11 صباحًا. لوحة SNMP تقول متوسط استخدام الوصلة 55%. ماذا تفعل؟
الحل: متوسط خمس دقائق يخفي الانفجارات، فشغّل قياسًا متدفقًا أو اسحب كل 30 ثانية لهذه الساعة لترى القمم. ثم افتح NetFlow لنفس الوقت لترى من يستهلك: لو وجدت نسخًا احتياطيًا سحابيًا يبدأ 10:00 فانقله لليل أو حدّده بـ QoS. وافحص ifOutDiscards على منفذ الخروج: الزيادة تعني أن الطابور يمتلئ ويرمي حزمًا.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| كلما جمعنا بيانات أكثر كان أفضل. | البيانات بلا سؤال تكلفة تخزين وضجيج. اجمع ما يجيب عن أسئلة تشغيلية محددة. |
| متوسط 50% يعني أن الوصلة مرتاحة. | قد تكون ممتلئة 100% لدقائق متفرقة. انظر للقمم والنسبة 95 والحزم المرمية. |
| SNMP قديم وانتهى. | ما زال في كل جهاز تقريبًا. القياس المتدفق يكمّله للتفاصيل اللحظية ولا يلغيه. |
أين تقابله في العمل
🖥️مركز عمليات الشبكة NOC
شاشات حية للحالة والاستخدام، وتنبيهات تذهب للمناوب.
💰تخطيط السعة
النسبة 95 خلال ستة أشهر تقول متى تحتاج وصلة أكبر.
🛡️الأمن
التدفقات تكشف جهازًا يرسل بيانات كثيرة إلى عنوان غريب ليلًا.
اختبر فهمك
على أي منفذ يرسل الجهاز SNMP trap؟
السؤال على 161، والتنبيه من الجهاز إلى المدير على 162.
رسالة syslog مستواها 2. ما معناها؟
0 طوارئ، 1 إنذار، 2 حرج، 3 خطأ، 4 تحذير، 5 ملاحظة، 6 معلومات، 7 تصحيح.
الوصلة ممتلئة. أي أداة تقول لك من يملؤها؟
التدفقات تسجل المصدر والوجهة والبايتات لكل محادثة.
لماذا تضبط كل الأجهزة على NTP؟
بلا وقت موحد لا تعرف أي حدث سبق الآخر.
لماذا تُفضّل عدّادات 64 بت على 10 Gbps؟
2³² بايت تمر في نحو 3.4 ثانية على 10 Gbps.
بطاقات مراجعة سريعة
تحقق من فهمك
لوحة تقول استخدام 40% والناس يشتكون. لماذا قد تكون اللوحة مضللة؟
لأنها متوسط فترات طويلة يخفي انفجارات قصيرة تملأ الطابور. انظر للقمم والحزم المرمية.
ما الفرق بين السحب (poll) والتنبيه (trap)؟
السحب يسأل فيه المدير على جدول ثابت، والتنبيه يرسله الجهاز وحده لحظة الحدث.
متى لا يستحق شيء أن يكون تنبيهًا؟
حين لا يحتاج تدخلًا بشريًا الآن؛ مكانه تقرير أو لوحة.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
أدوات1
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.