zyypp 发表于 2009-6-29 01:44:25

Linux系统监测

额 掉C大的坑里了 无奈整理此贴
小生在此 与大家共享下
本人在网上收集来的 还有一些个人想到的 监测方法

二楼 监测时所需用到得 发送信息的工具
三楼 发生系统登录事件 发送短信通知管理员
四楼 固定时间监测指定TCP端口
五楼 监测MySQL运行是否正常
六楼 系统资源使用状况
七楼 显示结果
八楼 本人自制和修改的一些小工具


(PS:三楼,四楼的监测我采用的是短信报警的方式)
(PS:五楼,六楼的监测我就不写发送方法了,请大家根据自己的需要来设置)
(PS:五楼,六楼的我只是给出了一个开头,因为我暂时用不上所以我没有添加应用,如果谁需要,可以自行添加预警值)

本贴附件均已上传至 Google Code地址为 http://code.google.com/p/htooy/


下面几楼的脚本中的 " 等于英文的引号请自行替换

翱翔的翅膀 发表于 2012-10-17 04:41:00

这个好:lol

sqning 发表于 2012-9-16 00:09:48

看不懂!!

tiida2011 发表于 2011-10-16 16:18:10

好贴,学习了。。。

cpuer 发表于 2009-9-9 11:33:36

原帖由 tumour 于 2009-9-9 11:31 发表 http://www.hostloc.com/images/common/back.gif
teamVPS centOS 测试成功
考虑安全问题,我删除了reboot及执行文件
网卡流量无法显示,不知道该做如何修改
测试地址
http://204.12.210.155/

网卡流量无法显示

这个问题可能是OpenVZ的不能显示或者是网卡名称不对,你可以到SSH里面用ifconfig命令查看下网卡名称。

tumour 发表于 2009-9-9 11:32:54

我只是上传了文件,没有给加权限(没运行那个install),可以执行。

tumour 发表于 2009-9-9 11:31:46

teamVPS centOS 测试成功
考虑安全问题,我删除了reboot及执行文件
网卡流量无法显示,不知道该做如何修改
测试地址
http://204.12.210.155/

tumour 发表于 2009-8-30 15:03:14

不错啊,支持。有空测试后来反馈。

zyypp 发表于 2009-6-29 01:44:47

监测时所需用到得 发送信息的工具

Fetion 机器人
我用的是
http://bbs.it-adv.net/viewthread.php?tid=155
中提到的Fetion机器人(其框架对监测没什么用处可以删除)
方法上面页面也有提到
(PS:此机器人的作者说未注册的有广告,我用了一段时间,只见我飞信的心情被改过一次,再没见过其他广告)

GTalk API
用到是
http://code.google.com/p/xmpphp/
方法见 此页http://www.joecen.com/2008/05/09/google-talk-php-api-xmpphp/

MSN API
用到的是
http://code.google.com/p/phpmsnclass/
方法可以参考 张大 的文章 http://blog.s135.com/post/390/
我就不再阐述了

Mail
我懒得配置 sendmail 所以直接配了个ssmtp(我用的是Debian 我没在CentOS中测试过)
(PS:我选择的是用 ssmtp + gmail 的搭配发送邮件)

zyypp 发表于 2009-6-29 01:45:08

发生系统登录事件 发送短信通知管理员

(PS:不知道有没有人和我一样闲通知登陆事件)

修改 /etc/profile
vi /etc/profile
按 Shift+G 跳至最后一行
在最后加入一下一行内容
LD_LIBRARY_PATH=. /飞信机器人的路径/fetion --config=sample.conf --index=1 --to=接收用的手机号 --msg-utf8=Hi!刚才["`date +%X`"]有人登陆了系统.登陆IP是["`last | head -1 | awk '{print $3}'`"],用户名是["`last | head -1 | awk '{print $1}'`"]. 2>&1

zyypp 发表于 2009-6-29 01:45:39

固定时间监测指定TCP端口

此处使用的是张大写的监测程序
#!/bin/sh
LANG=C
server_all_list=( \
127.0.0.1:80 \
)
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

send_msg_to()
{
      if [ $2 = "0" ] || [ $2 = "2" ]; then
                LD_LIBRARY_PATH=. /飞信机器人的路径/fetion --config=sample.conf --index=1 --to=接收用的手机号 --msg-utf8=$1
      fi;
}
server_all_len=${#server_all_list[*]}
i=0
while[ $i -lt $server_all_len ]
do
   server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
   server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
   server_message=" "
   if curl -m 10 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
   then
   #status:    0,http down    1,http ok    2,http down but ping ok
   status=1
         echo "服务器${server_ip},端口${server_port}能够正常访问!";
                   server_message="服务器${server_ip},端口${server_port}能够正常访问!";
   else
       if curl -m 30 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
       then
         status=1
         echo "服务器${server_ip},端口${server_port}能够正常访问!"
                   server_message="服务器${server_ip},端口${server_port}能够正常访问!";
       else
         if ping -c 1 $server_ip > /dev/null 2>&1
         then
               status=2
               echo "服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!";
                           server_message="服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!";
         else
               status=0
               echo "服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!";
                           server_message="服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!";
         fi
       fi
   fi
send_msg_to "${server_message}" "${status}";
   let i++
done

zyypp 发表于 2009-6-29 01:46:00

代码丢了 等我有时间再补上

zyypp 发表于 2009-6-29 01:46:27

系统资源使用状况

#!/bin/sh
LANG=zh_cn
此处使用代码在下面给出请挑选自己需要的信息
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';')

DISK使用状况
disk=$(df -h | grep "/dev/" | grep -v "tmp" | awk -F'/dev/' '{print $2}' | awk '{print "硬盘总空间为"$2"--已用"$3"--可用"$4"--已用比例"$5}')

物理内存总大小
totalmem=$(/usr/bin/free -m | grep Mem | awk '{print "物理内存共有"$2"MB"}')

物理内存已使用
usedmem=$(/usr/bin/free -m | grep Mem | awk '{print "物理内存已使用"$3"MB"}')

物理内存空闲
freemem=$(/usr/bin/free -m | grep Mem | awk '{print "物理内存空闲"$4"MB"}')

Cache化内存
cachedmem=$(/usr/bin/free -m | grep Mem | awk '{print "Cache化内存"$7"MB"}')

Swap已使用
swapmem=$(/usr/bin/free -m | grep Swap | awk '{print "Swap区共有"$2"MB--已用"$3"MB--空闲"$4"MB"}')

负载信息
load=$(/usr/bin/uptime | awk -F'load average: ' '{print $2}' | awk '{print $1$2$3}')

网卡流量
netRT=$(cat /proc/net/dev | grep "eth0:" | awk -F'eth0:' '{print $2}' | awk '{print $1"已接收的字节--"$9"已传输的字节"}')

zyypp 发表于 2009-6-29 01:46:46

发送信息的结果
(PS:所发shell本人均在Debian下测试通过,其他的Linux发行本未测试)

三楼的
Hi!刚才有人登陆了系统.登陆IP是,用户名是

四楼的(两种结果)
第一种是
服务器127.0.0.1,端口80无法访问,但是能够Ping通!

第二种是
服务器127.0.0.1,端口80无法访问,并且无法Ping通!

五楼的
(此处留空)

六楼的
硬盘 DISK
硬盘总空间为30G--已用2.9G--可用26G--已用比例11%

我VPS的 free -m 的回显信息
server:~# free -m
             total       used       free   shared    buffers   cached
Mem:         320      314          5          0         55      164
-/+ buffers/cache:         95      224
Swap:          511          0      511

时间 date
2009-06-29_00:00:00

IP地址
127.0.0.1

物理内存总大小 totalmem
物理内存共有320MB

物理内存已使用 usedmem
物理内存已使用314MB

物理内存空闲 freemem
物理内存空闲5MB

Cache化内存 cachedmem
Cache化内存164MB

Swap已使用 swapmem
Swap区共有511MB--已用0MB--空闲511MB

负载信息 load
0.00,0.00,0.00

网卡流量 netRT
415355145已接收的字节--282828691已传输的字节

zyypp 发表于 2009-6-29 01:47:03

PS: 本贴附件均已上传至 Google Code地址为 http://code.google.com/p/htooy/
--------------
PHP探针
2009-12-15:添加了网卡流量的显示(感谢GDTV的代码帮助)
2009-12-13晚:添加了php默认支持函数的相关信息
2009-12-13:完善了CPU信息,添加了一些php信息
2009-10-24:在页脚添加了代码执行时间的回显
2009-07-28:在iprober的基础上,增删了部分代码
--------------
系统信息实时查看
工具简介
本工具使用PHP语言编写,用Json+Ajax的方式,
使系统相关信息达到无刷新实时回显的目的.
这个工具可用于查看多个主机的信息.
文件结构
jquery.min.js放置于监控端
monitor.php    放置于监控端用于查看
status.php   放置于受控段用于生成信息
下载后请依次修改
monitor.php 与 status.php
这两个文件开头部分设置区中的内容,
其中已给出注释,可根据注释进行修改.
修改完直接上传至WEB空间即可.<

Changes with 1.0                                       15 Feb 2011
      *) Feature: 资源预警-->负载信息,空间使用率,真实内存使用率,Swap内存使用率.

Changes with 0.9                                       12 Feb 2011
      *) Feature: IPv6连接信息-->当前TCP/UDP连接数统计,
                                 当前TCP/UDP连接状态统计,
                                 当前TCP/UDP连接IP显示.
      *) Change:优化部分代码.

Changes with 0.8                                          8 Feb 2011
      *) Feature: IPv4连接信息-->当前TCP/UDP连接数统计,
                                 当前TCP/UDP连接状态统计,
                                 当前TCP/UDP连接IP显示.
      *) Change:优化部分代码.

Changes with 0.7                                          6 Feb 2011
      *) Bugfix:物理内存信息-->内存使用率.
                  Swap内存详情-->Swap内存使用率.
      *) Feature: 物理内存信息-->真实已用内存,真实内存使用率.

Changes with 0.6                                          5 Feb 2011
      *) Feature: 系统时间-->开机时间.

Changes with 0.5                                          1 Feb 2011
      *) Bugfix:磁盘信息-->空间使用率.

Changes with 0.4                                       31 Jan 2011
      *) Bugfix:两处php短连接格式.

Changes with 0.3                                       31 Jan 2011
      *) Feature: 网卡信息-->网卡数量,网卡流量.

Changes with 0.2                                       28 Jan 2011
      *) Feature:磁盘信息-->剩余空间,总计空间,空间使用率.
                   内存信息-->物理内存详情-->总计内存,已用内存,缓冲区使用,空闲内存,内存使用率.
                              Swap内存详情-->总计Swap内存,已用Swap内存,空闲Swap内存,Swap内存使用率.
                   负载信息-->一分钟负载,五分钟负载,十五分钟负载,进程.
                   系统时间-->运行时间,空闲时间,服务器时间,北京时间.
                   MySQL状态-->只是简单的测试能否链接.
      *) Security: B/S 简单的安全验证.

Changes with 0.1                                       20 May 2010
      *) The first version.
         使用json+ajax实现了部分信息实时刷新,此版本为暂未完成的测试版.
--------------
系统信息查看
2009-12-08:重新添加了连接状态信息(已解决无法多行显示bug),并增加了连接IP数统计
2009-11-02:增加了Inode信息,取消了连接状态信息
下载后请修改
$net="eth1:";//网卡编号
$disk="/dev/hda1";//网卡编号
2009-08-29:可查看当前系统的常用综合信息,主要针对手机
下载后请修改$net="eth0:";//网卡编号
--------------
Linux版在线CMD
2009-12-12:Linux版的在线CMD,可以执行linux下的基本命令,如果权限够可以执行几乎所有命令,并会自动生成日志
(PS:PHP必须支持system函数)
不过需要注意不要执行像 ping 127.0.0.1 这样的不会自动停止的命令,那样将会造成进程永远存在和页面无反应,如需执行可以执行 ping -c 4 127.0.0.1 这样的命令,请一定注意...
--------------
php版端口在线检测
2009-12-20:php版的端口在线检测工具,这里就不多做介绍了,需要的人一看就明白
代码非我原创,不过原作者不详,我只是在源代码的基础上进行了更改
--------------
简单主机工具
2009-07-28:本工具纯属个人无聊时所写 功能非常不完善 停更


--------------
PHP探针    更新于(2009-12-15)
PHP探针    更新于(2009-12-13 晚)
PHP探针    更新于(2009-12-13)
PHP探针    更新于(2009-10-24)
PHP探针    更新于(2009-07-28)
--------------
系统信息实时查看更新于(2011-02-15)
系统信息实时查看更新于(2011-01-31)
系统信息实时查看更新于(2011-01-28)(未压缩,上传晚了,光顾着看视频忘记时间了)
系统信息实时查看更新于(2010-05-20)(未压缩,半成品)
--------------
系统信息查看更新于(2009-12-08)(未压缩)
系统信息查看更新于(2009-11-02)
系统信息查看更新于(2009-08-29)
--------------
Linux版php在线CMD 更新于(2009-12-12)
--------------
php版端口在线检测 更新于(2009-12-20)
--------------
简单主机工具更新于(2009-07-28)(停止更新,建议不要使用)
--------------

[ 本帖最后由 zyypp 于 2011-2-15 21:41 编辑 ]

cpuer 发表于 2009-6-29 01:58:52

做个标记,明天早上早起来看,:P

zyypp 发表于 2009-6-29 02:02:57

我都还在编辑呢 你就来看 晕 我下次 早上4点在发帖 我看你还是不是 第一名 嘿嘿
OK了 完工 洗澡 呼呼 去啦 嘿嘿



------------------------------------------------------------------
以下内容为转载,如有不妥请及时联系马上删除
Shell 相关
测试运算
数值测试运算
-eq 判断两个数字是否相等,相等返回“0”,不相等返回“1”
-ge 判断第一个数字是否大于等于第二个数字,大于等于返回0,小于返回“1”
-gt 判断第一个数字是否大于第二个数字,大于返回“0”,不大于返回“1”
-le 判断第一个数字是否小于等于第二个数字,小于等于返回“0”,大于返回“1”
-lt 判断第一个数字是否小于第二个数字,小于返回“0”,不小于返回“1”
-ne 判断两个数不相等,不相等返回“0” ,相等返回“1”
字符串运算测试
string1 = string2   如果两个字符串相等则返回true, 否则返回false。
string1 != string2如果两个字符串不相等则返回true, 否则返回false。
string1 > string2   如果string 1 大于 string2, 则返回true ,否则返回false。
string1 < string2   如果string 1小于string 2 , 则返回true,否则返回false。
-n string:如果字符中长度大于0,则返回true , 否则返回false; 通常可以省略-n
-z string:如果字符串的长度等于0,则返回true, 否则返回false。

文件测试运算
-d filename判断filename 是否为目录,是则返回0,否则返回1
-f filename判断filename 是否为文件,是则返回0,否则返回1
-r filename判断filename 是否可读, 是则返回0,否则返回1
-w filename判断filename 是否可写, 是则返回0,否则返回1
-x filename判断filename 是否可执行, 是则返回0,否则返回1
-L filename判断filename 是否是一个符号链接文件, 是则返回0,否则返回1
-s filename判断filename 的长度是否大于0, 是则返回0,否则返回1
-u filename判断filename 是否有suid位设置, 是则返回0,否则返回1

-e      文件存在
-a      文件存在
      这个选项的效果与-e相同.但是它已经被弃用了,并且不鼓励使用
-f      file是一个regular文件(不是目录或者设备文件)
-s      文件长度不为0
-d      文件是个目录
-b      文件是个块设备(软盘,cdrom等等)
-c      文件是个字符设备(键盘,modem,声卡等等)
-p      文件是个管道
-h      文件是个符号链接
-L      文件是个符号链接
-S      文件是个socket
-t      关联到一个终端设备的文件描述符
      这个选项一般都用来检测是否在一个给定脚本中的stdin[-t0]或[-t1]是一个终端
-r      文件具有读权限(对于用户运行这个test)
-w      文件具有写权限(对于用户运行这个test)
-x      文件具有执行权限(对于用户运行这个test)
-g      set-group-id(sgid)标志到文件或目录上
      如果一个目录具有sgid标志,那么一个被创建在这个目录里的文件,这个目录属于创建
      这个目录的用户组,并不一定与创建这个文件的用户的组相同.对于workgroup的目录
      共享来说,这非常有用.见<<UNIX环境高级编程中文版>>第58页.
-u      set-user-id(suid)标志到文件上
      如果运行一个具有root权限的文件,那么运行进程将取得root权限,即使你是一个普通
      用户.这对于需要存取系统硬件的执行操作(比如pppd和cdrecord)非常有用.如果
      没有suid标志的话,那么普通用户(没有root权限)将无法运行这种程序.
      见<<UNIX环境高级编程中文版>>第58页.
         -rwsr-xr-t    1 root       178236 Oct22000 /usr/sbin/pppd
      对于设置了suid的文件,在它的权限标志中有"s".
-k      设置粘贴位,见<<UNIX环境高级编程中文版>>第65页.
      对于"sticky bit",save-text-mode标志是一个文件权限的特殊类型.如果设置了这
      个标志,那么这个文件将被保存在交换区,为了达到快速存取的目的.如果设置在目录
      中,它将限制写权限.对于设置了sticky bit位的文件或目录,权限标志中有"t".
         drwxrwxrwt    7 root         1024 May 19 21:26 tmp/
      如果一个用户并不时具有stick bit位的目录的拥有者,但是具有写权限,那么用户只
      能在这个目录下删除自己所拥有的文件.这将防止用户在一个公开的目录中不慎覆盖
      或者删除别人的文件,比如/tmp(当然root或者是目录的所有者可以随便删除或重命名
      其中的文件).
-O      你是文件的所有者.
-G      文件的group-id和你的相同.
-N      从文件最后被阅读到现在,是否被修改.


复合测试运算
逻辑操作包括与、或,分别用“-a” 和 “-o”来表示。

流程控制语句
1、顺序执行语句:只要把语句按照逻辑顺序写好,Shell脚本解释器就会顺序地执行这些语句。
2、条件选择语句
if then语句
if 条件表达式
then
   语句1
fi

if 条件表达式; then
   语句1
fi


if thenelse 语句
if 条件表达式; then
   语句1
else
   语句2
fi


if 语句的嵌套语法是:
if条件表达式1; then
语句1
else
if 条件表达式2; then
   语句2
else
   语句3
fi
fi


if elif 语句

if [ $SYSTEM = "Linux" ] ; then
echo "Linux"
elif [ $SYSTEM = "FreeBSD" ] ; then
echo "FreeBSD"
elif [ $SYSTEM = "Solaris" ] ; then
echo "Solaris"
else
echo "What?"
fi

USER=`who |awk '{ print $1 }'`
if [ $USER = "root" ] ; then
echo "root"
elif [ $USER = "cacti" ] ; then
echo "cacti"
elif [ $USER = "nagios" ] ; then
echo "nagios"
elif [ $USER = "mysql" ] ; then
fi


case 语句 就是一个变量的值与期望的值进行匹配
case $1 in
匹配值1)
   语句1
   语句2
   …………
   …………
   ;;
匹配值2)
   语句3
   语句
   …………
   …………
   ;;
匹配值3)
   语句5
   语句6
   …………
   …………
   ;;
esac



Shell 脚本中的循环语句包括:for 循环、while循环、until循环
for iin kg h
do
echo ok

done

while ls > /dev/null
do
echo ok
done

until aa > /dev/null
do
echo ok
done


函数
hello () {
echo ok
}

function hello () {
echo hello
}

[ 本帖最后由 zyypp 于 2010-2-18 00:00 编辑 ]
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Linux系统监测