只需部署这个脚本就可玩自动化,还是思科牛逼!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 只需部署这个脚本就可玩自动化,还是思科牛逼!


EEM(Embedded Event Manager)作为一个自动化的脚本部署在设备上,可以根据指定的trigger来自动完成提前布置的任务,如信息的收集或特定的操作。一个完整的EEM需要包含Name、Trigger、Action,以下为EEM部署的示例,仅供参考。

注意:Catalyst 9000 需要思科DNA许可证才能支持EEM。

基本构成

1、EEM Name

event manager applet MY-SCRIPT authorization bypass <<<<< 创建一个名字叫MY-SCRIPT的EEM脚本。使用"authorization bypass"命令来规避权限问题,否则可能由于权限问题导致EEM无法生效。

2、EEM Trigger

a. 周期触发:

event timer watchdog time 120 maxrun 100<<<<<每 120秒运行一次,每次最多运行 100秒。

b. 特定时间或特定周期触发

eventtimercroncron-entry"12345"<<<<<1=分2=时3=日4=月5=星期(0表示周日) CronTimerExamples: "159***"<<<<<每天上午的9点15分触发 "0010**1-5"<<<<<每周一到周五的上午10点触发

c. 通过SNMP触发

eventsnmpoid1.3.6.1.4.1.9.2.1.56get-typenextentry-opgeentry-val50poll-interval1 当CPU超过50%时触发, 1.3.6.1.4.1.9.2.1.56 为 Cat9000的SNMP CPU OID,其他平台需对应修改。

d. 根据系统日志来触发:

eventsyslogpattern"NOPOWER_AVAIL:Interface"ratelimit60 当出现的日志中包含"NOPOWER_AVAIL:Interface"关键字后触发,ratelimit为每60s内只触发一次。

e. 系统自带的参数:

如当接口的total output 增长时触发: eventinterfacenameTe1/0/1parameteroutput_packets_droppedentry-opgeentry-val1000poll-interval1entry-typevalue

3、EEM Action

a. CLI Action

按顺序执行指令,注意所有序号需保持同样位数,如010和100,而不能写10和100. action010clicommand"en" action020clicommand"showversion|appendbootflash:EEM.txt"

b. 生成系统日志:

action050syslogmsg"Scripthascompleted"priority1<<<<<<将生成1级日志:"%HA_EM-1-LOG:xxx:Scripthascompleted"

c. 交互式CLI:

action430clicommand"clearlog"pattern"confirm" action431clicommand"" 当执行clearlog后,系统会出现交互式语句,匹配关键字confirm后输入"",相当于确认进行下一步。

d. 匹配SNMP的信息:

action010infotypesnmpoid1.3.6.1.4.1.9.2.1.56get-typenext action020syslogmsg"CurrentCPU:$_info_snmp_value"<<<<<系统收集当前OID的结果,并通过变量打印至日志中

e. If / Else / Elseif 语句

如果CPU 大于等于 85,则执行“end”之前的语句,否则执行“end”之后的语句。 action010infotypesnmpoid1.3.6.1.4.1.9.2.1.56get-typenext action020if$_info_snmp_valuege"85" action030syslogmsg"HighCPUdetectedinsidescript!" action040end action050syslogmsg"Thislineisnowoutsidethe–if-statement"

f. 循环语句

一个循环可以一遍又一遍地做同样的事情而不用写很多额外的行,如打印1到10: action010setloop_iteration1<<<<<设置变量"loop_iteration"为1. action020while$loop_iterationle10 action030syslogmsg"Iteration:$loop_iteration" action040incrementloop_iteration1 action050end action060syslogmsg"ScriptComplete"

g. 正则表达式匹配

正则表达式通常可以应用于特定命令的结果。Regex 还会在调用后创建一些预定义的变量。 action010clicommand"showipinterfacebrief|exunass" action020regexp"[123]"$_cli_resultmatch action030if$_regexp_resulteq1 action040syslogmsg"TheRegexfound1or2or3in$match" action050end 在showipinterfacebrief中搜索是否存在1或2或3的字段,如果有,则打印匹配结果

配置示例

01、使用SNMP监控来触发high cpu的信息收集

当CPU无规律瞬间变高时,我们可以使用如下脚本(OID为catalyst 9000的OID,其他平台需要对象修改)。 eventmanagerappletHigh_CPUauthorizationbypass eventsnmpoid1.3.6.1.4.1.9.2.1.56get-typenextentry-opgeentry-val80poll-interval1ratelimit60 action010infotypesnmpoid1.3.6.1.4.1.9.2.1.56get-typenext action020syslogmsg"CPUUtilizationishigh,CurrentCPU:$_info_snmp_value" action030clicommand"enable" action040clicommand"showclock" action041regex"([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9])"$_cli_resultmatchHMS<<<<将匹配表达式中的小时,分钟和秒 action050settime$match action060clicommand"showclock|appendflash:CPU_info$time.txt" action070clicommand"showprocesscpusorted|appendflash:CPU_info$time.txt" ...... action190clicommand"monitorcaptureAcontrol-planein" action200clicommand"monitorcaptureAfilelocationflash:CPU_$H.$M.$S.pcap"pattern"confirm" action201clicommand"" action210clicommand"monitorcaptureAstart" action220wait10 action230clicommand"monitorcaptureAstop" !注意:Cat9200需要monitorcapturestop之后 运用"monitorcaptureAexportflash:CPU_$H.$M.$S.pcap"pattern"confirm"来将抓包文件保存到机器里面 当CPU超过80%时,将生成以下日志: %HA_EM-6-LOG:test:CPUUtilizationishigh,CurrentCPU:80 同时将生成基于时间的文件,例如以下: switch#dirflash:|iCPU 409606-rw-296Apr24202212:08:54+00:00CPU_12.08.51.pcap<<<抓包文件 262188-rw-49487Apr24202212:02:38+00:00CPU_info12:02:38.txt<<<show信息

02、应用正则表达式来监控设备上的变量

当需要监控非系统自定义的参数时,可以使用正则表达式来监控,如以下方式监控TCAM的使用情况: eventmanagerappletTCAMauthorizationbypass eventtimerwatchdogtime3600 action10clicommand"enable" action20clicommand"showplatformhardwarefedactivefwd-asicresourcetcamutilization" action30regex"[(6-9)][(0-9)]\.[(0-9)][(0-9)]"$_cli_result action40if$_regexp_resultge"1" action50syslogmsg"***TCAMabnormaldetected***"priority1 action60syslogmsg"$_cli_result" action70else action80syslogmsg"***TCAMnormal***" action90end 当TCAM的利用率超过60%时,将出现告警,同时会将TCAM的具体值通过log打印: %HA_EM-1-LOG:TCAM:***TCAMabnormaldetected*** Cat9500#$acfwd-asicresourcetcamutilization TableSubtypeDirMaxUsed%UsedV4V6MPLSOther ------------------------------------------------------------------------------------------------------ MacAddressTableEMI655363160.05%00031

03、使用循环语句和自定义变量来配置EEM

当我们需要配置大量的重复参数时可以使用以下方法来配置: eventmanagerappletPortauthorizationbypass eventtimerwatchdogtime300maxrun200 action100clicommand"en" action200setPORT"1"<<<<<设置一个变量名为PORT,同时将变量值置为1 action201while$PORTle24<<<<<设置循环语句,使得变量小于等于24 action202clicommand"showinterfaceG1/0/$PORT" action204regexp"err-disabled""$_cli_result" action205if$_regexp_resulteq"1" action206syslogmsg"***IssuedetectedatPORT_$PORTiserr-disabled***" action208clicommand"configureterminal" action209clicommand"interfaceG1/0/$PORT" action210clicommand"shutdown" action211clicommand"noshutdown" action212clicommand"end" action231syslogmsg"***PORT_$PORTisRecovery***" action242else action253syslogmsg"***Noissuedetected!PORT_$PORT***" action300incrementPORT action301wait1 action403end action404end 设备每300s自动检测接口1-24接口的状态,如果出现err-disabled, 则自动执行shutdown/no shutdown的操作。

04、交互式EEM

当执行一些需要交互的操作时,可能使用到以下方法: eventmanagerappletReloadauthorizationbypass eventtimercroncron-entry"10***"<<<<<每天的0:01分自动执行 action010clicommand"enable" action020clicommand"showswitch|iaaaa.bbbb.cccc" action030regexp"Active"$_cli_result action040if$_regexp_resulteq"1" action050syslogmsg"***Switch1isActive***" action070else action080clicommand"wr" action090wait10 action100clicommand"redundancyforce-switchover"pattern"confirm" action110clicommand"" action120end 每天的0:01分自动检测aaaa.bbbb.cccc是否为active设备,如果不是,则主备切换。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
24 2
|
8天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
21 3
|
14天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
15天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
19天前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
17 3
|
21天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
24 1
|
1月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
64 9
|
1月前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
1月前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
1月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
30 0