博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下nagios网络监控与/proc/net/tcp文件详解
阅读量:7047 次
发布时间:2019-06-28

本文共 2584 字,大约阅读时间需要 8 分钟。

问题描述:nagios自带的check_antp太过简约,除了状态统计输出外,什么参数都不提供。在面对不同应用服务器时,报警就成了很大问题。

问题描述

nagios自带的check_antp太过简约,除了状态统计输出外,什么参数都不提供。在面对不同应用服务器时,报警就成了很大问题。
于是决定自己写一个check脚本。作脚本运行,与命令操作时一个不同,就是要考虑一下效率问题。在高并发的机器上定期运行netstat -ant命令去统计,显然不太合适,可以直接从proc系统中取数据,这就快多了。

先介绍/proc/net/tcp文件,这里记录的是ipv4下所有tcp连接的情况,包括下列数值:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
0: 00000000:3241 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 22714864 1 ffff88004f918740 750 0 0 2 -1

最主要的,就是local_address本地地址:端口、rem_address远程地址:端口、st连接状态。

注1:文件中都是用的16进制,所以HTTP的80端口记录为0050。

注2:状态码对应如下
00  "ERROR_STATUS",
01  "TCP_ESTABLISHED",
02  "TCP_SYN_SENT",
03  "TCP_SYN_RECV",
04  "TCP_FIN_WAIT1",
05  "TCP_FIN_WAIT2",
06  "TCP_TIME_WAIT",
07  "TCP_CLOSE",
08  "TCP_CLOSE_WAIT",
09  "TCP_LAST_ACK",
0A  "TCP_LISTEN",
0B  "TCP_CLOSING",

然后介绍nrpe的check脚本。脚本不管怎么写都行,对于nagios服务器端来说,它除了接受脚本的输出结果外,只认脚本运行的退出值(测试时可以运行后用echo $?看),包括OK的exit 0、WARNING的exit 1、CRITICAL的exit 2、未知的exit 3。

最后一个简单的检查http端口连接数的脚本如下:

#!/bin/bash#Written by Gemmy.Rao#Version 0.2#CHANGES#by www.jbxue.com#Add -p option for checking other service's port#InitPORT=80WARNING=5000CRITICAL=20000#get optionswhile getopts "w:c:p:hs" OPT;do    case $OPT in    w)        WARNING=${OPTARG}        ;;    c)        CRITICAL=${OPTARG}        ;;    p)        PORT=${OPTARG}        #转换各端口的十进制成十六进制        PORT_16=`echo ${PORT}|awk -F, '{for(i=1;i<=NF;i++)printf "|%.4X",$i}'|sed 's/|//'`        ;;    h)        echo "Usage: $0 -w 500 -c 2000 -p 80,8081 -s"        exit 0        ;;    s)        SILENT=1        ;;    *)        echo "Usage: $0 -w 500 -c 2000 -p 80,8081"        exit 0        ;;    esacdone#经过time测试,取值速度netstat > awk '//{a++}END{print a}' > cat|grep|wc > cat|awk|wc,在2w连接下,netstat要20s,最快的方式不到5s(一般nagios到10s就该直接报timeout了)PORT_CONN=`cat /proc/net/tcp*|awk '$2~/:('$PORT_16')$/'|wc -l`if [[ "$SILENT" == 1 ]];then    [[ -d /usr/local/nagios ]] || mkdir -p /usr/local/nagios    echo "Silent log write OK | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"    echo -en "`date`t$PORT_CONNn" >> /usr/local/nagios/conn.log    exit 0elif [[ "$PORT_CONN" -lt "$WARNING" ]];then    echo "Port $PORT connection OK for $PORT_CONN. | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"    exit 0elif [[ "$PORT_CONN" -gt "$CRITICAL" ]];then    echo "Port $PORT connection critical for $PORT_CONN!! | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"    exit 2else    echo "Port $PORT connection warning for $PORT_CONN! | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"    exit 1fi

作者注:如果以后有必要的话,可以再取$4去统计st。

本文原始链接:

转载地址:http://eyzol.baihongyu.com/

你可能感兴趣的文章
修改firefox/chrome浏览器的UserAgent
查看>>
sql 基础练习 计算7天各个时间点的总和 group by order mysql一次查询多个表
查看>>
MySQL高级-索引优化
查看>>
SQL中Group By的使用
查看>>
RateLimiter 限流
查看>>
资深设计师Tony Ventrice解析手机游戏开发的四个层次
查看>>
Swift入门篇-结构体
查看>>
Using the Eclipse Jobs-API(转载)
查看>>
GCC编译过程
查看>>
AE intersect、clip的实现
查看>>
图解使用Win8Api进行Metro风格的程序开发一----建立我们的导航架构
查看>>
iOS开发过程中使用Core Data应避免的十个错误
查看>>
I.MX6 wpa_cli 使用
查看>>
windows使用nginx实现网站负载均衡测试实例
查看>>
DotLiquid模板引擎简介
查看>>
5.Flask-Migrate
查看>>
c# 正则表代式的分组和批评模式 .
查看>>
编程之美-3.1-字符串移位包含的问题
查看>>
EPC是什么
查看>>
T-SQL查询进阶--数据集之间的运算
查看>>