2019-08

8.1

  1. hex内置函数直接将十进制数转换成十六进制
    把十六进制等其他转回十进制可以使用eval 、
    eval ('0x3d') 就可以将16进制转换成十进制
  2. 数据库的集群配置得在同一个网段?zabbix的主备使用的是代理模式,正常情况下代理端指向主的数据库,异常情况可以改变为备数据库,代理端可以理解为一个zabbix服务端
  3. 集合真是个好东西,快速进行两个列表的比较,
  4. pymysql模块中使用conn对象创建的cursor对象,可以添加参数as_dict=true来输出字典
  5. sql语录的in判断where id in(1,2,3,4)
  6. 集合中的元素不能是字典,字典是不能被hash的,
    删除列表中符合条件的某个元素,可以使用l.index找出元素的位置,再pop索引位置删除

8.2

  1. 整理了一天模板,思科路由器交换机模板通用,hp服务器使用ilo模板,已经集成到了hp snmpv2,有一些没得需要参照mib文件实际添加。

8.3

  1. 又浪费了一个美好的周末,浪费了48小时,真是闲的蛋疼,也不知道培养啥兴趣,另外哪儿托真好看。
  2. 有时候当下想不起来的东西,在某个瞬间就会思路通畅。

8.4

  1. 在参数的配置中,能拆分的尽量拆分。
  2. django orm 模型的多对多关系,还有多个字段对应同一张表的时候出现的问题,详情看django 的多对多。
  3. 模块的抽象尽量不要有啥联系

8.5

  1. Ubuntu真的难用

8.6

  1. 代码的优化问题,像今天一共有十二条数据,每个都要执行一次获取结果传值,使用了for便利了所有sql语句,就执行了12次,在数据库中,每个cursor对象都是宝贵的资源,不能这么浪费。尽量在一次查询中拿出所有的数据,可以拿出所有的条件,进行where xxx in (一个元祖,我们的条件),在进行sql占位匹配的时候,%s不好用,尽量还是用{}.foramat形式,而且in 后面的条件查询只接受元祖类型,记得转换格式,
    当sql语句为 "select * from user where name = %s"这种类型的时候,对%s进行填充的参数为execute的第二个参数,
    在使用cursor.execute(sqzl,占位参数)
    还有一个cursor.executemany方法,一次执行多个sql语句
    条件现在做的是一个映射表,维护起来不方便,可以考虑将其构造成一个数据库表

  2. 使用zabbix_trapper方式进行监控的时候,zabbix_sender需指定的参数有-z 主机ip -s主机名字 -k自定义key(只是一个传值的形式键) -o 表示的是传的真实值
    对于多名字的监控像,像网络链路这种的,一个NAME对应一个key,在创建自动发现规则的时候,设置为zabbix_trapper方式,定义一个key,在后台就可以使用zabbixsender给这个key发送所有的宏 {#NAME}:xxx,这样,这个{$NAME} 宏变量就可以在监控项原型触发器原型中使用了。

  3. 更改完celery任务后,先在supervisorctl中关闭celery进程,删除项目的celery-schedule文件,再重启celery任务,

  4. 在将solarwinds的告警信息映射到监控系统中时,
  5. 深度系统,真香
  6. firefox浏览器挺好用,国内不限制,可以各种端同步。

8.7

  1. mssql中的一个字段是uuid对象,直接在数据库中存储的数据是uuid值。取这个字段出来的时候是一个uuid对象。要获取到存储的uuid串可以对对象使用str函数进行强转换
  2. 各类监控产品逻辑都差不多,
  3. sys的argv是一个属性,不是一个方法,不用加括号,返回的是一个参数列表,可以作为一个接收参数的桥梁,按下标进行取值
  4. os执行linux方法可以用os.system会直接打印出命令执行的结果,他的返回值是一个执行状态值,0表示执行成功,非0则失败,如果不想要直接打印命令执行结果,可以使用os.popen,也可以执行命令,返回值有read方法。可以得出执行结果,不过结果中自带一个换行符,需要强制去除
  5. 深度系统可以在配置文件中配置它的主题 usr
  6. 判断文件是否存在的需求,想的用脚本的方式走,参数接收ip及文件名,一开始想的还是在脚本中执行ssh链接到主机,再用os来判断文件是否存在。 但是这样还需要用户名密码,还得提变更申请。
    换一种思路,因为使用的是外部检查,脚本是放在server端的,就像在server端执行一条zabbix_get  配置zabbix的监控项vfs.file.exist[filename]来查找对应的文件,一样,在脚本中执行这条命令就可以。print他的返回值,就可以在zabbix端收到相应的数据。
  7. 在使用自动发现监控项原型创建出的监控项,如果取消掉其中一个监控项,会有一个延迟删除时间,在这段时间内,这个监控项还是在的,只不过后面的有一个黄标,表示在延迟时间后删除,也可以手动删除,

8.8

  1. zabbix 监控web页面的key web.page.regex[ip,url路径,port,对返回值可以使用的正则表达式,允许输出的内容] 相比较web.page.get[],后者只是去简单的get页面,拿到的时相应包,不做任何处理,所以还是regex好用一点,有个问题就是get取到的响应包是302的重定向,为啥
    web.page.regex[127.0.0.1,/admin/,8080,"HTTP/ (.*) OK","\1"]
    这样就可以提取出响应的状态码200
  2. 对于触发器的配置,除了可以正常的在页面点选意外,还可以手动的将两个监控项进行搭配使用
    正常的表达式 agent.ping <> 1 报警
    手动的 表达式1 比较符 表达式2 ,将另一个监控项的结果作为另一个监控项的判断条件
  3. 对于py脚本,在文件头申明解释器路径,类似于#!/bin/bash
    py的申明可以是 #!/usr/bin/python3 也可以从环境中获取#!/usr/bin/env python3
    创建完脚本后,也时需要授权,chmod +x xxxx.py 然后 ./ 脚本名执行。
  4. 对于迈普设备和思科设备的告警合并,迈普的sql语句查出来的正常ip值先存放一个cache,到了下次task执行获取到正常ip值,将后取到的ip值跟先前cache里存的正常ip值进行比较,这里使用的set,采用集合的形式去做比较,上一次值中有的,下一次没有,意味着这个ip值错误了,用a.difference(b),b.difference(a),两次比较产生错误的ip数和回复的ip数,再讲这个错误ip数单独存一份cache,专门对错误的ip进行统计,有报错的就添加进去,有恢复的就剔除出去,最后再和思科的告警信息合并,就是最终呈现的告警信息。
  5. datetime.datetime.now()获取的时当前日期,可以直接对这个对象使用strftime('%Y%m%d')进行格式化输出日期。
    datetime.timedelta(days=1)是一个时间跨度对象,可以跟now对象做加减,表示日期的前后跨度。
    %Y表示的是4位年信息,%y表示的时2位年信息
src = "127.0.01"
dst = "172.0.0,1"
netstat -an|awk -v src=$src -v dst=$dst '/ESTABLISHED/{if ($4 == src && $5==dst){a=1}}END{if (a==1) {print 1} else {print 0}}

8.9

  1. 对于监控项的定时监控设置:默认的监控项没有定时这个功能,只有一个自定义间隔时间,是设置周期的,需求是对于某个时间后的文件存在进行监控,可以换个思路,在触发器的设置中,有一个time函数,格式是100000时分秒 代表的是 十点零分零秒,触发器表达式:{xxxxx.time()>100000} and {xxxx.last()=0}和管辖,配合另外的监控项 就可以构造出在十点以后,某个监控项的最新值是0的时候就报警,就可以完成定时的对监控项实现定时执行的效果,
    触发器还可以设置依赖关系,一个触发器依赖另一个触发器的触发
  2. pyexcel_xlsx模块挺好用的,函数save_data('xxx.xlsx',data)直接接受两个参数,表格文件名,二维数组数据对象或者orderdict对象,
    二维数组 [[列1的值,列2的值],[列1的值,列2的值],[列1的值,列2的值],]这样的sheet名是系统定的
    orderdict对象 from collection import orderdict {'sheet1_name':[一个二维数组数据对象],'sheet2_name':[一个二维数组数据对象],}这样就可以定义sheet名
  3. 对于代码的健壮性,尽量考虑报错的场景,多用get,

8.12

  1. 中间变量用的太多会不会造成一些问题。

8.13

  1. 在部署项目的时候首先在家要把要用的包都下载好,因为在现场是不能连外网的。安装好环境之后,就可以部署软件了。需要的mysql,redis,nginx都可以在114的repo上下载,如果没有的话也需要提前准备。
  2. 因为新上的消息平台跟原来的监控系统也有联系,所以在更新监控系统的时候,遵循操作手册,先把所有涉及的项目先备份,然后替换要更换的文件。
    因为监控系统主服务及celery和一些命令格式都是用supervisor来管理的进程,所以在用supervisor来启动这些进程的时候,就打开日志文件,以确保服务的正常启动。当感觉更新不稳定的时候,时刻准备将代码退回到备份档。因为supervisor有大概两分钟的重试时间,超过两分钟的话,如果服务不可用,立马退回备份档,以确保生产环境不受影响,然后查看日志信息查错再准备更新。
  3. 今天在上线消息平台的时候,因为测试的那期间监控系统时没有报错的,当看到消息平台半天没动静,以为代码出问题了,就给回退了,然后一直发不出消息,这是一种对自己代码的没信心,然后就在那盲目的瞎找问题,浪费了很多时间,正确做法是,对自己的代码逻辑清晰,知道哪儿在哪,即使是出了问题,首要是去查看日志,而且以后在代码中要对错误日志的logging即使进行记录,try except也要多用,这样才能发现问题。即使排除
  4. 在监控系统发消息的拦截部分中,今天明明设置拦截了,但是没有及时生效,也浪费了很多时间,莫名其妙的产生的bug,而且在send_msg中因为拦截了消息,进行消息转发,但是在连接的close中没有进行处理,在close进行了处理,接触bug,
  5. supervisor的使用,由python编写,安装supervisor 用systemctl启动supervisord.service服务,在/etc/supervisor.d/目录下配置我们的进程管理.conf文件,需要在/etc/supervisor.conf中的最后include中修改为 ./supervisor.d/*.conf
  6. zabbix中修改触发器的时候,需注意触发器的更新时间,否则立马更新后使用的还是先前的触发器,会造成误报警。

8.14

  1. 数据结构的优化是有很大空间可以压缩的,只要方法作对,瞬间可以省去很多代码,还都可以达到目的。
  2. 使用zabbix的api来创建虚拟主机可监控项触发器,配合使用zabbix_sender方式可以完成其他业务的的告警集成到zabbix告警系统
  3. 今天将测试环境的监控系统告警发送转移到消息平台,测试环境的send_msg直接夯住了,没找到原因

8.15

  1. 更到生产环境,心里就是没底,特别没底,就怕出问题。
  2. 消息平台运行成功,另外以后还要把代码中的print去掉,不要遗漏

8.16

  1. 数据结构的拼接还是个大问题,一个好的数据结构可以省去很多的事情。更高效。
  2. 变量的申明,最好是见名知意的那种。
  3. dbeval很好用,还可以生成表之间的ER关系图谱
  4. 对于websocket,需要在consumer中创建生成数据的函数,然后在routing文件中创建相应branch的url

8.19

  1. 做客户的poc测试,需要提前沟通好,需要的设备信息,需要使用的测试包,包括license,甚至是linux的镜像源,当前我们使用的是centos的7.4版本。所有能考虑到的地方都要准备好。
  2. 进行poc测试看poc手册。
  3. 各个功能软件的ip连接,需要把各自的hosts内容都配置好,要学会多利用日志报错来查看问题所在点。

8.20

  1. 使用pyinstaller进行py文件的打包处理。
  2. 在写脚本的时候,健壮性是前提,对于可能取不到的值,可以提前进行变量的申明,
  3. 今天在fping脚本的编码中,我的想法是同一个脚本执行多次然后分别取出想要的loss值,delay值,status值,但是这样会很繁琐,而且效率很低。奇哥的写法是直接一次执行,所有结果都取到,然后构造成一个字典,将每个值匹配一个key,在zabbix执行的时候,传入一个key值,根据key值的不同来取出相应的值,
    还有就是在配置userparamsters的时候,直接配置三个不通的监控项,依次取值,这个真的很强。
  4. 跟用户沟通,需要明确需求,列出清单,一项一项的走。而且今天中午明明我把包放进文件夹了,到了客户打开里面竟然是空的,还好没有清空回收站,才恢复了,而且当时我没有声张,其实这个没啥,想太多了,那时是可以停下去拿到最新的包,不能去拿没有把握的包去部署,这次是幸运恢复的是最新包,万一错了,那时间成本可能就划不来了。下次不能在再这样了
  5. win7中打的包在2003,xp上不能使用,考虑用go来编译一个客户端。

8.21

  1. go的交叉编译是一个很吊的东西,解决可很多的依赖,用go来编译安装包,依赖文件不像py那样需要把整个py环境打进去,而且不存在win7打出的包xp和2003不能使用的情况,go编译出来的包,兼容性很强,跨平台使用不成问题,
  2. fping在windows平台和linux平台中参数是不一样的,显示的结果也是不一样的,在go中调用命令拿到的返回结果跟终端显示也是不一样的
  3. django2.x在url的设置中做了变化,不再使用^ $来配置url,如果要使用正则匹配url,需要使用re_path,而且在path中,内置了几个数据类型来进行url中的正则匹配。默认的就是str,如果要强制定义,使用 来正则匹配。
  4. go中的切片,字符,整形判断概念忘了个差不多,代码全靠百度,
  5. go程序的参数传入,if判断,swith case语法,编译包的使用及参数调用。
  6. datetime.datetime.fromtimestampt(时间戳),直接转成的日期对象可以直接和mysql中自动添加datetime对象作比较,不再像原来一样还需要先进行时区的指定。

8.22

  1. 多使用cache中的数据来处理,在做dco报表的时候,event中的数据已经包含了想要的数据,可以使用tag和分组group来进行分类,在做tag的时候,cache中包含了所有触发器中的tag项,在cache中的显示是一个大列表中包含的tag,
  2. 每次在变更代码的时候注意备份,备份,备份,当要从备份中回复某个文件的时候,使用cp,不要想当然的使用mv,当某个时候想要整体回迁的时候,你就会发现你忘了mv了哪个文件了,到时候就哭吧。
  3. 使用zabbix sender发送数据,发出去的都是字符串数据,在zabbix中创建监控项原型的时候只要选择好数据类型,就可以显示了,但是当返回的数据字符串内部包含的浮点型数据,整形就匹配不了了,就得使用浮点型来显示数据了

8.23

  1. 能从内存中取数据是真的方便,减少查数据库
  2. 对xls ,xlsx表格分别使用xlrd openpyxl方式可以读取数据,操作数据,
  3. zabbix的item对主机直接取是可以拿到所有的数据的,包括主机创建的监控项和自动发现中监控项原型映射出来的监控项
  4. 25号才发现更新的代码还有一处没有完成改变,问题还挺大的,明天去更改下,真的是,以后只要有代码变动就的记下来,不然过些日子就忘的一干二净了,还有每天的工作内容也得开始罗列清单了,脑子并不能记所有的东西

8.26

  1. 今天碰到一个列表里包含多字典的数据结构,对列表遍历取值,做条件判断,当满足条件的最数据处理,并且从列表中remove删除,但是在打印的时候却没有删除,为啥?
  2. 突然要接手两个项目,全新的练手,我了个去,亚历山大,表面风平浪静,实际上慌得一批啊
  3. django的后台关联模型的名称展示需要定义__str__方法,
  4. 在go中修改文件权限,在windows中是没有啥作用的,linux系列中直接chmod(文件名,权限码 0777),go中有四种读写文件的方法
  5. 在zabbix汇总的userparamsters中配置的自定义监控项,当要对监控项进行传值 的时候,可以使用 xxx.xxx[*],自定义脚本的执行命令 "$1" "$2" "$3", 重启zabbix服务,使用zabbix_get -s 本地ip -k 自定义监控项[参数1,参数2,参数3...]注意,这里的的参数是不用加""
  6. 今天还听到说类可以不执行init方法直接调用?怎么做?
  7. django自身就支持原子性,支持事务
  8. 序列化器是支持自定义返回数据的
  9. request.post.data()接收到request对象是不能直接添加数据的,可以使用浅拷贝然后就可以想字典一样使用了,然后在serialize指定data的时候使用这个浅拷贝的数据对象

8.27

  1. zy业务视角大屏和用户视角大屏用的是两个django命令,执行函数生成的cache数据,数据时从oracle库中获取的数据,使用的类似sqlarchmy连接oracle数据库来执行sql语句获取数据。
  2. 当openpyxl保存文件到指定路径的时候,可以在文件名中直接写成绝对路径或者相对路径,zy的DCO分组发邮件的时候是按组来发送的,给一个组底下所属人员都发邮件,在邮件中的附件需要指定这个excel表格,如果直接使用绝对路径的文件名,发布出去,因为邮件在加附件的时候会把绝对路径中的/进行转义,导致附件加不上,邮件发布出去,然后我在绝对路径的文件名字符串之前加了r,使/不转义、再测就可以发送成功了
  3. IBM的aix小机,性能介于移动pc和服务器之间,不能使用命令补全,删除这些操作,所以在这里执行任何一个命令都是要非常谨慎的,千万千万要谨慎。另外go中的aix编译有问题。
  4. 监控中间件的脚本走得就是java的api

8.28

  1. 客户沟通,不能确定的东西,说回去商量,不能懵。
  2. 自定报表的更新时间,原来想法是用周期天数去做时间的加减,然后在判断这个时间是否符合条件再执行,后来改成了直接在表中创建一个下次更新时间,直接在每次执行的时候对这个时间进行加周期操作,得到一个未来的事件,然后任务每天取下次更新时间满足的对象来执行, update_time__lte = now;

8.29

  1. zy的网路连通性检测中,大屏中的数据和网络连通错误数据分别对应的两个缓存,不过存在一个问题,他们的人在添加的时候可能同一个地方添加多2条以上的链路,现行的判断逻辑是两条联络路断就认为是双线终端,所以在作报告的时候构造一个字典对象,以地名为键,值为一个列表,只要有错误,就把运营商的类型加进去,之后再对这个字典进行取值判断列表中元素数量的判断,大于2的就认为是重复的,为1的直接在构造问题的时候就把它添加进去。
  2. 给ym的部署中给想错了,差点给忘了用go打包,忽然想起来才改掉,go打的包,真香

8.30

  1. zy的solarwinds设备在新加的时候需要注册模板,只有吧模板添加上,才会在数据库中查到该主机ip,另外对自己的代码要有信心,敢于去质疑他们的问题。
  2. zabbix的search是模糊查找,只能针对一个,filter是精确查找,可以对于一组元素。

猜你喜欢

转载自www.cnblogs.com/0916m/p/11482036.html