8.1
- hex内置函数直接将十进制数转换成十六进制
把十六进制等其余转回十进制可使用eval 、
eval ('0x3d') 就能够将16进制转换成十进制
- 数据库的集群配置得在同一个网段?zabbix的主备使用的是代理模式,正常状况下代理端指向主的数据库,异常状况能够改变为备数据库,代理端能够理解为一个zabbix服务端
- 集合真是个好东西,快速进行两个列表的比较,
- pymysql模块中使用conn对象建立的cursor对象,能够添加参数as_dict=true来输出字典
- sql语录的in判断where id in(1,2,3,4)
- 集合中的元素不能是字典,字典是不能被hash的,
删除列表中符合条件的某个元素,可使用l.index找出元素的位置,再pop索引位置删除
8.2
- 整理了一天模板,思科路由器交换机模板通用,hp服务器使用ilo模板,已经集成到了hp snmpv2,有一些没得须要参照mib文件实际添加。
8.3
- 又浪费了一个美好的周末,浪费了48小时,真是闲的蛋疼,也不知道培养啥兴趣,另外哪儿托真好看。
- 有时候当下想不起来的东西,在某个瞬间就会思路通畅。
8.4
- 在参数的配置中,能拆分的尽可能拆分。
- django orm 模型的多对多关系,还有多个字段对应同一张表的时候出现的问题,详情看django 的多对多。
- 模块的抽象尽可能不要有啥联系
8.5
- Ubuntu真的难用
8.6
代码的优化问题,像今天一共有十二条数据,每一个都要执行一次获取结果传值,使用了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
使用zabbix_trapper方式进行监控的时候,zabbix_sender需指定的参数有-z 主机ip -s主机名字 -k自定义key(只是一个传值的形式键) -o 表示的是传的真实值
对于多名字的监控像,像网络链路这种的,一个NAME对应一个key,在建立自动发现规则的时候,设置为zabbix_trapper方式,定义一个key,在后台就可使用zabbixsender给这个key发送全部的宏 {#NAME}:xxx,这样,这个{$NAME} 宏变量就能够在监控项原型触发器原型中使用了。python
更改完celery任务后,先在supervisorctl中关闭celery进程,删除项目的celery-schedule文件,再重启celery任务,mysql
- 在将solarwinds的告警信息映射到监控系统中时,
- 深度系统,真香
firefox浏览器挺好用,国内不限制,能够各类端同步。linux
8.7
- mssql中的一个字段是uuid对象,直接在数据库中存储的数据是uuid值。取这个字段出来的时候是一个uuid对象。要获取到存储的uuid串能够对对象使用str函数进行强转换
- 各种监控产品逻辑都差很少,
- sys的argv是一个属性,不是一个方法,不用加括号,返回的是一个参数列表,能够做为一个接收参数的桥梁,按下标进行取值
- os执行linux方法能够用os.system会直接打印出命令执行的结果,他的返回值是一个执行状态值,0表示执行成功,非0则失败,若是不想要直接打印命令执行结果,可使用os.popen,也能够执行命令,返回值有read方法。能够得出执行结果,不过结果中自带一个换行符,须要强制去除
- 深度系统能够在配置文件中配置它的主题 usr
- 判断文件是否存在的需求,想的用脚本的方式走,参数接收ip及文件名,一开始想的仍是在脚本中执行ssh连接到主机,再用os来判断文件是否存在。 可是这样还须要用户名密码,还得提变动申请。
换一种思路,由于使用的是外部检查,脚本是放在server端的,就像在server端执行一条zabbix_get 配置zabbix的监控项vfs.file.exist[filename]来查找对应的文件,同样,在脚本中执行这条命令就能够。print他的返回值,就能够在zabbix端收到相应的数据。
- 在使用自动发现监控项原型建立出的监控项,若是取消掉其中一个监控项,会有一个延迟删除时间,在这段时间内,这个监控项仍是在的,只不事后面的有一个黄标,表示在延迟时间后删除,也能够手动删除,
8.8
- 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
- 对于触发器的配置,除了能够正常的在页面点选意外,还能够手动的将两个监控项进行搭配使用
正常的表达式 agent.ping <> 1 报警
手动的 表达式1 比较符 表达式2 ,将另外一个监控项的结果做为另外一个监控项的判断条件
- 对于py脚本,在文件头申明解释器路径,相似于
#!/bin/bash
py的申明能够是 #!/usr/bin/python3
也能够从环境中获取#!/usr/bin/env python3
建立完脚本后,也时须要受权,chmod +x xxxx.py 而后 ./ 脚本名执行。
- 对于迈普设备和思科设备的告警合并,迈普的sql语句查出来的正常ip值先存放一个cache,到了下次task执行获取到正常ip值,将后取到的ip值跟先前cache里存的正常ip值进行比较,这里使用的set,采用集合的形式去作比较,上一次值中有的,下一次没有,意味着这个ip值错误了,用a.difference(b),b.difference(a),两次比较产生错误的ip数和回复的ip数,再讲这个错误ip数单独存一份cache,专门对错误的ip进行统计,有报错的就添加进去,有恢复的就剔除出去,最后再和思科的告警信息合并,就是最终呈现的告警信息。
- 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
- 对于监控项的定时监控设置:默认的监控项没有定时这个功能,只有一个自定义间隔时间,是设置周期的,需求是对于某个时间后的文件存在进行监控,能够换个思路,在触发器的设置中,有一个time函数,格式是
100000
时分秒 表明的是 十点零分零秒,触发器表达式:{xxxxx.time()>100000} and {xxxx.last()=0}和管辖,配合另外的监控项 就能够构造出在十点之后,某个监控项的最新值是0的时候就报警,就能够完成定时的对监控项实现定时执行的效果,
触发器还能够设置依赖关系,一个触发器依赖另外一个触发器的触发
- 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名
- 对于代码的健壮性,尽可能考虑报错的场景,多用get,
8.12
- 中间变量用的太多会不会形成一些问题。
8.13
- 在部署项目的时候首先在家要把要用的包都下载好,由于在现场是不能连外网的。安装好环境以后,就能够部署软件了。须要的mysql,redis,nginx均可以在114的repo上下载,若是没有的话也须要提早准备。
- 由于新上的消息平台跟原来的监控系统也有联系,因此在更新监控系统的时候,遵循操做手册,先把全部涉及的项目先备份,而后替换要更换的文件。
由于监控系统主服务及celery和一些命令格式都是用supervisor来管理的进程,因此在用supervisor来启动这些进程的时候,就打开日志文件,以确保服务的正常启动。当感受更新不稳定的时候,时刻准备将代码退回到备份档。由于supervisor有大概两分钟的重试时间,超过两分钟的话,若是服务不可用,立马退回备份档,以确保生产环境不受影响,而后查看日志信息查错再准备更新。
- 今天在上线消息平台的时候,由于测试的那期间监控系统时没有报错的,当看到消息平台半天没动静,觉得代码出问题了,就给回退了,而后一直发不出消息,这是一种对本身代码的没信心,而后就在那盲目的瞎找问题,浪费了不少时间,正确作法是,对本身的代码逻辑清晰,知道哪儿在哪,即便是出了问题,首要是去查看日志,并且之后在代码中要对错误日志的logging即便进行记录,try except也要多用,这样才能发现问题。即便排除
- 在监控系统发消息的拦截部分中,今天明明设置拦截了,可是没有及时生效,也浪费了不少时间,莫名其妙的产生的bug,并且在send_msg中由于拦截了消息,进行消息转发,可是在链接的close中没有进行处理,在close进行了处理,接触bug,
- supervisor的使用,由python编写,安装supervisor 用systemctl启动supervisord.service服务,在/etc/supervisor.d/目录下配置咱们的进程管理.conf文件,须要在/etc/supervisor.conf中的最后include中修改成 ./supervisor.d/*.conf
- zabbix中修改触发器的时候,需注意触发器的更新时间,不然立马更新后使用的仍是先前的触发器,会形成误报警。
8.14
- 数据结构的优化是有很大空间能够压缩的,只要方法做对,瞬间能够省去不少代码,还均可以达到目的。
- 使用zabbix的api来建立虚拟主机可监控项触发器,配合使用zabbix_sender方式能够完成其余业务的的告警集成到zabbix告警系统
- 今天将测试环境的监控系统告警发送转移到消息平台,测试环境的send_msg直接夯住了,没找到缘由
8.15
- 更到生产环境,内心就是没底,特别没底,就怕出问题。
- 消息平台运行成功,另外之后还要把代码中的print去掉,不要遗漏
8.16
- 数据结构的拼接仍是个大问题,一个好的数据结构能够省去不少的事情。更高效。
- 变量的申明,最好是见名知意的那种。
- dbeval很好用,还能够生成表之间的ER关系图谱
- 对于websocket,须要在consumer中建立生成数据的函数,而后在routing文件中建立相应branch的url
8.19
- 作客户的poc测试,须要提早沟通好,须要的设备信息,须要使用的测试包,包括license,甚至是linux的镜像源,当前咱们使用的是centos的7.4版本。全部能考虑到的地方都要准备好。
- 进行poc测试看poc手册。
- 各个功能软件的ip链接,须要把各自的hosts内容都配置好,要学会多利用日志报错来查看问题所在点。
8.20
- 使用pyinstaller进行py文件的打包处理。
- 在写脚本的时候,健壮性是前提,对于可能取不到的值,能够提早进行变量的申明,
- 今天在fping脚本的编码中,个人想法是同一个脚本执行屡次而后分别取出想要的loss值,delay值,status值,可是这样会很繁琐,并且效率很低。奇哥的写法是直接一次执行,全部结果都取到,而后构形成一个字典,将每一个值匹配一个key,在zabbix执行的时候,传入一个key值,根据key值的不一样来取出相应的值,
还有就是在配置userparamsters的时候,直接配置三个不通的监控项,依次取值,这个真的很强。
- 跟用户沟通,须要明确需求,列出清单,一项一项的走。并且今天中午明明我把包放进文件夹了,到了客户打开里面居然是空的,还好没有清空回收站,才恢复了,并且当时我没有声张,其实这个没啥,想太多了,那时是能够停下去拿到最新的包,不能去拿没有把握的包去部署,此次是幸运恢复的是最新包,万一错了,那时间成本可能就划不来了。下次不能在再这样了
- win7中打的包在2003,xp上不能使用,考虑用go来编译一个客户端。
8.21
- go的交叉编译是一个很吊的东西,解决可不少的依赖,用go来编译安装包,依赖文件不像py那样须要把整个py环境打进去,并且不存在win7打出的包xp和2003不能使用的状况,go编译出来的包,兼容性很强,跨平台使用不成问题,
- fping在windows平台和linux平台中参数是不同的,显示的结果也是不同的,在go中调用命令拿到的返回结果跟终端显示也是不同的
- django2.x在url的设置中作了变化,再也不使用^ $来配置url,若是要使用正则匹配url,须要使用re_path,并且在path中,内置了几个数据类型来进行url中的正则匹配。默认的就是str,若是要强制定义,使用
来正则匹配。
- go中的切片,字符,整形判断概念忘了个差很少,代码全靠百度,
- go程序的参数传入,if判断,swith case语法,编译包的使用及参数调用。
- datetime.datetime.fromtimestampt(时间戳),直接转成的日期对象能够直接和mysql中自动添加datetime对象做比较,再也不像原来同样还须要先进行时区的指定。
8.22
- 多使用cache中的数据来处理,在作dco报表的时候,event中的数据已经包含了想要的数据,可使用tag和分组group来进行分类,在作tag的时候,cache中包含了全部触发器中的tag项,在cache中的显示是一个大列表中包含的tag,
- 每次在变动代码的时候注意备份,备份,备份,当要从备份中回复某个文件的时候,使用cp,不要想固然的使用mv,当某个时候想要总体回迁的时候,你就会发现你忘了mv了哪一个文件了,到时候就哭吧。
- 使用zabbix sender发送数据,发出去的都是字符串数据,在zabbix中建立监控项原型的时候只要选择好数据类型,就能够显示了,可是当返回的数据字符串内部包含的浮点型数据,整形就匹配不了了,就得使用浮点型来显示数据了
8.23
- 能从内存中取数据是真的方便,减小查数据库
- 对xls ,xlsx表格分别使用xlrd openpyxl方式能够读取数据,操做数据,
- zabbix的item对主机直接取是能够拿到全部的数据的,包括主机建立的监控项和自动发现中监控项原型映射出来的监控项
- 25号才发现更新的代码还有一处没有完成改变,问题还挺大的,明天去更改下,真的是,之后只要有代码变更就的记下来,否则过些日子就忘的一干二净了,还有天天的工做内容也得开始罗列清单了,脑子并不能记全部的东西
8.26
- 今天碰到一个列表里包含多字典的数据结构,对列表遍历取值,作条件判断,当知足条件的最数据处理,而且从列表中remove删除,可是在打印的时候却没有删除,为啥?
- 忽然要接手两个项目,全新的练手,我了个去,亚历山大,表面风平浪静,实际上慌得一批啊
- django的后台关联模型的名称展现须要定义__str__方法,
- 在go中修改文件权限,在windows中是没有啥做用的,linux系列中直接chmod(文件名,权限码 0777),go中有四种读写文件的方法
- 在zabbix汇总的userparamsters中配置的自定义监控项,当要对监控项进行传值 的时候,可使用
xxx.xxx[*],自定义脚本的执行命令 "$1" "$2" "$3"
, 重启zabbix服务,使用zabbix_get -s 本地ip -k 自定义监控项[参数1,参数2,参数3...]
注意,这里的的参数是不用加""
的
- 今天还听到说类能够不执行init方法直接调用?怎么作?
- django自身就支持原子性,支持事务
- 序列化器是支持自定义返回数据的
- request.post.data()接收到request对象是不能直接添加数据的,可使用浅拷贝而后就能够想字典同样使用了,而后在serialize指定data的时候使用这个浅拷贝的数据对象
8.27
- zy业务视角大屏和用户视角大屏用的是两个django命令,执行函数生成的cache数据,数据时从oracle库中获取的数据,使用的相似sqlarchmy链接oracle数据库来执行sql语句获取数据。
- 当openpyxl保存文件到指定路径的时候,能够在文件名中直接写成绝对路径或者相对路径,zy的DCO分组发邮件的时候是按组来发送的,给一个组底下所属人员都发邮件,在邮件中的附件须要指定这个excel表格,若是直接使用绝对路径的文件名,发布出去,由于邮件在加附件的时候会把绝对路径中的
/
进行转义,致使附件加不上,邮件发布出去,而后我在绝对路径的文件名字符串以前加了r
,使/不转义、再测就能够发送成功了
- IBM的aix小机,性能介于移动pc和服务器之间,不能使用命令补全,删除这些操做,因此在这里执行任何一个命令都是要很是谨慎的,千万千万要谨慎。另外go中的aix编译有问题。
- 监控中间件的脚本走得就是java的api
8.28
- 客户沟通,不能肯定的东西,说回去商量,不能懵。
- 自定报表的更新时间,原来想法是用周期天数去作时间的加减,而后在判断这个时间是否符合条件再执行,后来改为了直接在表中建立一个下次更新时间,直接在每次执行的时候对这个时间进行加周期操做,获得一个将来的事件,而后任务天天取下次更新时间知足的对象来执行, update_time__lte = now;
8.29
- zy的网路连通性检测中,大屏中的数据和网络连通错误数据分别对应的两个缓存,不过存在一个问题,他们的人在添加的时候可能同一个地方添加多2条以上的链路,现行的判断逻辑是两条联络路断就认为是双线终端,因此在做报告的时候构造一个字典对象,以地名为键,值为一个列表,只要有错误,就把运营商的类型加进去,以后再对这个字典进行取值判断列表中元素数量的判断,大于2的就认为是重复的,为1的直接在构造问题的时候就把它添加进去。
- 给ym的部署中给想错了,差点给忘了用go打包,突然想起来才改掉,go打的包,真香
8.30
- zy的solarwinds设备在新加的时候须要注册模板,只有吧模板添加上,才会在数据库中查到该主机ip,另外对本身的代码要有信心,勇于去质疑他们的问题。
- zabbix的search是模糊查找,只能针对一个,filter是精确查找,能够对于一组元素。