Πίσω στο blog

English  ·  Ελληνικά

Cisco / IOS  ·  Tutorial  ·  Αυγουστος 2026

Cisco IOS
Αυτοματοποιηση EEM

Ο router μπορεί να παρακολουθεί τα δικά του logs και να ενεργεί. Το Embedded Event Manager τρέχει μικρά applets που ενεργοποιούνται από ένα μήνυμα syslog, έναν timer, ή μια παρακολουθούμενη αστοχία — και απαντούν με εντολές CLI. Αυτόματη ανάκτηση μιας πεσμένης θύρας, snapshot του config τη στιγμή που αλλάζει, email σε ένα γεγονός. Scripting IOS, με τον τρόπο του RouterOS.

Cisco IOS EEM Automation Applet Event Manager Ops

EVENT syslog · timer · track · none ACTIONS cli · syslog · mail · reload EEM applet «Όταν συμβεί ΑΥΤΟ, τρέξε ΑΥΤΕΣ τις εντολές.» Κανένας εξωτερικός server, κανένα NMS — ζει στη συσκευή.

Το Embedded Event Manager είναι μια μικρή μηχανή αυτοματισμού ενσωματωμένη στο IOS. Κάθε applet έχει το ίδιο σχήμα: ένα event που το ενεργοποιεί (ένα μήνυμα syslog που ταιριάζει με ένα pattern, ένας timer, ένα παρακολουθούμενο αντικείμενο που αλλάζει state, μια χειροκίνητη εκτέλεση) και μια λίστα από actions που τρέχουν όταν πυροδοτηθεί — συνήθως εντολές CLI, συν logging ή email. Κανένας εξωτερικός orchestrator, κανένα NMS, κανένας agent: η λογική ζει στη συσκευή και συνεχίζει να δουλεύει ακόμα κι όταν είναι κάτω το δίκτυο διαχείρισης.

Αυτό κάνει το EEM τέλειο για τα μικρά, τοπικά αντανακλαστικά που αλλιώς θα καλούσαν έναν άνθρωπο: ξανα-ενεργοποίησε μια θύρα που έκλεισε ένα χαρακτηριστικό ασφάλειας, βγάλε snapshot το config τη στιγμή που κάποιος το αλλάζει, καθάρισε μπαγιάτικο NAT όταν κάνει failover ένα WAN, ή πυροδότησε μια ειδοποίηση σε συγκεκριμένο γεγονός. Είναι η απάντηση της Cisco στο scripting + scheduler του MikroTik — και συνδυάζεται με όλα τα προηγούμενα σε αυτή τη σειρά, αφού τα γεγονότα που παρακολουθεί (err-disable, track state, αλλαγή config) είναι ακριβώς αυτά που παράγουν εκείνα τα posts.

Προαπαιτουμενα

01

Ανατομια ενος Applet

Μία γραμμή event, αριθμημένες γραμμές action. Το απλούστερο χρήσιμο applet: κατέγραψε ένα προσαρμοσμένο μήνυμα όποτε πέφτει ένα interface. Ξεκίνα εδώ για να δεις το σχήμα.

IOS — ενα ελαχιστο applet με πυροδοτηση syslog
R1(config)# event manager applet LINK-DOWN-ALERT
# EVENT: πυροδότησε όταν εμφανιστεί ταιριαστό μήνυμα syslog
R1(config-applet)# event syslog pattern "Interface GigabitEthernet0/1, changed state to down"
# ACTIONS: αριθμημένα ώστε να τρέχουν με τη σειρά
R1(config-applet)# action 1.0 syslog msg "EEM: Gi0/1 went down — investigate"
R1(config-applet)# action 2.0 cli command "enable"
R1(config-applet)# action 3.0 cli command "show interface GigabitEthernet0/1" 
R1(config-applet)# action 4.0 syslog msg "EEM: captured interface state to buffer"
R1(config-applet)# end

# Επιβεβαίωσε ότι είναι εγγεγραμμένο και παρακολούθησε τον μετρητή εκτελέσεών του
R1# show event manager policy registered
R1# show event manager history events
⚠ Παγιδα — Τα Applets Τρεχουν Μη Διαδραστικα· Ξεκινα με "enable"

Οι actions CLI του EEM εκτελούνται σαν να πληκτρολογήθηκαν σε φρέσκο session, οπότε ξεκινούν σε user EXEC — αν μια action χρειάζεται privileged ή config mode, το applet πρέπει να περπατήσει μόνο του εκεί: action ... cli command "enable", μετά "configure terminal", μετά τις πραγματικές εντολές. Και δεν υπάρχει άνθρωπος να απαντήσει σε prompts: κάθε εντολή που κάνει ερώτηση θα κολλήσει εκτός αν είτε αποφύγεις τη διαδραστική μορφή είτε προσθέσεις action ... cli command "..." pattern "confirm" για να απαντήσει αυτόματα. Δοκίμασε κάθε applet σε εξοπλισμό lab — ένα applet που κάνει loop ή πυροδοτεί λάθος σε production είναι αυτοπροκαλούμενη διακοπή.

02

Περιπτωση Χρησης — Αυτοματη Ανακτηση Θυρας err-disabled

Το post Ασφάλεια Switch άφησε θύρες να γίνονται err-disabled σε παραβίαση, χρειαζόμενες χειροκίνητο bounce. Το EEM μπορεί να παρακολουθεί εκείνο το log και να ανακτά τη θύρα μετά από καθυστέρηση — χωρίς κλήση στο help-desk.

IOS — ανακτησε ενα err-disable απο psecure-violation
R1(config)# event manager applet PSECURE-RECOVER
R1(config-applet)# event syslog pattern "PSECURE_VIOLATION.*Gi0/5"
R1(config-applet)# action 1.0 syslog msg "EEM: Gi0/5 err-disabled — recovering in 60s"
R1(config-applet)# action 2.0 wait 60
R1(config-applet)# action 3.0 cli command "enable"
R1(config-applet)# action 4.0 cli command "configure terminal"
R1(config-applet)# action 5.0 cli command "interface Gi0/5"
R1(config-applet)# action 6.0 cli command "shutdown"
R1(config-applet)# action 7.0 cli command "no shutdown"
R1(config-applet)# action 8.0 syslog msg "EEM: Gi0/5 recovered"
R1(config-applet)# end
# (Το ενσωματωμένο "errdisable recovery" κάνει και αυτό το ίδιο· το EEM σε αφήνει να το περιορίσεις
# σε ΜΙΑ θύρα, να προσθέσεις καθυστέρηση, να το καταγράψεις, ή να ειδοποιήσεις — πιο λεπτός έλεγχος από το global.)

03

Περιπτωση Χρησης — Snapshot Config σε Καθε Αλλαγη

Ένα audit trail δωρεάν: όποτε κάποιος αποθηκεύει ή αλλάζει το config, το EEM αρχειοθετεί ένα αντίγραφο εκτός συσκευής και καταγράφει ποιος το έκανε. Συνδυάζεται με το archive feature από το post backup.

IOS — καν το backup οταν αλλαζει το config
R1(config)# event manager applet CONFIG-BACKUP
# Πυροδοτεί στο syslog "configured from console/vty" που βγάζει το IOS σε αλλαγή
R1(config-applet)# event syslog pattern "SYS-5-CONFIG_I"
R1(config-applet)# action 1.0 cli command "enable"
R1(config-applet)# action 2.0 cli command "copy running-config scp://backup@192.168.1.50/R1-$_event_pub_sec.cfg" pattern "assword"
R1(config-applet)# action 3.0 cli command "BackupPass123"
R1(config-applet)# action 4.0 syslog msg "EEM: config changed — off-box backup taken"
R1(config-applet)# end
# Το $_event_pub_sec είναι μια ενσωματωμένη μεταβλητή EEM (timestamp γεγονότος) — χρήσιμη για
# μοναδικά ονόματα αρχείων. Το "pattern" απαντάει αυτόματα στο prompt κωδικού.
💡 Οι Ενσωματωμενες Μεταβλητες του EEM Κανουν τα Applets Εξυπνα

Το EEM εκθέτει πλαίσιο για το γεγονός που πυροδότησε μέσω μεταβλητών $_: $_syslog_msg (η πλήρης ταιριασμένη γραμμή log), $_event_pub_sec (πότε πυροδότησε), και για γεγονότα track το $_track_state (up/down). Χρησιμοποίησέ τα για να χτίσεις μοναδικά ονόματα αρχείων, να συμπεριλάβεις το ένοχο μήνυμα σε μια ειδοποίηση, ή να διακλαδώσεις συμπεριφορά. Σε συνδυασμό με το action ... regexp για να εξάγεις μια τιμή (όπως το όνομα interface) από το ταιριασμένο μήνυμα, τα applets περνάνε από το «κάνε ένα σταθερό πράγμα» στο «αντίδρασε έξυπνα σε αυτό που πραγματικά συνέβη» — γνήσια μικρά προγράμματα, που τρέχουν στον router.

04

Περιπτωση Χρησης — Καθαρισμος NAT σε Failover WAN

Η ακριβής χαλαρή άκρη από το post του failover IP SLA: μπαγιάτικες μεταφράσεις NAT παραμένουν στο παλιό WAN μετά από ένα failover. Ένα applet οδηγούμενο από track τις καθαρίζει τη στιγμή που γυρίζει το track.

IOS — καθαρισε το NAT οταν πεσει το track 1 (το probe WAN)
R1(config)# event manager applet FLUSH-NAT-ON-FAILOVER
# EVENT: το ίδιο αντικείμενο track που οδηγεί το route failover + HSRP
R1(config-applet)# event track 1 state any
R1(config-applet)# action 1.0 syslog msg "EEM: WAN track changed to $_track_state — clearing NAT"
R1(config-applet)# action 2.0 cli command "enable"
R1(config-applet)# action 3.0 cli command "clear ip nat translation *"
R1(config-applet)# end
# Τώρα το failover είναι πλήρως αδιάφορο: το probe αποτυγχάνει → αλλάζει το route (post δρομολόγησης)
# → η πύλη κάνει failover (post HSRP) → καθαρίζεται το NAT (εδώ). Ένα track, τρεις
# αντιδράσεις, μηδέν ανθρώπινη εμπλοκή.

05

Περιπτωση Χρησης — Προγραμματισμενες Εργασιες με Timer

Οι timers του EEM αντικαθιστούν το kron για πολλές δουλειές και είναι πιο ευέλικτοι — προγράμματα σε στυλ cron, timers αντίστροφης μέτρησης, ή διαστήματα watchdog που τρέχουν κάτι κάθε N δευτερόλεπτα.

IOS — ενα νυχτερινο και ενα applet διαστηματος
# Σε στυλ cron: κάθε μέρα στις 02:30, αποθήκευσε + κάνε backup
R1(config)# event manager applet NIGHTLY-SAVE
R1(config-applet)# event timer cron cron-entry "30 2 * * *"
R1(config-applet)# action 1.0 cli command "enable"
R1(config-applet)# action 2.0 cli command "write memory"
R1(config-applet)# action 3.0 syslog msg "EEM: nightly config save complete"
R1(config-applet)# exit

# Watchdog: κάθε 300δ, κατέγραψε το CPU αν έχει ενδιαφέρον (παλμός υγείας)
R1(config)# event manager applet CPU-HEARTBEAT
R1(config-applet)# event timer watchdog time 300
R1(config-applet)# action 1.0 cli command "enable"
R1(config-applet)# action 2.0 cli command "show processes cpu | include CPU utilization"
R1(config-applet)# end

06

Επαληθευσε, Δοκιμασε & Διαχειριστου με Ασφαλεια Ασφαλες να το Τρεξεις

Κατοχύρωσε, τρέξε χειροκίνητα για δοκιμή, παρακολούθησε το ιστορικό, και ξέρε πώς να απενεργοποιήσεις γρήγορα ένα αν φέρεται άσχημα. Το EEM τρέχει πραγματικές εντολές — αντιμετώπισε τα applets σαν κώδικα.

IOS — οι εντολες ελεγχου EEM
# Δοκίμασε ένα applet κατά παραγγελία χωρίς να περιμένεις το event του (πρόσθεσε "event none")
R1# event manager run MY-APPLET

# Τι είναι εγγεγραμμένο, και οι μετρητές εκτελέσεών τους;
R1# show event manager policy registered

# Πυροδότησαν τα applets, και πέτυχαν οι actions τους;
R1# show event manager history events
R1# show event manager history traps

# Σκότωσε ένα applet που φέρεται άσχημα αμέσως
R1(config)# no event manager applet PSECURE-RECOVER
⚠ Παγιδα — Προσεξε τον Βροχο Ανατροφοδοτησης

Το κλασικό footgun του EEM: ένα applet του οποίου οι actions παράγουν το event που το πυροδοτεί. Ένα applet που αντιδρά στο SYS-5-CONFIG_I (μια αλλαγή config) και μετά κάνει μια αλλαγή config θα ξαναπυροδοτήσει τον εαυτό του, δυνητικά σε σφιχτό loop που καρφώνει το CPU. Προστατέψου: χρησιμοποίησε εντολές action ... cli που δεν εκπέμπουν το παρακολουθούμενο pattern, πρόσθεσε ένα όριο maxrun (event manager applet X ... maxrun 30) ώστε ένα applet να μην τρέχει για πάντα, και βάλε rate-limit με ratelimit. Δοκίμαζε πάντα με event manager run και παρακολούθησε show event manager history πριν εμπιστευτείς ένα applet σε production.

07

MikroTik ↔ Cisco — Αυτοματισμος στη Συσκευη

Το scripting + scheduler + netwatch του RouterOS είναι το αντίστοιχο του EEM· το νοητικό μοντέλο είναι το ίδιο.

MikroTik / RouterOSCisco IOS EEM
/system script (ονομασμένο script)event manager applet
/system scheduler (cron)event timer cron / watchdog
/tool netwatch script up/downevent track (+ IP SLA)
Κανόνας log που πυροδοτεί scriptevent syslog pattern
:log info "..." σε scriptaction ... syslog msg
Global μεταβλητές σε scriptsενσωματωμένες μεταβλητές EEM $_
💡 Ποτε να Στραφεις σε Tcl ή Guest Shell Αντ' Αυτου

Τα applets είναι ιδανικά για «ταίριαξε ένα event, τρέξε κάποιες εντολές». Όταν χρειάζεσαι πραγματική λογική — loops, μαθηματικά, parsing δομημένου output, κλήση API — το IOS υποστηρίζει επίσης scripts Tcl του EEM, και το σύγχρονο IOS-XE προσθέτει ένα Linux Guest Shell (Python πάνω στη συσκευή). Για αυτοματισμό σε επίπεδο στόλου, όμως, το καλύτερο εργαλείο είναι η διαχείριση config εκτός συσκευής (Ansible), που είναι το επόμενο post. Εμπειρικός κανόνας: EEM για τοπικά, αυτόνομα αντανακλαστικά που πρέπει να δουλεύουν ακόμα κι όταν είναι κάτω το δίκτυο προς τη συσκευή· Ansible για να οργανώνεις αλλαγές σε πολλές συσκευές από ένα κεντρικό σημείο.

Συμπερασματα

  1. Κάθε applet είναι event → actions. Μια πυροδότηση (syslog / timer / track / none) και αριθμημένες actions CLI+log+mail. Η λογική ζει στη συσκευή και τρέχει ακόμα κι όταν είναι κάτω το δίκτυο διαχείρισης.
  2. Οι actions ξεκινούν σε user EXEC και δεν μπορούν να απαντήσουν σε prompt. Περπάτα σε privileged/config mode με actions enable/configure terminal, και απάντα αυτόματα σε prompts με pattern.
  3. Οι καλύτερες χρήσεις είναι μικρά τοπικά αντανακλαστικά: ανάκτηση θύρας err-disabled, snapshot config σε αλλαγή, καθαρισμός NAT σε failover, ειδοποίηση σε συγκεκριμένο γεγονός.
  4. Κλείνει βρόχους από προηγούμενα posts: το ίδιο track που οδηγεί το failover IP SLA και το HSRP μπορεί να πυροδοτήσει applet για να καθαρίσει το NAT — πλήρως αδιάφορο failover.
  5. Χρησιμοποίησε τις μεταβλητές $_. Το ταιριασμένο μήνυμα, το timestamp, και το track state μετατρέπουν ένα σταθερό applet σε ένα που αντιδρά σε αυτό που πραγματικά συνέβη.
  6. Προστατέψου από βρόχους ανατροφοδότησης. Ένα applet που προκαλεί τη δική του πυροδότηση μπορεί να ξεφύγει — χρησιμοποίησε maxrun, ratelimit, και actions που δεν πυροδοτούν.
  7. Δοκίμασέ το σαν κώδικα. event manager run, παρακολούθησε show event manager history, και κράτα έτοιμο το no event manager applet. Για αλλαγή σε επίπεδο στόλου, στρέψου αντ' αυτού στο Ansible.

Θελεις το δικτυο σου να διορθωνει μονο του τα μικρα προβληματα στην Κρητη;

Τα περισσότερα προβλήματα δικτύου στις 3 το πρωί είναι μικρά και επαναλαμβανόμενα — μια θύρα που χρειάζεται επανενεργοποίηση, ένα backup που χρειάζεται πυροδότηση. Χτίζω αυτοματισμό αυτο-θεραπείας με EEM και το αντίστοιχό του σε RouterOS απευθείας στον εξοπλισμό που διαχειρίζομαι, ώστε αυτά να διορθώνονται μόνα τους πριν χτυπήσει το τηλέφωνο κανενός.

Κλεισε μια Discovery Call →