zabbix:使用自定义模板监控服务器中的多个节点

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()

如果这个对你有用的话,请点个赞,谢谢啦。

猜你喜欢

转载自blog.csdn.net/qq_34355232/article/details/81779755