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,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
4月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
77 4
|
4月前
|
监控 网络协议 Unix
Linux命令-nc(端口监控、文件传输、反弹shell等)
Linux命令-nc(端口监控、文件传输、反弹shell等)
111 0
|
4月前
|
监控 关系型数据库 机器人
小白带你学习linux的监控平台zabbix
小白带你学习linux的监控平台zabbix
137 0
|
5月前
|
数据采集 Prometheus 监控
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
283 0
|
1月前
|
前端开发 应用服务中间件 nginx
nginx中配置不输入端口(指定地址)访问项目的方法
nginx中配置不输入端口(指定地址)访问项目的方法
27 0
|
1月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
25 2
|
6月前
|
监控
zabbix如何添加自定义监控项
zabbix如何添加自定义监控项
262 0
|
2月前
|
监控 Cloud Native 关系型数据库
使用 Grafana 统一监控展示 - 对接 Zabbix
使用 Grafana 统一监控展示 - 对接 Zabbix
|
3月前
|
应用服务中间件 nginx Docker
docker安装nginx并暴露端口
【1月更文挑战第9天】docker安装nginx并暴露端口
146 0

推荐镜像

更多