zabbix:使用自定义模板监控服务器中的多个节点
程序员文章站
2022-07-11 11:58:58
...
1.模板是什么,其有什么作用?
模板就是将某一类事情的结构规律予以固定化、标准化的成果。
作用:
例如:你需要给一百台服务器添加CPU、内存、硬盘、网络的item,如果没有模板你就需要一台服务器一台服务器的来,这样就导致很浪费时间,模板就是拟建立一个针对这些服务器的模板,模板的内容就是添加CPU、内存、硬盘、网络的item。这样我们就只需要将这一百个服务器链接这个模板即使用这个模板,这样就可以实现上面的所有操作了。
是不是很省事啊。
2.创建一个模板
首先创建一个模板:
在模板中进行自定义lld的建立
创建lld
lld中创建item
lld中创建triggers并关联到item上
这样一个模板就创建好了。
3.将模板链接到服务器上
这样就将模板链接到指定的服务器上了
4.将自定义的lld中需要的脚本传入服务器中
上面就是对服务器的一些设置,这样能让zabbixserver采集到数据
我遇到的一个小问题:
就是显示unsupported item key
经过查看发现是自己的10050端口被防火墙堵住了,所以导致不行,这里就需要开启这个端口就好了
命令如下:
iptables -I INPUT -p tcp -s 10.10.30.232 -m tcp --dport 10050 -m comment --comment "zabbix_agentd listen 10050" -j ACCEPT
这样就显示正常了
这样我们一个简单自定义模板就搞定了。
这里我的是监控服务器中bond网卡是否开启,脚本如下;
item的脚本
#!/usr/bin/env python
# -*-coding:utf-8 -*-
import os
import sys
def get_bond_name(file_name):
bond_txt = file_name.split('/')
len_bond_txt = len(bond_txt)
last_bond_txt = bond_txt[len_bond_txt-1]
bond_name = last_bond_txt.split('.')
return bond_name[0]
def detect(file_name):#提取出网卡错误的信息
file = open( file_name , 'r')
line = file.readline()
detect_str = 'Slave Interface:'
flag=0
while( line ):
#print ( line )
if detect_str in line:
second_line = file.readline()
detect_down = 'down'
if detect_down in second_line :
flag=1
list_first = line.split()
#print ( len(list_first) )
print ( get_bond_name(file_name) + ': network ' + list_first[ len( list_first ) -1] + ' is down')
#print( '++++++++++++++++++++++++++++++++++' )
line = file.readline()
if flag==0:
print( 'All networks are up' )
def main():
dic = sys.argv[1]
dic = '/root/test/' + dic + '.txt'
detect( dic )
if __name__ == '__main__':
main()
lld的脚本:
#!/usr/bin/env python
# -*-coding:utf-8 -*-
import os
import json
def get_bond_name(file_name):
bond_txt = file_name.split('/')
len_bond_txt = len(bond_txt)
last_bond_txt = bond_txt[len_bond_txt-1]
bond_name = last_bond_txt.split('.')
return bond_name[0]
def bond_lld():
dic = '/root/test'
file_adr = []
for file in os.listdir(dic):
string = dic + '/' + file
file_adr.append( string )
#print(string)
print ('{')
print ('\t\"data\":[')
for each in file_adr:
if each ==file_adr[len(file_adr)-1]:
print ('\t\t{\n' +'\t\t\t\"{#BONDNAME}\":' + '\"' + get_bond_name(each) +'\"' + '}')
else:
print ('\t\t{\n' +'\t\t\t\"{#BONDNAME}\":' + '\"' + get_bond_name(each) +'\"\n' + '\t\t},')
print ('\t]')
print ('}')
def main():
bond_lld()
if __name__ == '__main__':
main()
如果这个对你有用的话,请点个赞,谢谢啦。