English · Ελληνικά
Ο router μπορεί να παρακολουθεί τα δικά του logs και να ενεργεί. Το Embedded Event Manager τρέχει μικρά applets που ενεργοποιούνται από ένα μήνυμα syslog, έναν timer, ή μια παρακολουθούμενη αστοχία — και απαντούν με εντολές CLI. Αυτόματη ανάκτηση μιας πεσμένης θύρας, snapshot του config τη στιγμή που αλλάζει, email σε ένα γεγονός. Scripting IOS, με τον τρόπο του RouterOS.
Το 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
Μία γραμμή event, αριθμημένες γραμμές action. Το απλούστερο χρήσιμο applet: κατέγραψε ένα προσαρμοσμένο μήνυμα όποτε πέφτει ένα interface. Ξεκίνα εδώ για να δεις το σχήμα.
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
Οι 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
Το post Ασφάλεια Switch άφησε θύρες να γίνονται err-disabled σε παραβίαση, χρειαζόμενες χειροκίνητο bounce. Το EEM μπορεί να παρακολουθεί εκείνο το log και να ανακτά τη θύρα μετά από καθυστέρηση — χωρίς κλήση στο help-desk.
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
Ένα audit trail δωρεάν: όποτε κάποιος αποθηκεύει ή αλλάζει το config, το EEM αρχειοθετεί ένα αντίγραφο εκτός συσκευής και καταγράφει ποιος το έκανε. Συνδυάζεται με το archive feature από το post backup.
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 εκθέτει πλαίσιο για το γεγονός που πυροδότησε μέσω μεταβλητών $_: $_syslog_msg (η πλήρης ταιριασμένη γραμμή log), $_event_pub_sec (πότε πυροδότησε), και για γεγονότα track το $_track_state (up/down). Χρησιμοποίησέ τα για να χτίσεις μοναδικά ονόματα αρχείων, να συμπεριλάβεις το ένοχο μήνυμα σε μια ειδοποίηση, ή να διακλαδώσεις συμπεριφορά. Σε συνδυασμό με το action ... regexp για να εξάγεις μια τιμή (όπως το όνομα interface) από το ταιριασμένο μήνυμα, τα applets περνάνε από το «κάνε ένα σταθερό πράγμα» στο «αντίδρασε έξυπνα σε αυτό που πραγματικά συνέβη» — γνήσια μικρά προγράμματα, που τρέχουν στον router.
04
Η ακριβής χαλαρή άκρη από το post του failover IP SLA: μπαγιάτικες μεταφράσεις NAT παραμένουν στο παλιό WAN μετά από ένα failover. Ένα applet οδηγούμενο από track τις καθαρίζει τη στιγμή που γυρίζει το track.
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
Οι timers του EEM αντικαθιστούν το kron για πολλές δουλειές και είναι πιο ευέλικτοι — προγράμματα σε στυλ cron, timers αντίστροφης μέτρησης, ή διαστήματα watchdog που τρέχουν κάτι κάθε N δευτερόλεπτα.
# Σε στυλ 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 σαν κώδικα.
# Δοκίμασε ένα 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
Το scripting + scheduler + netwatch του RouterOS είναι το αντίστοιχο του EEM· το νοητικό μοντέλο είναι το ίδιο.
| MikroTik / RouterOS | Cisco IOS EEM |
|---|---|
| /system script (ονομασμένο script) | event manager applet |
| /system scheduler (cron) | event timer cron / watchdog |
| /tool netwatch script up/down | event track (+ IP SLA) |
| Κανόνας log που πυροδοτεί script | event syslog pattern |
| :log info "..." σε script | action ... syslog msg |
| Global μεταβλητές σε scripts | ενσωματωμένες μεταβλητές EEM $_ |
Τα applets είναι ιδανικά για «ταίριαξε ένα event, τρέξε κάποιες εντολές». Όταν χρειάζεσαι πραγματική λογική — loops, μαθηματικά, parsing δομημένου output, κλήση API — το IOS υποστηρίζει επίσης scripts Tcl του EEM, και το σύγχρονο IOS-XE προσθέτει ένα Linux Guest Shell (Python πάνω στη συσκευή). Για αυτοματισμό σε επίπεδο στόλου, όμως, το καλύτερο εργαλείο είναι η διαχείριση config εκτός συσκευής (Ansible), που είναι το επόμενο post. Εμπειρικός κανόνας: EEM για τοπικά, αυτόνομα αντανακλαστικά που πρέπει να δουλεύουν ακόμα κι όταν είναι κάτω το δίκτυο προς τη συσκευή· Ansible για να οργανώνεις αλλαγές σε πολλές συσκευές από ένα κεντρικό σημείο.
Συμπερασματα
enable/configure terminal, και απάντα αυτόματα σε prompts με pattern.$_. Το ταιριασμένο μήνυμα, το timestamp, και το track state μετατρέπουν ένα σταθερό applet σε ένα που αντιδρά σε αυτό που πραγματικά συνέβη.maxrun, ratelimit, και actions που δεν πυροδοτούν.event manager run, παρακολούθησε show event manager history, και κράτα έτοιμο το no event manager applet. Για αλλαγή σε επίπεδο στόλου, στρέψου αντ' αυτού στο Ansible.Τα περισσότερα προβλήματα δικτύου στις 3 το πρωί είναι μικρά και επαναλαμβανόμενα — μια θύρα που χρειάζεται επανενεργοποίηση, ένα backup που χρειάζεται πυροδότηση. Χτίζω αυτοματισμό αυτο-θεραπείας με EEM και το αντίστοιχό του σε RouterOS απευθείας στον εξοπλισμό που διαχειρίζομαι, ώστε αυτά να διορθώνονται μόνα τους πριν χτυπήσει το τηλέφωνο κανενός.
Κλεισε μια Discovery Call →