问题描述: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. Handler具体解释系列(七)——Activity.runOnUiThread()方法具体解释

    MainActivity例如以下: package cc.testui3; import android.os.Bundle; import android.view.View; import and ...

  2. Hibernate(十四)缓存

    一.什么是缓存 缓存是介于应用程序和永久必数据存储源之间,目的是为了降低应用程序直接读写永久必数据存储源的频率,从而提高运行性能 缓存通常是在内存中的如: Office中的Word.excel Hib ...

  3. Nhibernate Criteria 多个or条件查询

    sql: select * from table t where (t.name like '%张三%' or t.schoolName like '%张三%' or t.cityname like ...

  4. 了解NoSQL

     近期总是提到NoSQL这个词汇.起初仅仅知道,应该是一种数据库而已,仅仅是这样的数据库眼下符合当前互联网的需求,应用比較广泛.逐渐发现,当前的各个公司在招聘信息中会有掌握NoSQL的优先等要求. ...

  5. vs2013没有代码提法的一种解决办法

    把这两个勾去掉,然后关掉vs再打开,最后重新勾选上就行了.

  6. js 判断iframe是否加载完毕

      js 判断iframe是否加载完毕 CreationTime--2018年9月13日15点30分 Author:Marydon 1.javascript实现 window.onload = fun ...

  7. 简单的Stack

    自己实现的简单的Stack.没有查空满.用于算法考试 #include<iostream> using namespace std; const int MAX = 100; struct ...

  8. 21、java中和日期相关的类

    一.Data及其常用API 1.简介 Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒.是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时 ...

  9. cygwin完全安装步骤方法(组图)

    我们可以到Cygwin的官方网站下载Cygwin的安装程序,地址是: http://www.cygwin.com/ 或者直接使用下载连接来下载安装程序,下载连接是: http://www.cygwin ...

  10. 浅析iOS tableview的selectRowAtIndexPath选中无效(默认选中cell无效)

    可能很多人都遇到过这种情况: tableview列表,有时加载完,需要默认选中某一行,给予选中效果:或者需要执行某行的点击事件. 我们举例: 比如我想默认选中第一行 可能我们第一个想法就是这样: [m ...