2019-07

7.1

  1. 在同一个函数内,变量最好不要使用重名的,尤其是传入参数的名字不要有重复的,否则后面会造成一些问题,在eval中使用于传入参数重名的变量名,导致eval解析到的是一个空的字符串。报错。
  2. git中确保不再变更了再打tag,不知道为啥码云上的tag删不掉,
  3. 重构原来代码时,尽量做到修改的代码最少,增加的代码最少,以最少的量做最多的功能,能统配就统配,这样以后修改起来也好修改
  4. 几个请求的参数被加密了,咋整。
  5. 期望有点大啊,压力也随之而来了。

    7.2

  6. 逐步提升中,有了思路的情况下,撸起来也是得心应手,中间变量是一个不错的选择,可以给下一个产量提前准备所需要的数据,只要坐个转换就可以,
  7. zabbix创建web场景,对于网页弹出式的登陆窗口,可以直接使用基础验证进行登陆,只需要输入用户名密码就可以完成监控,同时还会生成监控项,创建触发器就可以进行状态监控
  8. web场景中的变量像一个宏变量,而且zabbix自己的正则也可以应用到变量。例如,web场景中的一个个步骤,后一步依赖于前一步,外前一步中就可以使用正则匹配出后一步所需要的参数,详情看zabbix。
  9. 三元运算符忘掉了,res=1 if 2>1 else 2条件满足,res取1不满足取2
  10. 很多的if判断怎么整合一下能有效减少了?从反面来一波?
  11. vim中的多行复制,命令模式下, 4yy (代表从光标处复制4行) 在要粘贴的地方p,就复制好了
  • 7.3

  1. mysql的dump到处sql文件
    mysqldump -h127.0.0.1 -uroot -p11111 库名 表名 >/自定义名.sql
  2. zabbix的web场景监控为什么有时候成功有时候不成功?超时????
  • 7.4
  1. zabbix的server服务启动之后,会启动很多的子进程,
  2. zabbix使用mysql数据库,zabbix正常情况下是写大于读的,使用mysql写默认的innodb,除了增加写入的数据,还有调整b树的结构,
    所以,zabbix做出了一套缓存机制,定期的往数据库刷数据,这中监控系统对实时性要求不高,所以定期刷数据是很合适的,这样就弥补了mysql的不足。zabbix的server,agentp配置文件中有关于缓存的配置项,可以设置大小,缓存满了就往数据库中刷数据
  3. outlook邮箱服务器账号频繁登录之后就被策略给禁掉了,邮箱登录出问题
  4. zabbix web监测触发器的设置,用错误步骤数来判断,对依赖性的步骤只需要判断一步。
  5. 连接两个不一样的模块,当要数据交互但是名称不一致时,这时候映射是个好东西,通过映射做一个中间量,平衡两个模块的变量
  • 7.5

  1. snmptrap收集数据处理可以正则匹配其中的关键字,
  2. mysql突然不能从外部连接了,忘了关防火墙了
  • 7.8

  1. zabbix自定发现规则中还可以使用正则,配置正则出来可以设置T/F值,使用这个值就可以对自动发现出来的东西进行过滤。
  2. zabbix对于日志文件的监控,可以使用主动式的监控项,key >> log[日志文件绝对路径,'正则']还有其他的参数,目前用不上;添加上这个监控项后,就可以对这个时间点之后的日志文件进行获取,若匹配了正则,则对日志内容进行正则过滤,只显示包含正则内容的一行信息。在配置这个监控项时,注意log日期形式,必须与log文件的日起形式相同,这样才能获取到日志信息。
  3. snmptrap收集打过来的日志信息,可以经过snmptt的处理,进行格式化,日期,关键字这些都可以自定义。后续还得继续看这方面的。
  4. zabbix事件时记录的所有触发器产生的,即使删除掉这个触发器,还是会在事件中保存下来,但是在触发器中时不存在的,所以当使用触发器id关联事件的时候, 需要对当下不存在的触发器id进行过滤,否则会出现键值不存在的问题
  5. pycompile模块,完成对py文件的编译,项目中做成了python manager命令,可以命令行启动,
  6. 敬畏心是啥,就是在做任何修改时,提前做好备份,数据库也备份好,整个库备的那种。才进行后续操作,不然一出错。后路都没
  7. 回调,在执行完主程后在执行的函数
  8. 当两个函数有依赖性时,如a依赖b执行的结果,要用链式编程
  9. cp -pr 源目标 目的目标 保留文件权限,递归复制所有文件
  10. vimdiff源文件 目标文件 显示不同,按shift :q退出
  11. 给目标地址复制已有的文件,直接会覆盖,
  • 7.9

  1. 在对数据库操作之前,一定要备份,备份,切记切记,留条后路是不会死的。
  2. zabbix最新数据中,string类型对返回的结果有长度限制,超过现在会截断,导致数据显示不全,可以换成 文本类型或者日志类型的值
  3. 在trend中是没有办法获取字符,文本,日志类型的趋势数据,因为string、文本、日志类型是没有最大值最小值平均值的。
    作为替换方法,可以使用刷新时间为1h的历史数据,在去历史数据时,对history项要进行制定,文本类型是history=4,
    0 - numeric float;数字浮点数
    1 - character;字符
    2 - log; 日志
    3 - numeric unsigned; 数字符号
    4 - text.文本
    Default: 3.默认:3;
  4. vim中还可以使用edit
  5. zabbix自动发现规则还可以读取数据库中的数据,来自动发现监控项触发器。
  6. item可以显式制定 启用的,monited=1,同理,触发器有激活的,active=1
  • 7.10

  1. 整个报警流程:进行了告警聚合,所有的事件都发送给Admin用户,但是此时不出发发送通道,告警聚合在monitor中执行alert脚本,给queue中打入告警信息,同时,在alert中将几个pathon manage.py xxxx命令托管给supervisor,使用supervisorctl可以查看。

    其中agg_delay aggregate get_alert send_msg send_msg_wx是关于消息发送的命令进程,当修改这些文件时,需要重启在supervisor 下使用 restart 命令名,日志文件在/var/log/aggragate/下。有报错信息可以查看解决,
    这些进行在后天执行,轮训那个收告警信息的queue,有信息发送给用户组,用户组中的所有人,配置的所有告警介质都可以被调用,随即,消息发出。
  2. 问题:对于邮件信息的生成,有特殊的对象>>MIMEText对象msg = MIMEText(msgStr, 'plain', 'utf-8'),在给消息平台转发时,不能直接发送这个对象,平台端使用的json序列化不了。
    解决:将要用的内容发送到消息平台,在平台端进行MIMEText对象的创建。
  3. 在supervisor中的monitor , celery都是命令行,不过为了方便查看将其托管到screen,所以在supervisor中是stoped的。
  4. 清楚celery的缓存文件,在项目同级目录下,
    rm -f celerybeat-schedulel,删除此文件。
  5. setting_manager中有过期时间默认是300s.如果在配置中添加了refresh字段的话,以这个字段的值为准,
  6. windows端zabbix客户端
    c:\sdata\zabbix\bin\win64\zabbix_agentd.exe -d -c c:\sdata\zabbix\conf\zabbix_agentd.conf
    windows端启动停止卸载服务,格式xxx/bin/xxx.exe -x -c xxxx.conf
    -x 停止
    -d 卸载
    -c 指定conf文件。
    利用自动注册,在conf文件中添加HostMetadataItem=system.uname字段,安装agent客户端后就可以给server端发送原数据,在server端创建自动注册动作,就可以对元数据进行判断,并执行后续的操作,添加主机,套模板。
    windows_agent.conf
Hostname=FileServer
Server=192.168.1.66
ServerActive=192.168.1.66
ListenPort=10050
HostMetadataItem=system.uname
LogFile=C:\sdata\zabbix_agent\logs\zabbix_agentd.log
Include=C:\sdata\zabbix_agent\zabbix_agentd.d\*.conf
  • 7.11

  1. Excel类在写入时,接受表名,数据(一个二维列表,列表内嵌套真实数据),今天在写入数据的时候,想着从一个列表中直接取值进行赋值,
l = ['xxxx':[1,2,3,4,5]]
data = [ [l['xxxx'][2:] ] ]
excel.write(data=data)

在写入的时候就报错了,显示不能cant convert,
解决:忽略了列表的切片,还是列表,在二维列表中赋值只能是字符串,真的是绝了,使用 ','.join(l['xxxx'][2:])解决。

  1. 中间映射表真的是个好东西,随便取值。
  2. 集合也是个好东西,去重,查交并补集都可以
  3. 在使用字典是,为了保证代码的健壮性,多用get不要写死,不然容易崩
  4. 在zabbix获取事件的时候,可以关联触发器对象,获取触发器的相关信息。
  5. 现在代码的效率还是很低,有许多重复,要改
  • 7.15

  1. 对于自动发现的zabbix的监控项,key中的宏不能直接解析出来,除了map方式还有什么好办法?
  2. gj的上交所数据显示异常,他的数据流是一台主机专门收集上交所的数据,通过agent打到zabbix的server端,经查是因为哪台机器的服务挂掉了。
  3. 在国金上周更新的代码中,在windows中使用的\t制表符来缩进,上传到linux机器的后果就是缩进混乱了,整体代码给崩了,使用notepad的将制表符转换成空格功能,将所有的\t转换成空格,重新上传一次,解决问题
  4. f5属于负载均衡的,监控项中的pool,vs关系为,每一个vs相当于一个master,消息过来之后分发给底下的一个个pool,来达到负载均衡的目的。
  5. 对子agent的主动式监控中的log监控,考虑到日志的轮转机制,可以使用logrt
  6. vim中 :set nu 显示行数
  7. 交换机也可以像是linux主机一样登陆,
    switchshow 显示交换机的pid
    sfpshow 1/32 -f
    sfpshow 光纤模块位置 -f 显示模块实时的进光功率和出光功率 TX /RX 还有其他一些信息
  • 7.16

  1. celery的任务更新之后,重启celery任务(celery启动命令由supervisor接管)
1 关闭celery
supervisorctl stop celery
2 删除celery缓存文件
rm -f celery-schedule
3 重启celery
supervisorctl start celery
  1. 在使用cache的时候,使用get方法的时候可以像使用dict的get一样,留下默认值,这样能够保证代码的健壮性
  2. celry任务中可以将运行周期相同的任务归到一个task中,因为celery可能因为任务太多而丢掉任务,有待细分,
  3. zabbix 的search只能接受一个值去模糊匹配。使用filter可以接受一个字段的列表参数,参数内的数据都可以精准匹配到,结果是一个列表内的多个对象。
  4. zabbix使用item的get方法时,如果关联主机selectHoists,返回的结果中将返回模板,这样就会多一条数据,根据实际情况决定他的去留
  5. vim中使用$history可以列出所有输入过的内容
    使用edit可以编辑大块的代码,解决代码复制过去缩进混乱的问题,在这个edit中只支持vim的链式编辑,可以使用ctrl+v 进入链式选择位置, x将删除所选, shift+i 输入要插入的数据,将批量的在多列的同一位置插入数据,
  6. cache.set的有效期设置的比celery的周期长一点,避免空档期
  7. 做事的时候慢一点,稳一点,不要着急,太着急了其实做的很多重复功,没用。甚至是很简单事情,也要谨慎。
  8. django有一个setup()的方法,可以让django项目外的脚本调用到项目内部的模型,关键点就是配置好django的环境变量,
import os 
import sys
import django



django.setup()
  • 7.17

  1. snmptrap真的很吊的,流程:
    1 要采集的数据的机器开通策略,将数据打到zabbix_server主机的162端口,在snmptrap.conf中配置接受数据的日志文件,这样就可以将交换机,数据库服务器的一些原始数据打到zabbix主机,而且这些机器一般都配的有发送snmp trap测试信息的功能
    2 启用snmptt (SNMP Trap Translator) 可以将trap中的中的原始数据进行正则匹配过滤。得出有用的信息。
    在snmptt.ini中配置snmptt 启动的conf文件,服务启动时调用,
    3 在snmptt的启动conf文件中可以定义使用的正则conf,内部可以对原始的trap数据进行正则过滤,还可以指定脚本,将过滤后的数据作为参数传入脚本,对oid进行解析,拿出我们想要检测的oid,返回ip和相关的zabbix键,及其值,
    4 在脚本中直接定义一个 zabbix sender 来发送解析到的数据, 在sender的时候,需指定ip 键 值,在zabbix的前端中需要将受控主机的host改成ip值,这样sender就可以将解析的最终数据发送到这个主机,(前提是在zabbix端创建这个监控项,接口类型为zabbix采集器,键自定义,允许的主机指定为zabbixserver端的ip,一般为127.0.0.7),随后配置相应的触发器,这样就完成了trap监控任何东西。
  2. 集合的交并补
#issubset  a是否为b的子集,返回bool值
a = set([1])
b = set([1,2,3])
print(a.issubset(b))
print(b.issubset(a))

True
False
应用:可以作为两个列表中多值的存在判断。

#isdisjoint 当两个集合没有交集,返回true
a = set([4])
b = set([1,2,3])
print(a.isdisjoint(b))
print(b.isdisjoint(a))

True
True

a = set([1])
print(a.isdisjoint(b))
print(b.isdisjoint(a))
False
False

#issuperset a是否为b的超集,a是否包含b,包含返回true
a = set([1])
b = set([1,2,3])
print(a.issuperset(b))
print(b.issuperset(a))
False
True
  1. json.dumps()内部有很多参数
  • 7.18

  1. mibnbroser可以一次载入多个mib文件,mib文件大多是通用的,但是当需要定制化开发的时候,一般需要的是私有的mib,不然可能mib文件显示的oid和网络设备传过来的信息不符,
  2. 当数据格式固定的时候,可以直接设置一个变量,将变化的值留空,然后在程序中对其进行赋值,然后展示数据
  • 7.22

  1. 一个app中使用外键关联其他app中的模型时,需指定app
场景,在alert的models文件中创建一个模型类,需要使用外键关联到account的User模型,
直接使用
from account.models import User
user = models.ForeignKey('User', on_delete=models.CASCADE, null=True)

这样进行迁移的时候会报错 field E300
alert.Media.user: (fields.E300) Field defines a relation with model 'User',

解决,需要指定外键关联模型的app位置,account.User才能够正确迁移,
user = models.ForeignKey('account.User', on_delete=models.CASCADE, null=True)
  1. 在客户那更新的代码回来不要直接全选复制粘贴,不要复制粘贴,可能家里的代码已经有了变动,一定要提前检查检查
  2. 有空要把python manage makemigrations /migrate看看原理,来时迁移数据库的时候出问题
  3. 对于在自动发现规则中的监控项原型。触发器原型这些的,如果监控项名字中使用的有宏,在显示的时候,会自动解析的,不过在监控项key中使用的主机宏/模板宏这些的,(例如oracle模板中的$sid主机宏,在监控项中的_key中时不会解析的,可以获取主机的宏,再映射出来获取到这个宏的值,)
  4. zabbix配置主机的时候,如果监控项是被动式的,那么主机名称可以设置的跟zabbix_agent.conf中的HostName不同,并不一定要相同,如果是主动式的,那么就必须使用配置文件中的HostName项,对于ZY的oracle监控中,有的主机并不是一个实例,所以在一个主机上配置了两个全局宏,代表两个实例,进行检测。对于这种,就可以克隆一份主机,将主动的监控项改为被动的,解除主机名的束缚,(虽然用的还是同一个IP)这样就可以理解成一个主机一个实例了
  • 7.23

  1. python数据模型迁移的问题,
  2. 在zabbix的item项,
    items = api.item.get(filter={'key_': 'item_key'}, output=['name', 'key_', 'lastvalue', 'value_type'],selectHosts=['name'], monitored=True, )
    monitored的作用是返回主机开启的监控项,如果不启用这个选项,默认的搜索key
    _会把模板也返回来,使用这个参数后,模板就给屏蔽了。
  3. orm中的obj.objects.values()返回所有的数据查询集对象,使用list转换成列表中嵌套字典,使用obj.objects.value_list()可以指定查询集返回的字段。
  4. item的返回值中,有一个参数是 value_type 返回值的类型, 0,3分别代表的是无符号整型和浮点型,1,2,4代表的是字符,日志,文本类型,对于0,3有趋势数据trend,对于1,2,4只有历史数据。
  5. gj的上交所数据应该是在客户端上执行的一串写入数据的命令,让后后台从写入的数据库中源源不断的取数据。
  • 7.24

  1. if elif 给搞混了,并不是满足了条件都会走elif的,只有在if条件不满足的时候才会执行,多行判断的话还是不断的添加if把
  2. 多层字典嵌套取值,不断的for循环,将从顶层开始取值,同时还可以使用递归的方法,从最底层开始取值,各种方法的使用场景不同,使用递归的时候可以使用isinstance来直接判断类型,是字典类型,继续递归,不是则进行业务逻辑的处理,从最底层返回。
  • 7.25

  1. 递归思路的进入和输出,
  2. openpyxl中的表格对象的属性
    统一添加样式, 获取最大行数最大列数,对已有的表读取数据,获取固定的位置进行赋值
  3. 思路整理:能在一次计算中获取到值就不要多重复做工,浪费,计算就是计算,写表格就是写表格,不要混了
  • 7.26

  1. 用户组跟设备组的关联,使用多对多的模型方法。
  2. zabbix中java应用的监控,创建监控项使用jmx接口,端口默认为10052,可以使用java自带的jconsole客户端来监控java应用信息,
    jconsole
    jconsole可以连接本地java进程,也可以远程连接java进程,
    MBean
    mbean类似于mib文件,层级显示java进程信息。
    在zabbix中就可以添加相应的监控项来获取值
  3. celery为啥周期任务失灵了
  4. 模型类之间多对多的关联使用manytomany字段,会自动生成一个中间表?
  5. home目录下的.bashrc用户配置文件可以直接添加命令,使在进入shell环境的时候就自动载入相关的配置项
  • 7.29

  1. 跟客户沟通的时候要切中要害的走,善于引导客户的思维
  2. 尽量在一套循环中完成数据的计算,尽量别多次重复遍历循环
  3. 开发比测试好,起码好
  • 7.30

  1. 夏天骑车是真的热。
  2. linux开始补基础
  3. docker端口,数据卷的映射
  • 7.31

  1. 代码的健壮性,健壮性,对于不确定的数据,尽量不要用列表式的按位取值,增加条件判断,设置默认值也行,总不能每一次数据改变,就要改一次代码。
  2. poc的可行性判断,思科的路由器交换机是可以通用模板的,各数据库的模板也有,
  3. 对于进程的监控,如果不确定的,可以登陆机器ps -ef 查看进程信息,再netstat查看端口信息,一般zabbox中的进程监控,第二个参数是启动进程的用户名,第四个参数是进程信息中的关键字
  4. vim的一些快捷方法

猜你喜欢

转载自www.cnblogs.com/0916m/p/11482033.html
今日推荐