Logo CNTTShop.vn

Hotline: 0862 323 559

Công Ty TNHH Công Nghệ Việt Thái Dương
NTT03, Line 1, Thống Nhất Complex, 82 Nguyễn Tuân, Thanh Xuân, Hà Nội.
Danh mục sản phẩm

Hướng dẫn cấu hình Embedded Event Manager (EEM) Cisco IOS

 

Trong bài viết này, mình sẽ hướng dẫn các bạn cấu hình Embedded Event Manager, viết tắt là EEM trên các dòng switch hoặc Router Cisco.

Embedded Event Manager (EEM) là gì?

Embedded Event Manager là 1 công nghệ trên router Cisco cho phép các bạn chạy các script viết sẵn hoặc 1 số lệnh mà các bạn chỉ định khi có 1 sự kiện nhất định xảy ra.

Các bạn có thể hình dung đơn giản như là khi trên switch có 1 thông báo hay 1 sự kiện gì đó, thì switch sẽ tự động thực thi 1 số dòng lệnh (script) nào đó mà các bạn đưa vào. Nó sẽ giúp chúng ta có thể xử lý ngay vấn đề mà không cần thao tác của con người. Nó rất hữu dụng khi chúng ta đang không onsite, thì router vẫn có thể tự xử lý được 1 số vấn đề cơ bản.

quy trình xử lý của embedded event manager

EEM thì có rất nhiều cách áp dụng, tùy chúng ta thôi. Trong bài viết này thì mình sẽ đưa ra 1 số ví dụ cụ thể để các bạn có thể hiểu được các để định nghĩa 1 EEM và các thức hoạt động của nó nhé.

Cấu hình Cisco Embedded Event Manager

Mình sẽ chia thành 1 số trường hợp để các bạn có thể nắm được cách thức định nghĩa nhé.

Cisco EEM với Syslog

Đầu tiên mình sẽ sử dụng EEM với syslog.

Trên Router Cisco thì mỗi khi có sự thay đổi gì đó như về trạng thái của các cổng UP DOWN, OSPF láng giềng bị down, hay có sự vi phạm bất kỳ chính sách gì đó mà các bạn cấu hình trên router thì nó cũng sẽ đẩy ra 1 đoạn log cho chúng ta biết.

Ví dụ mình sẽ shutdown 1 cổng trên router.

Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#interface e0/0
Router(config-if)#shutdown
Router(config-if)#
*Sep 29 02:21:30.921: %LINK-5-CHANGED: Interface Ethernet0/0, changed state to administratively down
*Sep 29 02:21:31.930: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down

Khi đó các bạn sẽ thấy 1 đoạn log, dòng phía trên hiển thị cho chúng ta biết cổng e0/0 chuyển sang trạng thái admin down, nghĩa là bị down do người quản trị nhập lệnh shutdown, còn dòng bên dưới cũng tương tự cho chúng ta biết cổng chuyển từ IP sang DOWN thôi.

Giờ mình sẽ tạo 1 EEM dựa trên đoạn log này. Mình sẽ định nghĩa là cứ khi nào có log Interface E0/0 down, thì sẽ nhập lại lệnh no shutdown trên cổng này để cổng tiếp tục hoạt động. Các bạn nên sử dụng đoạn log mà mình bôi đỏ nhé, do interface down thì có nhiều nguyên nhân, có thể do vi phạm chính sách gì đó nên cổng bị disable, khi đó chúng ta cần shutdown trước, sau đó no shutdown. Trong ví dụ này mình chỉ sử dụng lệnh no shut thôi.

Đầu tiên các bạn tạo 1 event manager applet, mình sẽ đặt tên là INTERFACE-DOWN.

Router(config)#event manager applet INTERFACE-DOWN

Tiếp theo là định nghĩa event của mình là gì, có nhiều loại event khác nhau mà các bạn có thể định nghĩa ở đây, mình đang ví dụ với các đoạn log của router, do vậy mình sẽ chọn event ở đây là syslog pattern. Sau đó định nghĩa đoạn syslog, các bạn có thể copy đoạn syslog hiển thị trên firewall vào trong dấu “” là được.

Router(config-applet)#event syslog pattern "Interface Ethernet0/0, changed state to down"

Sau khi đã có event rồi thì chúng ta sẽ định nghĩa tiếp các action là gì. Action nó sẽ thực hiện từ trên xuống, do vậy thì câu lệnh nào các bạn muốn thực hiện trước thì sẽ để ở trên, phần tên mình sẽ đặt là 1, 2, 3, 4 cho dễ.

Có nhiều loại action mà các bạn có thể thực hiện ở đây, các bạn có thể tìm config guide của Cisco để tìm hiểu thêm nhé. Yêu cầu của mình là sẽ thực hiện nhập các lệnh để no shutdown cổng F0/0, do vậy mình sẽ chọn action là cli command. Sau đó nhập các lệnh vào trong dấu “”. Các bạn lưu ý khi login vào router thì nó sẽ ở mode view thôi, nên các bạn phải nhập các lệnh từ enable, sau đó là config terminal, rồi mới đến các lệnh tiếp theo, nó giống như chúng ta thao tác thủ công vậy.

 Router(config-applet)#action 1 cli command "enable"
 Router(config-applet)#action 2 cli command "conf t"
 Router(config-applet)#action 3 cli command "interface e0/0"
 Router(config-applet)#action 4 cli command "no shut"

OK đây chính là toàn bộ EEM của mình, nó có nghĩa là khi mà có dòng syslog có chứa nội dung "Interface Ethernet0/0, changed state to down", thì sẽ thực hiện 4 câu lệnh trong action bên dưới.

event manager applet INTERFACE-DOWN
 event syslog pattern "Interface Ethernet0/0, changed state to down"
 action 1 cli command "enable"
 action 2 cli command "conf t"
 action 3 cli command "interface e0/0"
 action 4 cli command "no shut"

Giờ mình sẽ bật debug event manager lên để các bạn có thể theo dõi được quá trình xử lý của router nhé.

Router#debug event manager action cli

Các bạn lưu ý là mình đang làm với syslog do vậy thì phải có syslog thì action mới được thực hiện nhé. Mình sẽ shutdown cổng 0/0 đi.

Router(config)#interface e0/0
Router(config-if)#shutdown
Router(config-if)#
*Sep 29 02:21:30.921: %LINK-5-CHANGED: Interface Ethernet0/0, changed state to administratively down
*Sep 29 02:21:31.930: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to down
*Sep 29 02:21:31.930: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : CTL : cli_open called.
*Sep 29 02:21:31.935: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Router>
*Sep 29 02:21:31.935: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : IN  : Router>enable
*Sep 29 02:21:32.055: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Router#
*Sep 29 02:21:32.055: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : IN  : Router#conf t
*Sep 29 02:21:32.174: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Enter configuration commands, one per line.  End with CNTL/Z.
*Sep 29 02:21:32.174: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Router(config)#
*Sep 29 02:21:32.174: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : IN  : Router(config)#interface e0/0
*Sep 29 02:21:32.296: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Router(config-if)#
*Sep 29 02:21:32.296:
Router(config-if)#%HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : IN  : Router(config-if)#no shut
*Sep 29 02:21:32.416: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : OUT : Router(config-if)#
*Sep 29 02:21:32.416: %HA_EM-6-LOG: INTERFACE-DOWN : DEBUG(cli_lib) : : CTL : cli_close called.
*Sep 29 02:21:32.416:
*Sep 29 02:21:32.416: tty is now going through its death sequence
Router(config-if)#
*Sep 29 02:21:34.336: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Sep 29 02:21:35.345: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
Router(config-if)#

OK ngay khi có log là cổng e0/0 bị down, thì Router đã thực hiện 1 loạt các action. Đầu tiên là mở CLI, sau đó thì thực hiện 4 lệnh mà mình đã đặt trong action theo đúng thứ tự. Và cuối cùng là thông báo của router, cổng e0/0 đã up trở lại.

Đây là ví dụ đơn giản nhất để các bạn có thể biết cách hoạt động của EEM thôi, còn các bạn có thể áp dụng với bất kỳ loại syslog nào, miễn là các bạn có thể định nghĩa được các action để xử lý vấn đề đó.

Cấu hình Cisco EEM với CLI Events

Tiếp theo mình sẽ lấy 1 ví dụ khi người dùng nhập 1 lệnh cụ thể trong CLI. Giả sử bây giờ mình đang có 1 file running config, và mình muốn khi 1 người dùng nhập lệnh show running thì sẽ không hiển thì username ra.

Trước tiên mình sẽ tạo 2 username bất kỳ.

Router(config)#username admin privilege 15 password Admin@123
Router(config)#username test privilege 15 password Admin@123

Bây giờ mình sẽ cấu hình EEM để khi nhập lệnh show running thì sẽ không hiển thị ra phần username và password.

Mình sẽ tạo 1 applet là SHOW-RUN-NO-USERNAME. Lúc này event của chúng ta sẽ không phải là syslog nữa mà sẽ là cli pattern.

Router(config)#event manager applet SHOW-RUN-NO-USER
Router(config-applet)#event cli pattern "show run" sync yes
Router(config-applet)#action 1 cli command "enable"
Router(config-applet)#action 2 cli command "show run | exclude username"
Router(config-applet)#action 3.0 puts "$_cli_result"
Router(config-applet)#action 4.0 set $_exit_status "0"

Các bạn cần thêm option sync yes vào cuối do khi người dùng gõ lệnh show run thì router sẽ show luôn ra toàn bộ cấu hình, do vậy thì EEM cũng phải đồng bộ để có thể thực thi script ngay lúc đó. Tránh trường hợp cấu hình hiển thị 1 đoạn rồi thì script của chúng ta mới chạy.

Tiếp theo thì các action vẫn là các câu lệnh mà chúng ta sẽ nhập vào thôi. Đầu tiên vẫn là lệnh enable. Tiếp theo mình sẽ sử dụng lệnh show run, kèm theo option là exclude username, khi đó thì cứ khi nào người dùng nhập lệnh show running, thì router sẽ sử dụng lệnh show running | exclude username để thay thế.

Cuối cùng chúng ta cần 2 action, action 3 này để script hiển thị kết quả của lệnh show lên màn hình console. Và action 4 này để khi script thực hiện xong action 3 thì nó sẽ đặt trạng thái thành 0, dạng như là script đã thực hiện xong và thoát thôi. Do lệnh show run cần 1 lúc mới hiển thị được hết kết quả, do vậy thì trạng thái hoàn thành là 0 của script cần phải được thực hiện sau khi action 3 là hiển thị kết quả xong.

Ok mình sẽ thử show run nhé.

Router#show running-config

Building configuration...

Current configuration : 1731 bytes
!
! Last configuration change at 03:06:37 UTC Thu Sep 29 2022 by admin
!
*Sep 29 03:06:56.163: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : CTL : cli_open called.
*Sep 29 03:06:56.168: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : Router>
*Sep 29 03:06:56.168: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : IN  : Router>enable
*Sep 29 03:06:56.287: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : Router#
*Sep 29 03:06:56.287: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : IN  : Router#show run | exclude username
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : Building configuration...
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT :
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : Current configuration : 1731 bytes
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : ! Last configuration change at 03:06:37 UTC Thu Sep 29 2022 by admin
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : version 15.6
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : service timestamps debug datetime msec
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : service timestamps log datetime msec
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : no service password-encryption
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : hostname Router
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : boot-start-marker
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : boot-end-marker

*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : aaa new-model
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : OUT : !
*Sep 29 03:06:56.510: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : CTL : 20+ lines read from cli, debug output truncated
Router#
*Sep 29 03:06:58.244: %HA_EM-6-LOG: SHOW-RUN-NO-USER : DEBUG(cli_lib) : : CTL : cli_close called.
*Sep 29 03:06:58.248:
*Sep 29 03:06:58.248: tty is now going through its death sequence
Router#

Các bạn có thể thấy lệnh show run đã được thay thế bằng lệnh show run | exclude username, khi đó thì router sẽ không hiển thị các dòng có chứa username lên nữa.

Trên đây là 2 ví dụ rất đơn giản về EEM mà các bạn có thể áp dụng, nếu các bạn có thể viết được script cụ thể thì nó rất hữu dụng trong nhiều trường hợp khác nhau.

Ok như vậy là mình đã hướng dẫn bạn sử dụng EEM trên Router Cisco. EEM thì có thể áp dụng vào rất nhiều trường hợp khác nhau, tùy theo cách chúng ta định nghĩa event là gì, và action sẽ áp dụng là gì, các bạn có thể tùy biến để phục vụ nhu cầu công việc cụ thể.  Nếu các bạn gặp khó khăn gì có thể comment bên dưới bài viết để mọi người cùng khắc phục nhé.

Chúc các bạn thành công!

Lê Văn Tuấn

Là chuyên gia trong lĩnh vực Network System, Security, Server.. Có kinh nghiệm nhiều năm tư vấn giải pháp mạng, triển khai các giải pháp CNTT và phân phối thiết bị mạng Switch, Wifi, Router, Máy chủ Server, Lưu trữ Storage, Tường lửa Firewall, Video Conferencing, Module quang, Load Balancing. Hiện tại tôi là Founder và Managing Director công ty TNHH Công Nghệ Việt Thái Dương (CNTTShop.vn).

Bình luận bài viết!

Có 0 bình luận:
Chuyên mục chính
Bài viết liên quan
Sản phẩm liên quan