Hcie 网络编程自动化-Tom
2023-05-28 16:35
Video1 网络编程与自动化概述+python编程基础
下载2023.2.27的软件,好像有3个 vscode net-snmp pycharm

Day1 大纲
可编程网元,是自动化的另一个分支(网元可以理解为一台设备,可编程芯片的出现带来了可编程网元)。不光有自动化编程:写个程序来做监控。
1.自动化发展
本质都是通过snmp这种简单网络管理协议,来采集一些数据。
Net conf是在ssh的安全隧道中,通过yang语言来发送指令。
netconf比snmp简单的原因,snmp取的是oid的信息-不太好取(需要mib库)。而netconf最后发的是命令模式,结合可读的xml格式-能直接读懂
规模由小变大叫监控点-监控站-监控服务器集群。对这些设备进行监控就涉及到轮询的问题。
华为的esight,就是通过snmp把设备上所有信息都带回来,ex:什么版本的设备有多少台,并对外提供list列表,做统计分类-这就是数据库的工作了。告诉用户现网版本x的设备有多少台,有哪些需要升级。
底层都是通过snmp来轮询+数据库。
当前遇到的问题:用一个程序去跑的话,由于设备太多,跑一圈太慢。还有比如核心网设备,跑这个,比如查路由表的话,响应不了那么快,会耽误时间。
数据取不回来有两种情况:1.设备本身响应就慢,然后你索取的信息太多;2.网内设备多,信息量特别大,当你只取回部分数据后,新的一轮轮询又开始了。
解决方案:做成分布式的,华为的esight和imaster都要求做成分布式,限定了每一台监控主机能够监管的设备数量上限。
界面展示化:
grafana和prometheus当前用的很多。很多监控平台后端的数据都是从grafana里取出来的
Zabbix+grafana结构,zabbix是能够配置snmp的,能从后台取数据的,可以配置很多计划任何,做调度,有win和linux版本。要直接安装zabbix,然后点同步安装mysql。而不能先装完mysql,之后再装zabbix。会导致zabbix跑不起来。读取完数据后,利用grafana进行展示

grafana按流量布局比较好,可以点击去再看细分的
右下饼图是html5(flash已经不用了),鼠标放那上面,会浮动块状饼图

Cisco aci展示就是比较简单化,有性能指标下降,就通过加权计算根据结果进行展示。对业务影响不是很大,就变为橘黄色(业务还能用),红色(业务已断)。

第三种监控模式
上面是detail,下面是list。所有的监控报警,都在下面的list一个框里展示出来(用的是一个插件,listbox,把所有信息都展示出来),并排序,可以调整不同指标的权重调整显示顺序。点击list里的信息,会自动在detail里显示详细信息。交接班时,要把list里的事件处理完毕,厂家没处理完的(比如需要一长段时间,对业务又没有影响),可以选择事件关闭(下一个班就不需要再关注)。
叠加:ex 针对一台设备ping不通,网管不会展示5条ping不通的list,而会显示ping不通的次数5,最后一次报警的时间。
这种是tom认为比较好的底层监控模式。grafana漂亮,但是不好显示重点。

为排查骨干链路故障,可以在左侧接入点telnet上核心设备(部署监控软件,自动化测量),在核心设备向对端核心发起ping测试。这就避免了接入线路对你的干扰。后期按要求改为ssh+telnet登录(本质就是调整参数)
上述的测线标准化流程
imaster就是集中管理和展示
安装pycharm或vscode,是为了后期在编程是输入“.”,开发环境就能把参数后面的属性自动跟随出来or提示出来。//感觉就是cli中的?
面向对象的
当前较流行的传参数的格式json
读的所有参数都是xml的,如何插到mysql数据库中,
如何配置netconf:easy,路由器上配置ssh登录账户信息,再配置一个netconf server enable,r上就没事了。然后编程就按照华为的文档修改。

本质就是把上述独立的小程序拼接到一起,形成完整的项目
需求:cpu ,内存,session会话连接数
ping默认是5个包,最小调到3(调太小可能对方就反应不过来了)。小插件里可以写好重复ping的次数。
snmp使用的是udp 端口号161和162。这种udp不通的问题如何测试?可以看防火墙,这点没说全,check。
基于意图:处于最上层(根据接收到的信息判断是否需要切线,到什么程度需要报警,不同参数设置不同的权重是不同的,整体参数达到门限值才会动作)。假定最后开发和网工都不存在了,就是基于意图的,ex:专线的质量下降到n,就切换到第一备份上(如internet),第三备份-称为逃生路径,全挂了就切到逃生路径上。线路抖动,延迟指标达到什么程度,就开始进行切换。这就需要有网络基础,才能调整参数。
Check 意图网络 ibn(intent-based networking):将用户的业务需求(即意图)自动转换为网络配置策略。本质就是AI+SDN,借助AI机器学习对收集到的信息进行分析,捕获意图并将其转换为策略,而sdn干的还是自动化的配置下发和执行。
目前能提供ibn方案的厂商仅cisco,面向dc,是aci解决方案;面向企业网络,是dna解决方案。成功案例很多。

这图经典,网络下面在补充一个传输,哈哈。
服务器都是容器化的,上面都是虚拟化再跑应用服务。容器化的趋势是秒级存在。ex:有一个应用需要跑在什么环节下,会自动调用一个容器,创建一个虚拟化的服务器去运行。而当应用跑完不在需要了,就可以直接将容器秒级消失。这里就涉及一个安全-比如电信诈骗,赌博彩票啥的。如果做dc容器化的东西也要做备份:只要生成一个容器就做镜像备份,后期诈骗犯把买的服务注销后,你还有一份备份,可以举证。
通过netflow流控来查有什么流量,top 10 流量应用

配置管理:py,vbs,ini等类型的脚本。
可以通过脚本来读取设备的状态信息。如打开crt,然后调用脚本,把所有信息取回,再利用crt的日志记录功能。
itil流程:指的就是一种审批和协作流程。比如今晚有割接,第二天出问题了,先看这个系统,找出谁割接了,把配置先回复割接前状态,先恢复在抢修。再开会分析配置问题?谁审核的,还是设备bug等。
自动化平台:通过excel表的模式。imaster上vxlan做一些vxlan的配置,本质就是xml文件-必须要按照要求的格式去写。然后xml文件会导入到数据库,配置生效。
ex:用户增加几台server,需要新增vxlan区域,就可以让用户在工单系统上,自己选择简单的几个配置参数-生成xml文件,提交-不需审核(因为这些是默认允许该用户的操作行为)。之后运维平台可以根据自己设定的时间,把系统上所有工单跑一遍,第二天就生效。//类似云计算里为用户分配的vpc,然后用户在vpc内开通新的业务,工单从sc上传到oc进行审核,通过后执行。
数据分析:需要训练大数据了。比如,夜维的时候不要报警,缓慢增长的趋势不报警。这就不像以前是设置一个阈值,写死了,只要超过阈值就报警。现在阈值也是根据大数据,可以随时根据业务情况自动调整。//类似于chatgpt的调教

敏捷开发,就是第一时间响应客户的需求,先把基础功能做出来,后续再不断的完善,比如针对不同厂商。
模块化开发:不同程序可以调用相同的模块,减少开发人员的工作压力//类似bgp group的理念。
-----------------------------------------------------------
2023-05-29 16:03
Video2


模块化开发,ex:登录路由器的命令相同,归为同一“类”/模块。//需要开始熟悉开发的语言
根据你传递的参数来连接不同的设备。
刚开始就是小作坊式的工作模式,然后扩大,不满足需求,然后就开始重构架构,就是架构师的工作了。
底层的叫数据采集层,不用用户输参数了,参数都写在那个数据库里边。ex业务采集层就是矿工,专门做采集,采集完了数据也是也不直接展示出来,然后搁到那个数据库里边。采集完觉得这个参数本身就异常,可以报警,直接可以吐到报警平台。完善的时候就做复查。
这个数据采集上来以后报了个警,但是我这个业务逻辑层在收到报警后,不会立马就吐到展示层,我得去核查一下,去核查一下是不是有问题。退回到这个数据采集层,专门针对这个报警的信息的这个服务器或者是路由器,再次做了一次检查,检查一看是通的,这个报警就算误报,消掉。如果是真的不通,我再把它往上一级去报,真的不通,你展示出来报给用户。
这就是最后要重构,重构完了做这么一个展示,这个不光是网络,然后整个的大监控,然后甚至是一个外部网站,它都是这种东西(都具有这几层的结构)。外部网站个网络设备没有任何关系,它本身也是分这些层,它也是用数据采集,它的数据采集就是用户的输入、用户的点选,然后它也有逻辑逻,业务逻辑层,然后也有这个展示层。
业务逻辑层是最关键的人物//比如说对公司的业务熟悉,就能成为公司关键性人物。
最困难的不是开发、页面展示,而是去熟悉业务流程,网络结构。
vrrp不存在从从的状态,但可能会出现双主的状态-最重要的报警。


Cisco 的aci理解,就是有报警,提示你查底层是什么原因引起的,提示你一级一级的去检查。
安全模块分三级:领导一级,组长一级,员工一级。分太多自己不好维护。
资源管理就是cmdb,设备报警后能追溯过来。通过五元组或netfolw可以抓出ip,就能找到这个ip对应哪个服务,跑的什么应用,对应的业务负责人是谁。
github就是多人协同修改代码的论坛。
cdn,内容发布网络

ex:北京人点新浪可能就是直接访问了北京一台服务器。假如你在广州,那访问的肯定是另一台服务器,它是要多台传输的,相当于是多个镜像,然后给你引到离你最近的那个服务器去。
在访问新浪提交域名时,在进行域名解析这个 CDN 的时候,他就是在这个地方多加了一级重新指向。北京用户访问时,他就给我在这个 CN Name 这个指向上改了一下,就是说北京用户访问的时候走北京的数据中心的服务器。广州的用户访问时就访问广州市内的一个机房的服务器。同时服务器之间还要做同步,就新浪那个内容发布了以后,它会在所有边缘服务器上面它会做一个同步,同步完了以后我看的东西跟你看的东西可能是一样的也可能不一样,因为你看它其实是分区域的。这就解释了为啥你有时看到的信息是河北省的。
客户访问cdn,cdn回源(找源要)取数据
dns用到自己的或者外面的都要进行修改-在你切线路后,因为域名和ip是关联的
dns是一级一级递归查询的(dns的更新速度慢),ex北京下面改了,然后北京地区的dns更新了,但广州那边的dns可能更新的慢一点。此时广州的用户可能就访问不了,此时就需要ip地址访问。由业务部门通知用户登录具体的ip地址。dns有时2h才能刷新,海外用户dns递归速度更慢,需要1/2天才能刷新过来。

当前最流行的结构,redis-用于传参
django是使用python编的框架
Spring maven(尽量别安装在c盘,需要6G资源)-使用java编的框架
在使用开发环境时,在file中file里new一个project,再选择什么框架,开发环境就会自动部署完毕,然后就是按照之前讲的业务逻辑,从上到下,展示层、业务逻辑层、数据库连接层、底层的数据采集

如上图,你要做的就是调参
看框架是否好用,就去查开源社区的热度//试试github


xml本质就是一堆数据//类似imaster导出来的日志啥的

发过来一堆数,并给你整理出一种格式-为了让你知道是干嘛用的

xml格式中,/代表结束了



java有不同的版本,升级后可能对老的java就不能兼容。就会造成弹窗弹不出来//解释了为啥9030的网管用ie打不开。可以使用tab键切到相应位置,enter。

cmdb:资产管理(Configuration Management Databas)
配置snmp时,还可以配interface loo0,就是让其在发送snmp的trap时,带loop0接口的地址发送出去,接收端收到你的trap信息,就关联ip地址了。根据这个ip地址去cmdb里一查就能关联到设备名称。此时报警平台的报警就是设备名称+trap信息(本质就是报警平台从cmdb表中去查到底是什么设备)

tom现实中遇到的问题。两个部门在同时操作一台设备时造成的报警没有及时上报:
部门1改完生产
部门2改完待投产
后续在设备报警时,取出来两个状态,一个是生产,另一个是待投产,然后将这两个状态在数据库中做group by,排序。Group dai的编码排序要靠前。报警的条件是只取一条,就报的待投产,但因其报警级别最低,就没在大屏上展示,延误了处理。
-------------------------------------------------------
2023-05-31 9:56
Video3
在设计开发时,用oracle和mysql时有排序的问题,涉及报警的级别,可能导致报警报不上来。
tom案例:本来是服务器用的监控平台,挪到给网络用,导致很多参数不匹配,报警不上来。
干cmnd受累不讨好,还要保证数据的准确性,否则不好用。

ansible也是一个监控平台,就是把底层的数据都放在一起。cmdb对底层数据展示有优势,ansible是一个开源软件,就是一个界面


psutil见下面
这里指服务器上安装agent监控程序。服务器比网络设备要好,网络设备只能开snmp,bfd,nqa、订阅啥的,有限的几种。而agent就是软件,使用http server接口(web接口-也是微服务接口)而非socket接口(就是电脑的网卡可以开socket进程,开listen或者send参数,需要管理员权限,修改注册表,不好操作)
微服务接口,就是把程序的一个功能编完后,ex起个 HTTP 服务,你们访问这个服务,它可能是用 ip 地址,然后也可以是一个 web 域名,然后什么 log in 点那个 h t m l,然后它后边加参数微服务接口就提供的是这个,它不是用那个 socket listen那种方式去监听了,它是提供了一个 web页面的方式,它给你提供一个服务,你调用的时候你就调用它这个链接,然后你把那个相应的参数给它传过去,然后它就给你后台处理了,这就是微服务接口。
使用json格式带着格式传递数据

从网上考代码运行不起来的时候,需要考虑版本兼容性问题

开源,先有基础功能,热度高,开发人员不断参与,推高热度,进一步完善功能。psutil这个偏向于服务器级的-类似普罗米修斯
ini文件,可以修改其配置。一般使用期进行后台采集
post就是一种触发,代表全新发过来的信息

计划任务,使用的是crontab-这是linux自带的计划任务,主要注意语法。避免核心网设备监控频率过高而影响设备性能。
监控的监控-再写一个监控程序,监控之前的监控程序是否还在正常运行着。Supervisor-监工的监工,就是二级监工。这种一般在服务器端比较多,有可能你开发的agent监控死掉了,就还需要把这一堆agent再监控起来。
类似网络设备,监控的监控也发keep alive报文给agent来确认agent是否存活。

json格式
后期会使用python来读json格式

python的语法,一个table键是4个空格。通过格式中的平行缩进,就能知道哪些是平行关系。
上图没写else,默认就是return了

任务特别多时,要用到这个//本质就是加了一个大缓存,模块的解耦

Broker。卡夫卡就是数据通道,你把数据传给他以后,他有自己的算法,可以分配多少资源,多少通道,然后对端有多少口可以接这个信息。
目的是要实现完全解耦,所有的服务都不是相互依赖的,而是依赖一个中间件broker ,就相当于是数据总线,在这个图里的就相当于是这数据进来的时候(从左到右),每进来一个,都开辟一个隧道,我根据设备的性能、负载和你的流量,我开辟好多隧道,(work)这边接的时候我就到broker这边来对应的去接这个隧道里的信息。
就跟那个大礼堂好多门,疏散人群的时候可以走不同的门,大家分开走,互相不干扰。
好处就是监控(左侧任务)和实际操作(右侧work),是分开的,(work)你也往这里边传数,(任务)我就往这边取数,然后咱俩是分开的,互相不知道,我取不到数,我就在那空转了。而不是说假如说我任务一,在你这 worker 1没干活的时候,我一直调度你这 worker 1,你 worker 1 不干活,我这就崩了,它防止的是这种情况,你 worker 1 干不干活你反正都往这里数存数,我这边任务取数的时候我就从broker里边去取数,取不到我就认为没有数可取,而不是说会因为你的这个 worker 1 不干活了,导致我这边任务 1 就崩了。或者说引起我这整个的软件就崩溃。
broker 可以有什么吞吐量,还可以削峰,就是可以缓存,但是你这个数据量(右侧)太多了,可以在broker缓存,任务这边取不过来了,一下进来 10 个数据,而任务这边只能取一个数据,那 9 个我就可以缓存在broker里边。然后你这边慢慢去取,这就是broker,
未来的理念就是都是解耦的,你设计程序也是这样,都是分散开的,谁互相模块之间别互相调用,互相影响,尽量的减少互相调用,互相别那个你这个模块写错了,崩溃了也就影响这一个功能其他的功能不影响。

excel就是关系型数据库,姓名啥的,然后填内容。这种便于人去阅读,但是反应速度慢。此时就需要用到时序性数据库,其不管数据是什么样的,就打上时间戳,后面带数值。zabbix里的数据就是这样,按照时间戳的数值开始绘图。
prometheus是带着监控界面的,主要是针对服务器

固定大小空间,就是定长的-类似于ipv4格式定长一样,加快处理速度。而在读历史数据时,指针得来回扫,比较慢,读最新的数据最快。
关系型数据库:mysql、oracle、微软的sql server。而大数据,监控数据中心的用到时序性数据库,像ansible用到的数据库是螺旋形的存储,数据格式比较特殊,只能用特定的软件才能读取。
echarts和grafana就是图形报表,来关联后台的数据库


改上述代码参数就行了
js异步回调:程序做得好的话,是通过网页去刷新的,我 5 秒钟一刷新的时候,刷新的是后台数据,因为你网页打开的时间跟那个后台采集的时间是不一致的,所以你就要实时刷新。
你刷新的时候是刷新的跟数据库的连接,看看数据库里头有没有新的数据回来,而不是说你在实时的刷新那个采集平台,说你一刷新采集后台就给你去重新采集一遍数据,那不行,这样流量带宽一下就撑满了。它只是在刷新后台数据,并不是在刷新那个数据是怎么来的

mq就是队列(内存特别大的机器,其部署很简单,是开源的,就是为了缓存agent来的数据,server再从mq取数据),跟broker类似,存在缓存功能,调和两端
华为的新版本已不支持trill这个大二层技术。
dc中的sw数量要少,但是要划分的vlan数量要多得多,基于此需要用到vxlan
acl可以买纯软件,然后自己搭硬件服务器,也可以找cisco直接买一套的

ie考题
读取数据,可以用snmp、cli以及netconfig来取
Syslog 日志服务器
代码复用性:类的概念,可以实现调用
python很多东西不需要写,只需要引用别人的就ok
------------------------------------------------------------------------------------------------
2023-06-01 11:18
Video 4
普罗米修斯可用于监控容器
命令的遍历
python是编译型语言,是顺序执行的,执行完上一条才执行下一条
是大数据分析和网络爬虫两个应用把python带火了起来。
编程语言好不好,看是否容易学,是否内存管理好,指针这个东西很容易引起崩溃。黑客的病毒,就可以利用指针的缓冲区溢出。让超出缓冲区的部分使用可执行的命令执行了
现在写程序就不带指针了
python程序安装3.7.2-去python.org官网下自己下个安装文档去看

安装时要点击这个

path里编辑,将python.exe的路径添加进去

上述操作,就是为了在cli上就能直接调用出python

pycharm要装这个-装社区版去

先这样选,后期再去import

选这个,先不选择特性插件。

有开发环境,就能自动进行命令/格式补全

不用pycharm用vscode,也是一样的()vs可以加载各种程序,同时可以检测出程序使用的是什么语法,run的时候就需要选择使用什么配置
试一下vscode和pycharm
--------------------------------------------
2023-06-02 12:49
Video5
python的pip下载-安装开发环境,自动就会安装pip

从这开始看

实际工作,就是把标准的参数卸载xml里,然后让设备取读取
----------------------------------------------
2023-06-02 14:58
Video6
带外管理-不走业务线
比如debug时,如果用带内,就可能对业务产生影响。可以使用ctrl+c进行终止。但是可能设备也没剩下多少性能,无法响应。
ensp和virtual box的版本有关联性,不能乱升级
管理员运行box-管理-主机网络管理

如此添加一个云的ip地址,dhcp不能勾选。配置完成后,需要重启电脑,在网络连接里就能看到该网卡

千万不能选择默认网卡56.1-跟公网通了,电脑会学习路由,机器变的非常慢

要按照这个配置对端互联的地址。
选择udp,点添加

然后在设备(AR)和云端之间拉线。想ping通云就关闭防火墙-控制面板内
不关闭防火墙,在电脑上cmd下能ping通router,但是反向不通。不通也没事,因为telnet能通就行了

配置密码(1)和配置telent(2)。按照上图配置telent
编程只不过是将手工的,变为自动化
新建文本,然后改后缀为py。就是python文件了
Telnet.py的内容敲一遍(群里的telnet文件语法有问题)

后面这俩都用到了 ,先在开发环境下敲吧,能提示你哪里有错误
Import logging-将信息存为log
Import telnetlib-引用telnetlib;后面是引用时间
-----------------------------------------------------------------------
2023-06-06 13:16
Video 7
main函数,是主函数的入口

Host ip为ensp上router的接口ip(按上图去改配置)
def一个过程也需要加:
学习使用,驼峰写法,首单词小写,后面首字母大写,告知对方变量是str类型的(字符串);int整数型
Logout_host()关联之前写的exit

def是定义一个过程
\n代表回车,\r是换行
##在python中代表注释

等待设备响应时间,因为这些代码是ms级在运行的。写成1就行了。这个需要根据设备取调,先用vm来调,然后在现网设备上调试。
参数是从xml文件里读取的

try连接失败,则进入except
telnetlib是一种插件,需要安装才可以在pycharm上实现telnet。


这些文件找老师要

下面是加了sleep的结果,上面是没加,设备直接反应登录成功了(就是没等设备反应过来,这边的指令都已发完)

尽量在>模式做程序(就是不进特权模式),安全
执行dis cur命令后,命令显示不全,有--more--问题的解决方案:

华为screen-length 0 temorary 本次全屏显示,而另一个人登录还是一段一段去显示。cisco对应是ter len 0
方法1 ,不同厂家的more前后--格式可能不一样。一旦回显的信息不一样,就需要改动程序。就需要等>代表指令完全执行完。

precommand解决了more的问题。编程的解决方法也很多
新增上下一对precommand

语法解析:import telnetlib 引用硬件环境 ,ex:学校的教育资源

然后在定义一个学员,配置这个人员使用资源的情况
logout登出
def用来定义一个过程,下面再配一堆东西

Ascii-英文 \n是回车 ,\r是换行
python是解释性语言,而vb是编译型语言-需要生成exe,尽量将写的参数都连接出去

try是运行,catch是捕获异常(这里没有)。except:一旦try不成功就except
--------------------------------------------------------
2023-06-09 15:12
Video8
Python 字符串截取-上网搜就有
摘的时候要匹配关键字+符号才能唯一的定位,定义起始位和结束位,可以先搜索一下你的文本。截取你需要的内容。如果字符出现了很多,就尽量不要使用其作为关键字来进行截取。

tom作业(已完成,见telnet脚本)

方式1:正规的写法 command_result+loggin.warning
\n%s是一种格式化的东西,照抄
命令前加#,即变为注释。

方式2:定义aa
参考实例 从这个关键字+3。不+no.,就是从这个词的第一个字符开始取
index:检索这个字符串“LTD”

这样改



aa定义顺序在前面,就会报错,且不会有结果。顺序放在后面,则正常。
38m11s开始讲ssh

ssh就在aaa里这里改为ssh
Stelnet server enable需要单独追加配置上
至此,通过crt ssh2就能登录到ar设备

Data Encryption Standard



通过.124跳转到另一台设备时,目标机的配置里就会记录这些东西
机器可能是通过网关机直连,或是通过3a或4a认证服务器直接连过去的,这种都是在认证服务器上记录key
上图是在设备上一跳跳登录设备时,server就需要记录client端的公钥,下次再连接就可以直接用对方的公钥解了。
使用crt来连接远程机器的话,是在注册表里
ssh开始连接使用公钥私钥,里面就是使用的摘要的方式确认。
ssh的秘文加密

ack是认可上一个的序列号

公钥和私钥进行交互的时候看seq,1587。公钥和私钥进行交互时都是在这个session会话里。同时抓出来的报文都是加密的,不像telnet一样是明文。黑色的信息就是秘钥交互时的确认,交互是序列号不变,都是在一个session中,建立一个模板一样的东西,这样后续就不需要再传递很大的公钥-类似建立好之后建立了摘要
------------------------------------------------------------
浙公网安备 33010602011771号