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语句
    条件如今作的是一个映射表,维护起来不方便,能够考虑将其构形成一个数据库表java

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

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

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

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是精确查找,能够对于一组元素。
本站公众号
   欢迎关注本站公众号,获取更多信息