المقدمة
يصف هذا المستند أفضل ممارسات تكوين البرنامج النصي لإدارة الأحداث المضمنة (EEM) على أجهزة Cisco IOS® XE.
المتطلبات الأساسية
المتطلبات
توصي Cisco بأن تكون لديك معرفة بهذا الموضوع ودراية به:
- مدير الحدث المضمن IOS و Cisco IOS XE
إذا لم تكن على دراية بهذه الميزة بالفعل، فيرجى قراءة نظرة عامة على ميزة EEM أولا.
المكونات المستخدمة
تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:
- المحولات Cisco Catalyst 9300 و 9400 و 9500 switches
- برنامج IOS الإصدار 16.x أو 17.x من Cisco
ملاحظة: هذه البرامج النصية غير مدعومة من قبل Cisco TAC ويتم توفيرها على أساس ما هو لأغراض تعليمية.
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.
الاصطلاحات
أحلت cisco فني طرف إتفاق لمعلومة على وثيقة إتفاق.
أفضل الممارسات
ويغطي هذا القسم بعض أكثر المسائل شيوعا التي لوحظت عند تصميم وتنفيذ برامج التنفيذ المتكامل. لمزيد من المعلومات حول أفضل ممارسات EEM، راجع وثيقة أفضل ممارسات EEM المشار إليها ضمن قسم المراجع.
تأكيد وجود مصادقة مناسبة
إذا كان جهازك يستخدم المصادقة والتفويض والمحاسبة (AAA)، فيجب عليك التأكد من تكوين نصوص IM التي تم تكوينها على الجهاز باستخدام مستخدم المصادقة والتفويض والمحاسبة (AAA) القادر على تشغيل الأوامر في البرنامج النصي، أو من تكوين تجاوز التخويل باستخدام تجاوز تخويل الأوامر في تعريف البرنامج النصي.
إضافة قيود ل IM وقت التشغيل والحد الأقصى للمعدل
بشكل افتراضي، يمكن تشغيل برامج EEM النصية لمدة 20 ثانية كحد أقصى. إذا قمت بتصميم برنامج نصي يستغرق وقتا أطول للتشغيل، أو كان عليك الانتظار بين تنفيذ الأمر، فحدد قيمة maxRun على مشغل حدث البرنامج الصغير لتغيير مؤقت التنفيذ الافتراضي.
من المهم أيضا أخذ عدد المرات التي يمكن فيها تشغيل الحدث الذي يشغل برنامج حراك الآلي. إذا قمت بتشغيل نص تنفيذي من حالة تحدث بسرعة في فترة قصيرة من الوقت (على سبيل المثال، مشغل syslog لعلامات MAC)، فمن المهم تضمين شرط حد المعدل على نص IM لمنع عدد كبير من الإعدامات بالتوازي ومنع إستهلاك موارد الجهاز.
تجنب التنفيذ خارج الترتيب
كما هو موضح في وثائق IM، يتم التحكم في ترتيب تنفيذ عبارات الإجراء من خلال التسمية الخاصة بهم (على سبيل المثال، يشتمل الأمر 0001 cli على تسمية 0001). قيمة التسمية هذه ليست رقما، بل هي أبجدية رقمية. يتم فرز الإجراءات بتسلسل مفاتيح أبجدي رقمي تصاعدي، أستخدم وسيطة التسمية كمفتاح فرز، ويتم تشغيلها في هذا التسلسل. قد يؤدي ذلك إلى ترتيب غير متوقع للتنفيذ، بناء على كيفية هيكلة تسميات الإجراءات الخاصة بك.
تأمل في هذا المثال:
event manager applet test authorization bypass
event timer watchdog time 60 maxrun 60
action 13 syslog msg "You would expect to see this message first"
action 120 syslog msg "This message prints first"
بما أن 120 قبل 13 في مقارنة أبجدية رقمية، فإن هذا النص لا يعمل بالترتيب الذي تتوقعه. ولتجنب ذلك، من المفيد إستخدام نظام حشو مثل هذا:
event manager applet test authorization bypass
event timer watchdog time 60 maxrun 60
action 0010 syslog msg "This message appears first"
action 0020 syslog msg "This message appears second"
action 0120 syslog msg "This message appears third"
بسبب الحشو هنا، يتم تقييم الكشوف المرقمة بالترتيب المتوقع. تتيح الزيادة بمقدار 10 بين كل تسمية إدراج عبارات إضافية في نص IM لاحقا عند الحاجة، دون الحاجة إلى إعادة ترقيم كافة الجمل التالية.
تعطيل ترقيم الصفحات
تبحث EEM عن مطالبة الجهاز لتحديد وقت اكتمال إخراج الأمر. يمكن للأوامر التي تقوم بإخراج بيانات أكثر مما يمكن عرضه على شاشة واحدة (كما تم تكوينها بواسطة طول المحطة الطرفية الخاصة بك) منع إكمال برامج IM النصية (وفي نهاية المطاف يتم التخلص منها عبر مؤقت maxRun) حيث لا يتم عرض مطالبة الجهاز حتى يتم عرض جميع صفحات الإخراج. قم بتكوين المصطلح len 0 في بداية برامج IM النصية التي تفحص المخرجات الكبيرة.
تصميم البرامج النصية لضمان إمكانية الصيانة في المستقبل
عند تصميم برنامج نصي ل IM، أترك فجوات بين تسميات الإجراءات لتسهيل عملية تحديث منطق برنامج نصي IM في المستقبل. عندما تكون هناك فجوات مناسبة متاحة (أي أن عبارتين مثل الإجراء 0010 والإجراء 0020 يتركان فجوة مكونة من 9 تسميات يمكن إدراجها)، يمكن إضافة عبارات جديدة كما هو مطلوب دون إعادة ترقيم أو إعادة فحص تسميات الإجراءات وضمان إستمرار تنفيذ الإجراءات بالترتيب المتوقع.
هناك أوامر شائعة تحتاج إلى تشغيلها في بداية برامج IM النصية. ويمكن أن يشمل ذلك ما يلي:
- تعيين طول المحطة الطرفية إلى 0
- دخلت يمكن أسلوب
- إتاحة الطابع الزمني التلقائي لمخرجات الأمر
هذا نمط شائع في الأمثلة الموضحة في هذا المستند، حيث يبدأ العديد من البرامج النصية بنفس 3 عبارات إجراء لتكوين هذا.
أنماط منطق IM الشائعة
يغطي هذا القسم بعض الأنماط المنطقية الشائعة وكتل الصياغة المستخدمة في برامج IM النصية. الأمثلة هنا ليست نصوص كاملة، بل عروض توضيحية لكيفية إستخدام وظائف معينة لإنشاء نصوص متطورة ل IM.
مسارات التعليمات البرمجية الفرعية مع IF/Else
يمكن إستخدام متغيرات IM للتحكم في تدفق تنفيذ برامج IM النصية. تأملوا في هذا النص:
event manager applet snmp_cpu authorization bypass
event timer watchdog time 60
action 0010 info type snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3 get-type exact
action 0020 if $_info_snmp_value ge "50"
action 0030 syslog msg "This syslog message is sent if CPU utilization is above 50%"
action 0040 elseif $_info_snmp_value ge "30"
action 0050 syslog msg "This syslog message is sent if CPU utilization is above 30% and below 50%"
action 0060 else
action 0070 syslog msg "This syslog message is sent if CPU utilization is below 30%"
action 0080 end
يتم تشغيل هذا البرنامج النصي كل دقيقة. افحص قيمة معرف فئة SNMP لاستخدام وحدة المعالجة المركزية، ثم أدخل مسار تنفيذ واحدا من ثلاثة مسارات مختلفة استنادا إلى قيمة معرف المستخدم (OID). يمكن إستخدام عبارات مماثلة على أي متغير قانوني آخر لإنشاء تدفقات تنفيذ معقدة في نصوص IM.
التكرار عبر جمل
يمكن إستخدام حلقات التنفيذ لتقصير نصوص التنفيذ المتكاملة بشكل كبير، وجعلها أسهل للتحليل. فكر في هذا البرنامج النصي، المصمم لسحب إحصائيات الواجهة ل TE2/1/15 6 مرات خلال دقيقة واحدة للتحقق من الفترات الصغيرة ذات الاستخدام العالي:
event manager applet int_util_check auth bypass
event timer watchdog time 300 maxrun 120
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 syslog msg "Running iteration 1 of command"
action 0020 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0030 wait 10
action 0040 syslog msg "Running iteration 2 of command"
action 0050 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0060 wait 10
action 0070 syslog msg "Running iteration 3 of command"
action 0080 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0090 wait 10
action 0100 syslog msg "Running iteration 4 of command"
action 0110 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0120 wait 10
action 0130 syslog msg "Running iteration 5 of command"
action 0140 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0150 wait 10
action 0160 syslog msg "Running iteration 6 of command"
action 0170 cli command "show interface te2/1/15 | append flash:interface_util.txt"
مع عمليات إنشاء حلقة IM، يمكن تقليل هذا البرنامج النصي بشكل كبير:
event manager applet int_util_check auth bypass
event timer watchdog time 300 maxrun 120
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 set loop_iteration 1
action 0020 while $loop_iteration le 6
action 0030 syslog msg "Running iteration $loop_iteration of command"
action 0040 cli command "show interface te2/1/15 | append flash:interface_util.txt"
action 0050 wait 10
action 0060 increment loop_iteration 1
action 0070 end
إستخراج الإخراج عبر التعبيرات العادية (regex)
يمكن إستخدام جملة IM reexp لاستخراج القيم من مخرجات الأمر التي سيتم إستخدامها في الأوامر التالية وتمكين إنشاء الأمر الديناميكي داخل برنامج IM النصي نفسه. ارجع إلى كتلة الرمز هذه على سبيل المثال لاستخراج PID الخاص بمحرك SNMP من إخراج وحدة المعالجة المركزية show proc | محرك SNMP وطباعته على رسالة syslog. هذا يستخرج قيمة أيضا يستطيع كنت استعملت في آخر أمر أن يتطلب PID أن يركض.
event manager applet check_pid auth bypass
event none
action 0010 cli command "show proc cpu | i SNMP ENGINE"
action 0020 regexp "^[ ]*([0-9]+) .*" $_cli_result match match1
action 0030 syslog msg "Found SNMP Engine PID $match1"
نصوص IM مفيدة
تعقب عنوان MAC محدد لتعلم عنوان MAC
في هذا المثال، يتم تعقب عنوان MAC b4e9.b0d3.6a41. يتحقق البرنامج النصي كل 30 ثانية لترى إذا ما كان عنوان MAC المحدد قد تم تعلمه في جداول ARP أو MAC. إذا كان ماك يرى، فإن النص التنفيذي يأخذ تلك العمليات:
- ينتج رسالة syslog (يكون هذا مفيدا عندما تريد تأكيد مكان تعلم عنوان MAC، أو متى/كم مرة يتم تعلمه).
التنفيذ
event manager applet mac_trace authorization bypass
event timer watchdog time 30
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 cli command "show ip arp | in b4e9.b0d3.6a41"
action 0020 regexp ".*(ARPA).*" $_cli_result
action 0030 if $_regexp_result eq 1
action 0040 syslog msg $_cli_result
action 0050 end
action 0060 cli command "show mac add vlan 1 | in b4e9.b0d3.6a41"
action 0070 regexp ".*(DYNAMIC).*" $_cli_result
action 0080 if $_regexp_result eq 1
action 0090 syslog msg $_cli_result
action 0100 end
مراقبة وحدة المعالجة المركزية العالية عبر SNMP OID
يراقب هذا البرنامج النصي SNMP OID المستخدم لقراءة النسبة المئوية لازدحام وحدة المعالجة المركزية (CPU) في آخر 5 ثوان. عندما يكون المعالج مشغولا أكثر من 80٪، يأخذ البرنامج النصي تلك العمليات:
- ينشئ ختم وقت من مخرجات ساعة العرض، ويستخدم هذا لإنشاء اسم ملف فريد
- وبعد ذلك تتم كتابة مخرجات العملية وحالة البرامج إلى هذا الملف
- يتم تكوين التقاط حزمة مضمنة (EPC) على التقاط 10 ثوان من حركة المرور الموجهة إلى مستوى التحكم وكتابتها إلى ملف.
- بمجرد اكتمال التقاط EPC، تتم إزالة تكوين EPC، ويخرج البرنامج النصي.
التنفيذ
event manager applet high-cpu authorization bypass
event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3 get-type next entry-op gt entry-val 80 poll-interval 1 ratelimit 300 maxrun 180
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 syslog msg "High CPU detected, gathering system information."
action 0020 cli command "show clock"
action 0030 regex "([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9])" $_cli_result match match1
action 0040 string replace "$match" 2 2 "."
action 0050 string replace "$_string_result" 5 5 "."
action 0060 set time $_string_result
action 0070 cli command "show proc cpu sort | append flash:tac-cpu-$time.txt"
action 0080 cli command "show proc cpu hist | append flash:tac-cpu-$time.txt"
action 0090 cli command "show proc cpu platform sorted | append flash:tac-cpu-$time.txt"
action 0100 cli command "show interface | append flash:tac-cpu-$time.txt"
action 0110 cli command "show interface stats | append flash:tac-cpu-$time.txt"
action 0120 cli command "show log | append flash:tac-cpu-$time.txt"
action 0130 cli command "show ip traffic | append flash:tac-cpu-$time.txt"
action 0140 cli command "show users | append flash:tac-cpu-$time.txt"
action 0150 cli command "show platform software fed switch active punt cause summary | append flash:tac-cpu-$time.txt"
action 0160 cli command "show platform software fed switch active cpu-interface | append flash:tac-cpu-$time.txt"
action 0170 cli command "show platform software fed switch active punt cpuq all | append flash:tac-cpu-$time.txt"
action 0180 cli command "no monitor capture tac_cpu"
action 0190 cli command "monitor capture tac_cpu control-plane in match any file location flash:tac-cpu-$time.pcap"
action 0200 cli command "monitor capture tac_cpu start" pattern "yes"
action 0210 cli command "yes"
action 0220 wait 10
action 0230 cli command "monitor capture tac_cpu stop"
action 0240 cli command "no monitor capture tac_cpu"
مطابقة PID بشكل ديناميكي وإخراج مكدس السجلات
يبحث هذا البرنامج النصي عن رسالة syslog أن قائمة انتظار إدخالات SNMP ممتلئة ويتخذ هذه الإجراءات:
- تسجيل إخراج فرز وحدة المعالجة المركزية show proc إلى ملف
- يستخرج معرف عملية محرك SNMP من خلال regex
- يستخدم معرف SNMP PID في الأوامر التالية للحصول على بيانات المكدس لمعرف العملية (PID)
- يزيل البرنامج النصي من التكوين حتى لا يحدث المزيد من الإعدامات به
التنفيذ
event manager applet TAC-SNMP-INPUT-QUEUE-FULL authorization bypass
event syslog pattern "INPUT_QFULL_ERR" ratelimit 40 maxrun 120
action 0010 cli command "en"
action 0020 cli command "show proc cpu sort | append flash:TAC-SNMP.txt"
action 0030 cli command "show proc cpu | i SNMP ENGINE"
action 0040 regexp "^[ ]*([0-9]+) .*" $_cli_result match match1
action 0050 syslog msg "Found SNMP Engine PID $match1"
action 0060 cli command "show stacks $match1 | append flash:TAC-SNMP.txt"
action 0070 syslog msg "$_cli_result"
action 0080 cli command "configure terminal"
action 0090 cli command "no event manager applet TAC-SNMP-INPUT-QUEUE-FULL"
action 0100 cli command "end"
ترقية محول
تم تكوين هذا البرنامج النصي لتطابق الحشو في المطالبة غير القياسية التي تم إرجاعها بواسطة أمر تثبيت ملف <file> تنشيط تأكيد والاستجابة إلى المطالبات. لم يتم تكوين أي حدث مشغل، لذلك يجب تشغيل برنامج IM النصي يدويا بواسطة مستخدم عندما يلزم حدوث الترقية عبر إدارة الأحداث التي تقوم بتشغيل الترقية. تم تعيين مؤقت maxRun لمدة 300 ثانية بدلا من القيمة الافتراضية التي تبلغ 20 ثانية حيث يستغرق الأمر install add مقدار كبير من الوقت للتشغيل.
التنفيذ
event manager applet UPGRADE authorization bypass
event none maxrun 300
action 0001 cli command "enable"
action 0002 cli command "term length 0"
action 0020 cli command "install add file flash:cat9k_iosxe.16.06.02.SPA.bin activate commit" pattern "y\/n"
action 0030 cli command "y" pattern "y\/n"
action 0040 syslog msg "Reloading device to upgrade code"
action 0050 cli command "y"
تفريغ البيانات التشخيصية إلى ملف عند انتقال كائن IP SLA المتتبع إلى أسفل
يتم تشغيل هذا البرنامج النصي عند انخفاض كائن IP SLA 11 واتخاذ هذه الإجراءات:
- تجميع جدول MAC وجدول ARP و syslogs وجدول التوجيه
- كتابة معلومات إلى ملف على flash: يسمى sla_track.txt
التنفيذ
ip sla 10
icmp-echo 10.10.10.10 source-ip 10.10.10.10
frequency 10
exit
ip sla schedule 10 life forever start-time now
track 11 ip sla 10 reachability
exit
event manager applet track-10 authorization bypass
event track 11 state down
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 syslog msg "IP SLA object 10 has gone down"
action 0020 cli command "show mac address-table detail | append flash:sla_track.txt"
action 0030 cli command "show ip arp | append flash:sla_track.txt"
action 0040 cli command "show log | append flash:sla_track.txt"
action 0050 cli command "show ip route | append flash:sla_track.txt"
إرسال بريد إلكتروني من IM
يتم تشغيل هذا البرنامج النصي عندما يتم رؤية النموذج الموضح في بيان نمط syslog للحدث، ويأخذ هذه العمليات:
- إرسال بريد إلكتروني من خادم بريد إلكتروني داخلي (يفترض هذا أن خادم البريد الإلكتروني الداخلي يسمح بالمصادقة المفتوحة من الجهاز).
التنفيذ
event manager environment email_from email_address@company.test
event manager environment email_server 192.168.1.1
event manager environment email_to dest_address@company.test
event manager applet email_syslog
event syslog pattern "SYSLOG PATTERN HERE” maxrun 60
action 0010 info type routername
action 0020 mail server "$email_server" to "$email_to" from "$email_from" subject "SUBJECT OF EMAIL - Syslog seen on $_info_routername" body “BODY OF YOUR EMAIL GOES HERE”
إيقاف تشغيل منفذ في جدول
يقوم هذا البرنامج النصي بإيقاف تشغيل المنفذ TE2/1/15 كل يوم في الساعة 6 مساء.
التنفيذ
event manager applet shut_port authorization bypass
event timer cron cron-entry "0 18 * * *"
action 0001 cli command "enable"
action 0002 cli command "term exec prompt timestamp"
action 0003 cli command "term length 0"
action 0010 syslog msg "shutting port Te2/1/15 down"
action 0030 cli command "config t"
action 0040 cli command "int Te2/1/15"
action 0050 cli command "shutdown"
action 0060 cli command "end"
إيقاف تشغيل الواجهة إذا تم الوصول إلى معدل حزم محدد في الثانية (PPS)
يتحقق هذا البرنامج النصي من معدل PPS على الواجهة Te2/1/9 في إتجاه TX كل ثانية. إذا تجاوز معدل PPS 100، فإنه يتخذ هذه الإجراءات:
- يسجل
show int الإنتاج للقارن أن syslog.
- يوقف تشغيل الواجهة.
التنفيذ
event manager applet disable_link authorization bypass
event interface name te2/1/9 parameter transmit_rate_pps entry-op ge entry-val 100 poll-interval 1 entry-type value
action 0001 cli command "enable"
action 0002 cli command "term length 0"
action 0010 syslog msg "Detecting high input rate on interface te2/1/9. Shutting interface down."
action 0020 cli command "show int te2/1/9"
action 0030 syslog msg $_cli_result
action 0040 cli command "config t"
action 0050 cli command "int te2/1/9"
action 0060 cli command "shutdown"
action 0070 cli command "end"
معلومات ذات صلة