zabbix通过External checks的方式自动发现交换机端口(只提取up的)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix通过External checks的方式自动发现交换机端口(只提取up的)相关的知识,希望对你有一定的参考价值。

前言说明:

 

公司需要监控交换机,但有些交换机端口是不使用的,如果zabbix通过snmp直接抓取自动发现端口,就没法排除不使用的端口,因此我采用了external check的方式去自动发现交换机端口,并自动添加监控项。

本人QQ:279379936

 

zabbixExternal checks 外部命令检测

1.  概述

 

zabbix server运行脚本或者二进制文件来执行外部检测,外部检测不需要在被监控端运行任何agentd

备注:请不要过度使用外部检测,这会严重降低zabbix系统性能

 

item key语法如下:

ARGUMENT     DEFINITION

script      shell脚本或者二进制文件名.

parameter(s) Optional command line parameters.

如果不想传递任何参数,如下:

script[] or

script

zabbix server会再定义好的目录里面执行外部脚本(zabbixserver中的配置extenalScripts),这个脚本将使用zabbix的运行用户身份运行。请注意权限以及只有指定目录中的命令才能够被执行。

zabbix脚本使用标准方式输出(完整输出但是会删除末尾的空白),标准错误和退出代码将会被丢弃

备注:请不要过度使用那个外部检测,这会严重降低zabbix系统性能

 

2. 范例

 

执行带参数脚本 check_oracle.sh  "-h<host IP address>".

check_oracle.sh["-h","{HOST.CONN}"]

zabbix将会执行:

check_oracle.sh "-h""192.168.1.4"

 

下面为本人的具体配置说明:

 

Zabbix_server.conf中的配置:

加这一行:ExternalScripts=/opt/zabbix/externalscripts

重启zabbix server

/opt/zabbix/externalscripts下放置抓取数据的脚本:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# cat/opt/zabbix/externalscripts/get_switch_up_port.py
#!/usr/bin/env python
import commands
import sys
 
def get_up_port_name(public,ip):
   port_infos=commands.getoutput("snmpwalk -v2c -c %s %sIF-MIB::ifOperStatus|grep ‘up(1)‘|grep -v grep|awk -F\. ‘{print $2}‘|awk‘{print $1}‘|tr ‘\n‘ ‘ ‘" % (public, ip)).split()
   #print port_infos
   num=len(port_infos)
   i=1
   print ‘{‘
   print ‘\t"data":[‘
   for port_id in port_infos:
       port_name=commands.getoutput("snmpwalk -v2c -c %s %s IF-MIB::ifName.%s|awk‘{print $NF}‘" % (public, ip, port_id))
       if i == num:
           info=‘\t\t{"{#SNMPVALUE}":"%s","{#SNMPINDEX}":"%s"}‘% (port_name,port_id)
       else:
           info=‘\t\t{"{#SNMPVALUE}":"%s","{#SNMPINDEX}":"%s"},‘% (port_name,port_id)
       print info
       i=i+1
   print ‘\t]‘
   print ‘}‘
 
 
if __name__ == ‘__main__‘:
   if len(sys.argv) == 3:
       public = sys.argv[1]
       ip = sys.argv[2]
       get_up_port_name(public, ip)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Chmod+x /opt/zabbix/externalscripts/get_switch_up_port.py

注:确保系统存在python环境


Zabbix server界面的配置:

 

技术分享

具体监控项是用SNMP的方式抓取数据:

技术分享


 

模板见附件:

本文出自 “鹏哥玩linux” 博客,请务必保留此出处http://pengge.blog.51cto.com/25661/1974700

以上是关于zabbix通过External checks的方式自动发现交换机端口(只提取up的)的主要内容,如果未能解决你的问题,请参考以下文章

Check Point防火墙TCP的单向控制

zabbix_get [2520]: Check access restrictions in Zabbix agent configuration

zabbix proxy出现no active checks on server not found

zabbix 监控硬盘状态

zabbix客户端错误:no active checks on server [192.168.1.107:10051]: host [ ] not found

check_monitor