问题描述: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 #Init
PORT=80
WARNING=5000
CRITICAL=20000 #get options
while 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
;;
esac
done #经过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 0
elif [[ "$PORT_CONN" -lt "$WARNING" ]];then
echo "Port $PORT connection OK for $PORT_CONN. | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"
exit 0
elif [[ "$PORT_CONN" -gt "$CRITICAL" ]];then
echo "Port $PORT connection critical for $PORT_CONN!! | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"
exit 2
else
echo "Port $PORT connection warning for $PORT_CONN! | Port ${PORT}=${PORT_CONN};${WARNING};${CRITICAL};0;0"
exit 1
fi

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

本文原始链接:http://www.jbxue.com/article/4978.html

Linux下nagios网络监控与/proc/net/tcp文件详解的更多相关文章

  1. (转)Linux下PS1、PS2、PS3、PS4使用详解

    Linux下PS1.PS2.PS3.PS4使用详解 原文:http://www.linuxidc.com/Linux/2016-10/136597.htm 1.PS1——默认提示符 如下所示,可以通过 ...

  2. Linux下smokeping网络监控环境部署记录

    smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),通过它可以监控到公司IDC的网络状况,如延时,丢包率,是否BGP多线等:smokeping会向目标设备和系统发 ...

  3. Linux下PS1、PS2、PS3、PS4使用详解

    参考印象笔记:

  4. Linux下Qt创建共享库与链接共享库详解

    随着程序写的逐渐变多,或多或少的我们都会使用别人写好的库:或者我们不想让别人看到我们的一些核心程序,可以将核心程序封装成库.本次和大家分享的是在Ubuntu下使用Qt生成共享库以及在Qt中链接共享库的 ...

  5. linux命令学习笔记(31): /etc/group文件详解

    Linux /etc/group文件与/etc/passwd和/etc/shadow文件都是有关于系统管理员对用户和用户组管理时相关的文件. linux /etc/group文件是有关于系统 管理员对 ...

  6. 【转载】在linux下别用zip 用tar来压缩文件 zip解压后还是utf-8 window10是GBK

    3.2 使用 unzip 命令解压缩 zip 文件 将 shiyanlou.zip 解压到当前目录:   $ unzip shiyanlou.zip 使用安静模式,将文件解压到指定目录:   $ un ...

  7. Linux下weblogic10.3.6(jar)版本安装详解

    一.安装前的准备 安装weblogic是需要JDK环境的,虽然weblogic有自带的JDK,但是我一般是自己选择JDK进行安装,如果你要自行安装,可以参考我的另一篇博客 https://www.cn ...

  8. Linux下,如何监控某个进程到底向哪个地址发起了网络调用

    Linux下,如何监控某个进程到底向哪个地址发起了网络调用 有时候,有些应用,比如idea,你发起某个操作时,其底层会去请求网络,获取一些数据. 但是不知道,请求了什么地址.举个例子,在idea中,m ...

  9. Linux下Nagios的安装与配置[转]

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

随机推荐

  1. es6-块级作用域let 和 var的区别

    块级绑定 js的处理机制和我们大家想象的完全不同,并不完全是所谓函数调用以及上下执行那样简单,它是存有”域”的本质区别的. var具有全局污染特性,所以es6才会出现let .const. 下面通过一 ...

  2. ci高级使用方法篇之连接多个数据库

    在我们的项目中有时可能须要连接不止一个数据库.在ci中怎样实现呢? 我们在本地新建了两个数据库,例如以下截图所看到的: 改动配置文件database.php文件为例如以下格式(读者依据自己数据库的情况 ...

  3. 使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据

    应用场景: 我们须要设计一个数据库来保存多个文档中每一个文档的keyword. 假如我们每一个文档字符都超过了1000,取当中出现频率最大的为我们的keyword. 如果每个文档的keyword都超过 ...

  4. 通过修改css文件来观察openerp表单中的col和colspan

    适用版本 openerp 6.1.1 问题的提出 在openerp的表单定义中, 要使用 colspan和col 指你定各个元素的占位, 前者说明了本元素占据其所在容器的列数, 后者说明了本元素作为容 ...

  5. RESTFul中的那些事(2)----怎样支持RESTFul的HTTP Patch方法?

    我们在调用RESTFul服务的时候,有的时候.第三方的服务会提供支持PATCH 操作的方法,在这样的情况下.我们假设我们以下的这样的方式, 去调用PATCH操作.肯定会返回40X的错误. PATCH ...

  6. 如何让history命令显示最近所执行过的命令的具体执行时间

    如何让history命令显示最近所执行过的命令的具体执行时间. 步骤如下: 1.以ROOT用户编辑/etc/profile文件,在里面加入下面内容(我一般习惯在最末尾加): export HISTTI ...

  7. 腾讯云-NGINX搭建静态网站

    搭建静态网站 搭建Http静态服务器环境 任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 00. ...

  8. 微信小程序“信用卡还款”项目实践

    小程序概述 11月3日晚,微信团队对外宣布,微信小程序开放公测.开发者可登陆微信公众平台申请,开发完成后可以提交审核,公测期间暂不能发布. 我们前一段时间也进行了小程序开发,现在来对之前的开发体验做一 ...

  9. 雪球、牛股王这种股票类App 到底能否帮你赚到钱?

    核心观点 股民这个大群体,是需要区分对待的:其中包含一小部分有自己独立判断能力的投资者和一大群没有自己判断能力(尽管他们经常觉得自己有)的普通散户. 当前的互联网证券类App,确实很难保证帮股民赚到钱 ...

  10. 【TP框架】包括TP3.1和3.2,自带缓存使用机制

    原文章出处: http://blog.163.com/liwei1987821@126/blog/static/172664928201422133218356/ 写在开始:缓存变量和session变 ...