开发者社区> 技术小阿哥> 正文

zabbix监控nginx 端口篇

简介:
+关注继续查看

wKiom1kBoo7SqRGNAACDJwrhX-c762.png

监听端口

1.cat /usr/local/zabbix/bin/ports.py

#!/usr/bin/python

#coding=utf-8

import commands

import os,sys   

##########返回命令执行结果

def getComStr(comand):

    try:

        stat, proStr = commands.getstatusoutput(comand)

    except:

        print "command %s execute failed, exit" % comand

    #将字符串转化成列表

    #proList = proStr.split("\n")

    return proStr

   

##########获取系统服务名称和监听端口

def filterList():

    tmpStr = getComStr("netstat -tpln")

    tmpList = tmpStr.split("\n")

    del tmpList[0:2]

    newList = []

    for i in tmpList:

        val = i.split()

        del val[0:3]

        del val[1:3]

        #提取端口号

        valTmp = val[0].split(":")

        val[0] = valTmp[1]

        #提取服务名称

        valTmp = val[1].split("/")

        val[1] = valTmp[-1]

        if val[1] != '-' and val not in newList:

            newList.append(val)

    return newList

   

def main():

    netInfo = filterList()

    #格式化成适合zabbix lld的json数据

    json_data = "{\n" + "\t" + '"data":[' + "\n"

    #print netInfo

    for net in netInfo:

        if net != netInfo[-1]:

           json_data = json_data + "\t\t" + "{" + "\n" + "\t\t\t" + '"{#PPORT}":"' + str(net[0]) + "\",\n" + "\t\t\t" + '"{#PNAME}":"' + str(net[1]) + "\"},\n"

        else:

           json_data = json_data + "\t\t" + "{" + "\n" + "\t\t\t" + '"{#PPORT}":"' + str(net[0]) + "\",\n" + "\t\t\t" + '"{#PNAME}":"' + str(net[1]) + "\"}]}"

    print json_data

   

if __name__ == "__main__":

    main()


2.cat ports_discovery.conf 

UserParameter=ports.discovery,sudo /usr/bin/python  /usr/local/zabbix/bin/ports.py


3.模板 

All TCP Ports discovery

ports.discovery

Listen Port $1

net.tcp.listen[{#PPORT}]

{Ports Monitoring:net.tcp.listen[{#PPORT}].last()}=0


wKioL1kBosKzwrNwAAArCC-sRgY096.png


如果是监听tomcat

cat /usr/local/zabbix/bin/tcp_services.py

#/usr/bin/python

#This script is used to discovery disk on the server

import subprocess

import os

import socket

import json

import glob

 

java_names_file='java_names.txt'

javas=[]

if os.path.isfile(java_names_file):

#   print 'java_names_file exists!'

#####

##### here should use % (java_names_file) instead of using the python variable java_names_file directly inside the '''   ''' quotes

#####

 

   args='''awk -F':' '{print $1':'$2}' %s'''  % (java_names_file)

   t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]

elif glob.glob('/opt/xx/*_tomcat') and not os.path.isdir('/opt/logs/logstash') and not os.path.isdir('/opt/app/elasticsearch/config'):

   t=subprocess.Popen('cd /opt/xx && ls *|grep xx_tomcat',shell=True,stdout=subprocess.PIPE)

  

for java in t.stdout.readlines():

    if len(java) != 0:

       S=java.strip('\n').strip(':')

       args="cat /opt/xx/%s/conf/server.xml|grep port|sed -n '2p'|awk '{print $2}'|awk -F '=' '{print $2}'|tr -d '\"'" % S

       port=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0].strip('\n')

       STR1={'{#PROCNAME}':S}

       STR2={'{#PORT}':port}

       STR3=dict(STR1, **STR2)

       javas.append(STR3)

print json.dumps({'data':javas},indent=4,separators=(',',':'))


监听tcp状态

cat /usr/local/zabbix/bin/tcp_status_ss.sh

#!/bin/bash 

#scripts for tcp status 

function SYNRECV { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'SYN-RECV' | awk '{print $2}'

function ESTAB { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'

function FINWAIT1 { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-1' | awk '{print $2}'

function FINWAIT2 { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-2' | awk '{print $2}'

function TIMEWAIT { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'

function LASTACK { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LAST-ACK' | awk '{print $2}'

function LISTEN { 

/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'

$1


cat tcp_status_ss.conf 

UserParameter=tcp[*],/usr/local/zabbix/bin/tcp_status_ss.sh $1



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1909119,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用zabbix监控nginx服务(十五)
使用zabbix监控nginx服务 1.开启nginx状态监控
164 0
Zabbix监控插件-Nginx、TCP、Redis、Memcached
2014年写的zabbix监控插件,主要监控TCP的11种状态,Nginx的状态,Redis的和Memcached的状态。
257 0
zabbix nginx模板
zabbix服务端nginx的上传文件限制修改:client_max_body_size 5m; nginx 客户端开启状态检测 nginx server { listen 80; server_name localhost; loc...
1536 0
Zabbix添加nginx监控项
##########Nginx配置########## #查看是否安装nginx状态模块 nginx -V #--with-http_stub_status_module #修改配置文件 vim /etc/nginx/nginx.
979 0
Zabbix SNMP自定义OID监控Nginx(学习笔记七)
转载:http://www.ttlsa.com/zabbix/snmp-custom-oid/ 确认SNMP OID是否存在 首先我们需要找一个oid是否被系统暂用,比如.
1253 0
+关注
技术小阿哥
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
CentOS Nginx PHP JAVA多语言镜像使用手册
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像