Skip to content

EEM

Embedded Event Manager (EEM) is a distributed and customized approach to event detection and recovery offered by Cisco IOS-XE software. EEM enables network operators to automate responses to system events through user-defined applets that monitor and react to events such as interface state changes, syslog pattern matches, timer expirations, or CLI command executions. This powerful automation framework reduces manual intervention, enables proactive network management, and allows for custom remediation workflows that can execute CLI commands, manipulate variables, perform pattern matching, and implement complex decision logic to maintain network stability and operational efficiency.

Diagram
NameTypeConstraintMandatoryDefault Value
eemClass[eem]No

NameTypeConstraintMandatoryDefault Value
environment_variablesList[environment_variables]No
session_cli_usernameStringNo
session_cli_username_privilegeIntegermin: 0, max: 15No
history_size_eventsIntegermin: 0, max: 50No
history_size_trapsIntegermin: 0, max: 50No
directory_user_policyStringNo
scheduler_applet_thread_classClass[scheduler_applet_thread_class]No
detector_rpc_max_sessionsIntegermin: 4, max: 16No
detector_routing_bootup_delayNumberNo
appletsList[applets]No

environment_variables (iosxe.devices.configuration.eem)

Section titled “environment_variables (iosxe.devices.configuration.eem)”
NameTypeConstraintMandatoryDefault Value
nameStringYes
valueStringYes

scheduler_applet_thread_class (iosxe.devices.configuration.eem)

Section titled “scheduler_applet_thread_class (iosxe.devices.configuration.eem)”
NameTypeConstraintMandatoryDefault Value
classesListStringYes
numberIntegermin: 1, max: 65535Yes

NameTypeConstraintMandatoryDefault Value
nameStringYes
authorizationChoicebypassNo
classStringNo
descriptionStringNo
eventClass[event]No
actionsList[actions]No

event (iosxe.devices.configuration.eem.applets)

Section titled “event (iosxe.devices.configuration.eem.applets)”
NameTypeConstraintMandatoryDefault Value
timer_watchdogClass[timer_watchdog]No
syslogClass[syslog]No
timer_cronClass[timer_cron]No
cliClass[cli]No

actions (iosxe.devices.configuration.eem.applets)

Section titled “actions (iosxe.devices.configuration.eem.applets)”
NameTypeConstraintMandatoryDefault Value
sequenceAnyInteger or StringYes
cli_commandStringNo
setClass[set]No
foreachClass[foreach]No
string_trimStringNo
string_firstClass[string_first]No
if_statementClass[if_statement]No
else_statementBooleantrue, falseNo
end_statementBooleantrue, falseNo
regexpClass[regexp]No
waitIntegerNo
continue_statementBooleantrue, falseNo
exit_statementIntegerNo

timer_watchdog (iosxe.devices.configuration.eem.applets.event)

Section titled “timer_watchdog (iosxe.devices.configuration.eem.applets.event)”
NameTypeConstraintMandatoryDefault Value
timeIntegerYes
nameStringNo
maxrunIntegerNo
ratelimitIntegerNo

syslog (iosxe.devices.configuration.eem.applets.event)

Section titled “syslog (iosxe.devices.configuration.eem.applets.event)”
NameTypeConstraintMandatoryDefault Value
patternStringYes
maxrunIntegerNo
occursIntegermin: 1, max: 32No
ratelimitNumberNo
periodNumberNo

timer_cron (iosxe.devices.configuration.eem.applets.event)

Section titled “timer_cron (iosxe.devices.configuration.eem.applets.event)”
NameTypeConstraintMandatoryDefault Value
cron_entryStringYes
nameStringNo
maxrunIntegerNo
ratelimitIntegerNo

cli (iosxe.devices.configuration.eem.applets.event)

Section titled “cli (iosxe.devices.configuration.eem.applets.event)”
NameTypeConstraintMandatoryDefault Value
patternStringYes
syncChoiceyes, noNo
skipChoiceyes, noNo

set (iosxe.devices.configuration.eem.applets.actions)

Section titled “set (iosxe.devices.configuration.eem.applets.actions)”
NameTypeConstraintMandatoryDefault Value
variable_nameStringYes
variable_valueStringYes

foreach (iosxe.devices.configuration.eem.applets.actions)

Section titled “foreach (iosxe.devices.configuration.eem.applets.actions)”
NameTypeConstraintMandatoryDefault Value
loop_variableStringYes
list_variableStringYes
delimiterStringYes

string_first (iosxe.devices.configuration.eem.applets.actions)

Section titled “string_first (iosxe.devices.configuration.eem.applets.actions)”
NameTypeConstraintMandatoryDefault Value
stringStringYes
substringStringYes

if_statement (iosxe.devices.configuration.eem.applets.actions)

Section titled “if_statement (iosxe.devices.configuration.eem.applets.actions)”
NameTypeConstraintMandatoryDefault Value
operand1StringYes
operatorChoiceeq, ne, gt, ge, lt, leYes
operand2StringYes

regexp (iosxe.devices.configuration.eem.applets.actions)

Section titled “regexp (iosxe.devices.configuration.eem.applets.actions)”
NameTypeConstraintMandatoryDefault Value
patternStringYes
inputStringYes
match_variableStringNo
submatch1StringNo
submatch2StringNo
submatch3StringNo

This example demonstrates a simple EEM applet that triggers on a syslog pattern and executes CLI commands.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: config_change_alert
description: "Log configuration changes"
event:
syslog:
pattern: "%SYS-5-CONFIG_I"
occurs: 1
maxrun: 30
actions:
- sequence: "010"
cli_command: "show clock"

Timer Watchdog Event with Variable Operations

Section titled “Timer Watchdog Event with Variable Operations”

This example shows a periodic timer that captures CLI output and stores it in variables.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: interface_monitor
description: "Check interface status every 5 minutes"
event:
timer_watchdog:
time: 300
maxrun: 60
actions:
- sequence: "010"
cli_command: "show ip interface brief"
- sequence: "020"
set:
variable_name: "interface_output"
variable_value: "$_cli_result"

This example demonstrates using regexp to extract data from CLI output with submatch groups.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: version_check
description: "Extract IOS version information"
event:
timer_watchdog:
time: 3600
maxrun: 30
actions:
- sequence: "010"
cli_command: "show version"
- sequence: "020"
regexp:
pattern: "Version ([0-9]+)\\.([0-9]+)"
input: "$_cli_result"
match_variable: "version_found"
submatch1: "major_version"
submatch2: "minor_version"

This example shows conditional branching based on variable comparison.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: cpu_threshold_alert
description: "Alert on high CPU utilization"
event:
timer_watchdog:
time: 60
maxrun: 30
actions:
- sequence: "010"
cli_command: "show processes cpu | include five minutes"
- sequence: "020"
regexp:
pattern: "five minutes: ([0-9]+)%"
input: "$_cli_result"
match_variable: "cpu_found"
submatch1: "cpu_percent"
- sequence: "030"
if_statement:
operand1: "$cpu_percent"
operator: "gt"
operand2: "75"
- sequence: "040"
cli_command: "send log CPU utilization high: $cpu_percent%"
- sequence: "050"
end_statement: true

This example demonstrates iterating over a list of items using foreach loops.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: process_interface_list
description: "Process each interface in a list"
event:
timer_watchdog:
time: 600
maxrun: 120
actions:
- sequence: "010"
set:
variable_name: "interface_list"
variable_value: "Gi1/0/1,Gi1/0/2,Gi1/0/3"
- sequence: "020"
foreach:
loop_variable: "interface"
list_variable: "$interface_list"
delimiter: ","
- sequence: "030"
cli_command: "show interface $interface status"
- sequence: "040"
end_statement: true

This example shows a cron timer for time-of-day scheduling.

iosxe:
devices:
- name: Device1
configuration:
eem:
applets:
- name: daily_backup
description: "Backup configuration daily at 2 AM"
event:
timer_cron:
cron_entry: "0 2 * * *"
name: backup_schedule
maxrun: 300
actions:
- sequence: "010"
cli_command: "copy running-config flash:/daily-backup.cfg"

This example demonstrates global EEM settings including environment variables and session configuration.

iosxe:
devices:
- name: Device1
configuration:
eem:
environment_variables:
- name: SMTP_SERVER
value: smtp.example.com
- name: ADMIN_EMAIL
value: admin@example.com
session_cli_username: admin
session_cli_username_privilege: 15
history_size_events: 25
history_size_traps: 20
directory_user_policy: flash:/eem_policies
detector_routing_bootup_delay: 180
applets:
- name: simple_applet
description: "Simple applet using environment variables"
event:
timer_watchdog:
time: 3600
maxrun: 30
actions:
- sequence: "010"
cli_command: "show clock"