先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
zabbix_agentd端执行命令
chmod +s /bin/netstat
服务端再次使用zabbix_get 测试,便不会有报错信息。
出现上面格式的数据,说明脚本编写成功!!!
如果客户端对check_port.py赋权方式采用的 chmod u+x check_port.py 即-rwxr–r-- 则,在服务端zabbix_get进行测试时,会报没有权限。如下所示:
[root@zabbix_nginx ~]# zabbix_get -s 192.168.158.141 -p 10050 -k tcpport.listen
sh: /etc/zabbix/zabbix_agentd.d/externalscripts/check_port.py: Permission denied
二 页面配置
1. 创建端口监控专用主机群组
配置 > 主机群组 > 创建主机群组
2. 创建模板
配置 > 模板 > 创建模板
3. 添加自动发现规则
在上面创建的模板中点击 ----> 自动发现规则 ----> 然后选择创建发现规则
说明:上面的key 一定要和监控客户端配置文件中的 key 保持一致。
4. 创建监控项原型
创建自动发现规则后,点击该规则下的 “监控项原型” ----> 创建监控项原型
上面中的键值中的 {#TCP_PORT} 和我们的脚本 check_port.py 中的参数一致
5. 创建触发器原型
其中,表达式详情如图:
注意,这里的表达式中的 count(#3,0,eq) > 1表示最近3次的返回值为0,这个条件触发一次则报警。
配置到这里我们就完成了,zabbix自动扫描并监控的功能。
三 将端口监控模板链接到相关主机
将端口监控模板链接到相关主机上即可
配置到这里我们就完成了,zabbix自动扫描端口并监控的功能。
报警效果:
扩展1:
批量添加指定端口
有时候我们不需要监控自动扫描出来的所有端口,要监控的这些端口需要我们指定,这个需求也是比较常见的,有了上面的基础,实现这个东西其实是比较简单,其实仔细看看脚本就能实现。
要实现这个功能我们只需要,将脚本替换成下面的内容即可(以只监控8080,3306两个端口为例):
#!/usr/bin/env python
import json
portlist = [“8080”,“3306”]
new_port_list = []
port_dict = {“data”:None}
#cmd = ‘’‘netstat -tnlp|egrep -i “$1”|awk {‘print $4’}|’‘’
#cmd += ‘’‘awk -F’:’ ‘{if ( N F / [ 0 − 9 ] ∗ NF~/^[0-9]* NF /[0−9]∗/) print $NF}’|sort -n| uniq 2>/dev/null’‘’
#auto_localport = os.popen(cmd).readlines()
for port in portlist:
pdict = {}
pdict[“{#TCP_PORT}”] = port
new_port_list.append(pdict)
port_dict[“data”] = new_port_list
jsonStr = json.dumps(port_dict,sort_keys=True,indent=4)
#python3
#print(jsonStr)
#python2
print jsonStr
扩展2
自动发现批量监测指定端口方案优化
前面的方式以及扩展1的报警效果都是下面这个样子:
而我们优化后想要的报警效果则是这样的:
(报警信息上很明了的指明是哪台机器上的哪个服务挂了)
要实现这样的效果,那么我们要理清思路:
实现上面效果,我们从zabbix客户端传数据到zabbix服务端,就要传两个变量参数,一个是端口,另一个是端口对应的服务
下面开启优化之旅:
1 对 check_port.py 脚本进行优化
check_port.py 脚本优化后内容如下:
#!/usr/bin/env python
#coding:utf-8
import json
total_dict={“data”:[{“{#TCP_PORT}”:“3005”,“{#SERVICE_NAME}”:“空气质量”},{“{#TCP_PORT}”:“8009”,“{#SERVICE_NAME}”:“自行车”},{“{#TCP_PORT}”:“3118”,“{#SERVICE_NAME}”:“实时公交”},{“{#TCP_PORT}”:“3008”,“{#SERVICE_NAME}”:“城市书房”},{“{#TCP_PORT}”:“7001”,“{#SERVICE_NAME}”:“城市图书馆”},{“{#TCP_PORT}”:“3018”,“{#SERVICE_NAME}”:“停车场”}]}
jsonStr = json.dumps(total_dict,sort_keys=True,indent=4,ensure_ascii=False)
#python3
#print(jsonStr)
#python2
print jsonStr
或者
#!/usr/bin/env python
#coding:utf-8
import json
total_dict={“data”:[
{“{#TCP_PORT}”:“3005”,“{#SERVICE_NAME}”:“空气质量”},
{“{#TCP_PORT}”:“8009”,“{#SERVICE_NAME}”:“自行车”},
{“{#TCP_PORT}”:“3118”,“{#SERVICE_NAME}”:“实时公交”},
{“{#TCP_PORT}”:“3008”,“{#SERVICE_NAME}”:“城市书房”},
{“{#TCP_PORT}”:“7001”,“{#SERVICE_NAME}”:“城市图书馆”},
{“{#TCP_PORT}”:“3018”,“{#SERVICE_NAME}”:“停车场”}
]}
jsonStr = json.dumps(total_dict,sort_keys=True,indent=4,ensure_ascii=False)
#python3
#print(jsonStr)
#python2
print jsonStr
上面python脚本中total_dict 字典的值写在一行不好看出来,其实total_dict的值直观起来看如下图:
执行check_port.py效果如图:
2. 优化 “Template Ports Discovery”模板的 自动发现规则 Template Ports Discovery
2.1 优化 监控项原型
2.2 优化 触发器原型
3 . 将优化后的自动发现指定端口模板链接到某一台主机上比如:192.168.158.141
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
M6Ly9ibG9nLmNzZG4ubmV0L3d1ZGluYW5peWE=,size_16,color_FFFFFF,t_70)
3 . 将优化后的自动发现指定端口模板链接到某一台主机上比如:192.168.158.141
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-1RgUr3Ak-1713170166096)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!