zabbix_agent自动发现服务端口

应用背景:

为了zabbix-agent端能自动把服务器端的服务端口汇报给 zabbix server端,监控其端口是否存活可用,

用下面的脚本:service_scan.py   部署于agent端 /usr/local/zabbix-agent/bin/service_scan.py

部署准备:

  1. service_scan.py脚本 依懒 python2.7版本下的 psutil库,
  2. 需要在agent端安装 python2.7版本,
  3. 用python2.7 安装相关的 psutil库
  /usr/local/python27/bin/pip install psutil

  

服务器端口自动发现脚本: service_scan.py

#!/usr/local/python27/bin/python
# author: [email protected]
#

import os, sys, time
import commands
import psutil
import socket
import json

del_list = ["rpc.statd","java"]
def Handle_Connects():
    rows = []
    lc = psutil.net_connections(‘inet‘)
    for c in lc:
        (ip, port) = c.laddr
        if ip == ‘0.0.0.0‘ or ip == ‘::‘:
            if c.type == socket.SOCK_STREAM and c.status == psutil.CONN_LISTEN:
                proto_s = ‘tcp‘
            #elif c.type == socket.SOCK_DGRAM:
            #    proto_s = ‘udp‘
            else:
                continue
            pid_s = str(c.pid) if c.pid else ‘(unknown)‘
            #print pid_s,port
            rows.append(‘%s:%s‘%(pid_s,port))

    dedup_list = {}.fromkeys(rows).keys()
    return dedup_list

def handler_pid(pid,port):

        service_dict = {}
        p = psutil.Process(int(pid))
        if p.as_dict()[‘name‘] == ‘jsvc‘:
            service_pname = p.as_dict()[‘environ‘][‘HOME‘].split(‘/‘)[3]
            service_dict[‘{#PNAME}‘] = service_pname
            service_dict[‘{#PPORT}‘] = port
        else:
            service_pname = p.as_dict()[‘name‘]
            service_dict[‘{#PNAME}‘] = service_pname
            service_dict[‘{#PPORT}‘] = port

        return service_dict

def main():
    zb_dict = {}
    service_list = []
    result_list = []
    clist = []
    for i in Handle_Connects():
        pid = i.split(‘:‘)[0]
        port = i.split(‘:‘)[1]

        service_list.append(handler_pid(pid,port))
    for dictlist in service_list:
        if dictlist["{#PNAME}"] in  del_list:
            result_list.append(dictlist)
            #service_list.remove(dictlist)
    #print result_list
    for delname in service_list:
        if delname not in result_list:
            clist.append(delname)
    zb_dict[‘data‘] = clist
    print json.dumps(zb_dict,sort_keys=True,indent=4)

if __name__ == "__main__":
     main()

原文地址:https://www.cnblogs.com/moorewqk/p/8245046.html

时间: 2024-11-10 05:39:49

zabbix_agent自动发现服务端口的相关文章

python 自动发现Java端口

python 自动发现Java端口 #!/usr/bin/env python #encoding: utf8 import subprocess try: import json except ImportError: import simplejson as json command = "netstat -tpln | grep -v '127.0.0.1' | awk -F '[ :]+' '/java/ && / / {print $5}'" p = subp

zabbix自定义自动发现服务(low-level-discovery)监控系统服务

一.概述 由于工作关系很久没有更新博客了,本文基于生产配置,是zabbix系列的另一补充:本次要讲的是zabbix Low-level discovery简称(LLD),我们在配置items(监控项)时,有时需要对类似的Items进行添加,换句话说,多台机器上的某一监控具有类似的items,如系统开放的服务,再如磁盘分区,网卡名称等,后两种zabbix已经自带,今天我们以自定义监控每个系统开放的服务来说明 LLD的使用逻辑;和普通items获取不同的是,LLD 脚本在获取返回时,格式必须是jso

zabbix 自动发现指定端口和服务

官方有模板示例,根据官方更改 连接如下 https://zabbix.org/wiki/File:ZabbixTemplate_-_TCP_service_discovery.xml 配置端口服务列表 root #cat tcp-port.conf http,80 tomcat,8080 mq,1883 编写自动发现脚本 discovery_tcp_service.sh #/bin/bash CONFIG_FILE=/etc/zabbix/script/tcp-port.conf portarr

zabbix自动发现使用中端口并图形展示各个端口连接数

zabbix自动发现当前服务器使用中的端口并图形展示各个端口连接数 1.修改配置文件 vi /data/server/zabbix_agent/conf/zabbix_agentd.conf UserParameter=tcp.port.discovery,/data/server/zabbix/bin/discover_tcp_port_count tcp_port_discovery UserParameter=tcp.port.count[*],/data/server/zabbix/bi

zabbix自动发现mysql端口并监控

一.需求: 因为我们是游戏业务,要用到mysql,一个服务器上面跑多个mysql实例也是很正常.如果单独手动一台台修改agent.conf,添加web监控,太费时费力.所以就想的要用zabbix 的自动发现来监控 二.配置Agent 1.编写自动发现端口脚本 [[email protected] ~]# cat /etc/zabbix/alertscripts/zabbix_discovery_mysql.sh  #!/bin/bash mysql() {             port=($

zabbix 自动发现监控端口(六)

一.配置脚本,将脚本分发到各个minion端 1.1.脚本内容 vim discover_port.sh  #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`) length=${#portarray[@]} printf "{\n" printf  '\t'&q

Zabbix+Python自动发现进程端口和进程名称

Python脚本 #!/usr/bin/env python #coding=utf-8 #Debug in Python2.7 #used for discovery the Listen Port and Process #Author wangshisheng 20180602 import os import json import string t = os.popen(""" sudo ss -tunlp |grep LISTEN |sed "s#::#

Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务

前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息"hello world". 但自己的配置文件中必须配置config server的URL(http://localhost:8888), 如果把config server搬到另外一个独立IP上, 那么作为一个client的hello world应用必须修改自己的bootstrap.yml中的config server的URL地址.这明显是不够方便的. 既然confi

使用 zabbix 自动发现监控 MySQL

介绍 使用 zabbix 的 low-level 自动发现功能完成单主机多端口的监控, 详见low_level_discovery, 整体上监控类似 percona 的 zabbix 监控插件, 不过使用 mymonitor.pl 替换了脚本 ss_get_mysql_stats.php, 而且配置有点不同. 具体代码及配置详见: zabbix_mysql 1. 结构说明: zabbix_mysql/ |-- README.md |-- bin | |-- get_mysql_stats_wra