zabbix监控nginx 端口篇-阿里云开发者社区

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

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性能监控的注意要点
今天测试好了。但有几个要点要注意。 一是出了问题看日志。 二是主动测试脚本。 三是注意LLD自动发现的ZABBIX类型(TRAPPER,捕捉器类型) 四是有主机上有问题时可以看到(UNSUPPORT) 五是在ZABBIX上监控主机级监控,不一定就是主机哟,,可以是基于指定IP的脚本陷入。
993 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6397 0
Windows 和 Linux 平台下的端口转发工具
原文地址: http://unmi.cc/windows-linux-port-forwarding/ 这里记录一下我曾经使用过的几个端口转发工具,即端口映射、端口重定向,和 NAT 也是差不多的概念。
2055 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7619 0
Nginx代理应用端口丢失问题
Nginx代理应用端口丢失问题          最近使用Nginx代理weblogic的过程中发现访问了weblogic的console后,在应用跳转至登录界面时对应的端口号自动丢失了。
1032 0
如何从命令行实时监控Nginx Web服务器
一旦Nginx Web服务器在生产环境下搭建并运行起来,你就希望能够实时监测其活动。实际上,普通的网络监控软件都可以提供支持实时监控Nginx的功能,比如Nagios、Zabbix和Munin。
1189 0
8434
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载