设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
总共321条微博

每日一博

查看: 20786|回复: 20

[其它] 【站长推荐】IT运维之Linux服务器监控方案【顶】

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-30 08:56
  • 签到天数: 36 天

    [LV.5]常住居民I

    admin 发表于 2012-7-27 14:43:30 | 显示全部楼层 |阅读模式
    【站长推荐】
    随着Linux应用日益广泛,绝大部分的网络服务器都使用Linux操作系统。为了全面掌握网络服务器的运行状况和趋势,需要对服务器进行全面的监控。
    利用Linux发行版搭建一个网络服务器可能对于许多人都是一件很容易的事情,但网络服务器正式上线后,服务器数据流动、连接数、网络流量、系统负荷等各方面都会增加,安全问题也随之而来,再考虑到日志、数据库的重要性,我想无论是哪一位系统管理员,都应该迫不及待地想把服务器上线的前期工作做好吧。
    那我们究竟需要做好哪些工作准备呢?之前有看过一篇文章说到系统管理员应该定期完成的九件事情,我分析过后,认为有几件事情是必须得做的。首先是备份,做好定时备份策略,备份所有你认为重要的数据,并且定期检查你的备份是否有效、全面;日志轮换,无论你想用哪种轮换方式,控制日志增长避免驱动器已满是你的目的;做一定的安全措施,如防火墙iptables的访问控制,用denyhosts防止黑客远程暴力破解,mysql远程登录权限等等;最后就是服务器监控,也是我主要想讲述的内容。
    对于服务器的硬件资源、性能、带宽、端口、进程、服务等都必须有一个可靠和持续的监测,统计分析每天的各种数据,从而能及时反映出服务器哪里存在性能瓶颈、安全隐患等。另外是要有危机意识,就是了解服务器有可能出现哪些严重的问题,出现这些问题后该如何去迅速处理。比如数据库的数据丢失,日志容量过大,被黑客入侵等等。说到底,预防是关键。
    监控,是预防的其中的一项重要工作。这里先说说我需要监控的内容。系统负载、cpu使用率、内存占用、磁盘空间、网络流量、端口、进程、apachetomcat的连接数、mysql的运行状态这些都是我想要监控的东西,但又能做到多少呢,我只能尽力而为了。要了解服务器每时每刻的整体运行状态,单靠几个Linux自带的性能监测命令是很难实现的。所以,利用shell脚本和开源监控工具进行服务器监控成为了我的两个主要的选择。
    利用shell脚本监控能够很好把握的监控的内容,时间,警告峰值,以及方便地进行告警通知,自定义监控日志内容等等;而许多开源的监控工具都十分方便和实用,比如有zabbixcactinagios等,而且能够针对不同的监控内容,生成好看的便于观察的曲线图,多数的开源监控工具都比较成熟,至于哪个好用就得用过才知道。由于这些监控工具都有许多热血人士写了安装和使用的文档,我这里就不写进来了。想了解下的朋友也可以到我的博客上走走,在这里我主要是把自己写的一些shell监控脚本分享一下,希望大家能给点意见。
    我这里写了四个脚本(performance.sh 性能监控,process.sh 进程监控,network.sh 流量监控,tongji.sh流量分析统计),并使用crontab定时执行脚本进行监控数据的记录,形成每天的监控日志放在如下相应的文件夹,并且超过自己设定的告警值后发邮件通知,如果是腾讯企业邮箱,163邮箱那些有免费短信通知功能的可以尝试一下,收到邮件告警后很快就能收到短信了,十分方便。
    5e10ae54b568e3514f115b66a845650b.jpg

    性能监控脚本
    ##############################################################################
    #!/bin/bash
    #监控cpu系统负载
    IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
    cpu_num=`grep -c 'model name' /proc/cpuinfo`
    count_uptime=`uptime |wc -w`
    load_15=`uptime | awk '{print $'$count_uptime'}'`
    average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`  
    average_int=`echo $average_load | cut -f 1 -d "."`  
    load_warn=0.70  
    if [ $average_int -gt 0        ]
    then
    echo "$IP服务器单个核心15分钟的平均负载为$average_load,超过警戒值1.0,请立即处理!!!$(date +%Y%m%d/%H:%M:%S)" >>/usr/monitor/performance/performance_$(date +%Y%m%d).log
    echo "$IP服务器单个核心15分钟的平均负载为$average_load,超过警戒值1.0,请立即处理!!!$(date +%Y%m%d/%H:%M:%S)" | mail -s "$IP服务器系统负载严重告警" 25c8749a3fd79444f7302ee7191c67c3.jpg

    进程监控脚本
    ###############################################################################
    #!/bin/bash
    IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
    tomcat_dir="/opt/apache-tomcat-7.0.8"
    mysql_dir="/usr/local/mysql/bin/mysqld_safe"
    vsftp_dir="/usr/sbin/vsftpd"
    ssh_dir="/usr/sbin/sshd"
    for dir in $tomcat_dir $mysql_dir $vsftp_dir  $ssh_dir
    do
    process_count=$(ps -ef | grep "$dir" | grep -v grep | wc -l)
            for service in tomcat mysql vsftp ssh
            do
                    echo "$dir" |grep -q "$service"
                    if [ $? -eq 0 ]
                    then
                            if [ $process_count -eq 0 ]
                            then
                                echo "$service is down at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/process/process_$(date +%Y%m%d).log
                                echo "$service is down at $(date +%Y%m%d%H:%M:%S)" | mail -s "$IP服务器 $service服务关闭告警" fe1e1a2d207923867c8f758a102566da.jpg

    流量监控脚本
    ###############################################################################
    #!/bin/bash
    #
    R1=`cat /sys/class/net/eth0/statistics/rx_bytes`
    T1=`cat /sys/class/net/eth0/statistics/tx_bytes`
    sleep 1
    R2=`cat /sys/class/net/eth0/statistics/rx_bytes`
    T2=`cat /sys/class/net/eth0/statistics/tx_bytes`
    TBPS=`expr $T2 - $T1`
    RBPS=`expr $R2 - $R1`
    TKBPS=`expr $TBPS / 1024`
    RKBPS=`expr $RBPS / 1024`
    echo "上传速率 eth0: $TKBPS kb/s 下载速率 eth0: $RKBPS kb/s at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/network/network_$(date +%Y%m%d).log
    ###############################################################################
    流量监控日志 /usr/monitor/network/network_$(date +%Y%m%d).log
    f13fb4401de2f0f768b9b20468913ebd.jpg
    流量分析脚本
    ###############################################################################
    #!/bin/bash
    #
    TX=0;
    RX=0;
    MAX_TX=0;
    MAX_RX=0;
    while read line
    do
            a=`echo $line | grep "eth0" |awk '{print $3}'`
    if [ $a -ge 0 ]
    then
            TX=$a
            if [ $TX -ge $MAX_TX ]
            then
                    MAX_TX=$TX
            fi
    fi
            b=`echo $line | grep "eth0" |awk '{print $7}'`
    if [ $b -ge 0 ]
    then
            RX=$b
            if [ $RX -ge $MAX_RX ]
            then
                    MAX_RX=$RX
            fi
    fi
    done < /usr/monitor/network/network_$(date +%Y%m%d).log
                                          echo "最高上传速度为 $MAX_TX kb/s at $(date +%Y%m%d)">>/usr/monitor/network/tongji.log
                                          echo "最高下载速度为 $MAX_RX kb/s at $(date +%Y%m%d)">>/usr/monitor/network/tongji.log
    ###############################################################################
    流量分析日志 /usr/monitor/network/tongji.log
    67509a1b633b7e927e615c46c6d8e3e3.jpg
    利用脚本进行系统监控是一个不错的选择,简单实用。之后我还想到用shell脚本进行对myqsl的监控,对日志增长的监控,对apache连接数监控等等,这个有待后面的研究了。
            利用shell脚本进行监控当然是方便,可靠,但单靠一堆数据日志,很难发现什么趋势变化,再加上当你维护的服务器量较多的时候,更是手忙脚乱的。这里我推荐一些开源的监控工具来帮助大家更好地去做好系统监控。
            Cacti,是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用 RRDtool绘画图形。在众多监测图形分析工具中,RRDTool所画的图是最好看的,而且Cacti还能定制模板,按需增加插件,功能十分强大。想要实现异常通知功能的话,可以整合Nagios来一起使用。Nagios是一个监视系统运行状态和网络信息的监视系统。能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。同时提供一个WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。Cacti+Nagios这个组合很好用,但配置过程比较复杂,大家可以尝试去搭建一个这样的实用而方便的分布式监控系统。
            另外一个要介绍的监控工具叫Zabbix,除了能监视各种网络参数,保证服务器系统的安全运营之外,还能提供如短信、邮件、jabber等通知机制以让系统管理员快速定位/解决存在的各种问题。基本上能实现cacti+nagios的功能。安装配置过程也比较简单,我的博客上有在ubuntu环境和centos环境下搭建zabbix监控系统的文章,大家有空可以参考一下。
    afeeb1546304083d86f341659e20f4d8.jpg
    zabbix的性能监控分析图
    其实除了以上提到的shell脚本和监控方案,要使服务器监控的效果更好,还有一项工作是必须做的,就是监控数据及运维操作的记录,我这里把它叫做运维日志吧。每天有写运维日志的习惯是很重要的,这可以有利于我们分析服务器的趋势,比如增加哪些服务后,服务器的cpu占用会有上升的趋势;哪个时段是流量的高峰期;哪个时段服务器比较空闲,可以进行数据库备份的操作等等。更有好处的是,把我们日常的操作行为通过日志形式记录下来,万一除了什么问题,可以通过查询操作日志,了解是否人为操作而引起的。最后一点,有几个重要的性能监测工具可别忘记了,top、vmstat、w、uptime、ps、free、iostat、netstat、/proc等,这些是Linux系统内置或附件的工具,记住每个命令的详细用法,有时候就可以直接找出造成性能问题的原因了。
    关于服务器监控这个话题,很多专家给出了不同的意见,但无可否认的,监控工作必须做,至于监控什么是重点,用怎样的监控方式去实现,通过监控能达到多大的效果,这个就视乎服务器应用需求及个人需求了,本文只是提出一些个人的见解,供大家参考。最后简单总结一下本文的主要内容:监控的重要性;shell监控脚本;开源监控方案;记住写运维日志和常用Linux监控工具。希望大家都能够找出适合自己的、适合企业的服务器监控方案。


    运维网 感谢您的阅读
    回复过本主题
    的还回复过:

    该用户从未签到

    jcpokai521 发表于 2013-1-29 12:02:02 | 显示全部楼层
    [发帖际遇]: jcpokai521 被钱袋砸中进医院,看病花了 3 金钱. 幸运榜 / 衰神榜
  • TA的每日心情
    开心
    2013-6-17 14:22
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    为人民币服务 发表于 2013-1-26 08:48:42 | 显示全部楼层
    zabbix也是要好好学习一下的
    [发帖际遇]: 一个袋子砸在了 为人民币服务 头上,为人民币服务 赚了 1 金钱. 幸运榜 / 衰神榜
  • TA的每日心情
    无聊
    2013-6-2 16:02
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    xiangtianxia 发表于 2013-4-4 15:55:14 | 显示全部楼层
    好详细啊 谢谢楼主了 收藏了
    [发帖际遇]: xiangtianxia 在网吧通宵,花了 9 金钱. 幸运榜 / 衰神榜
  • TA的每日心情
    开心
    2013-5-22 09:29
  • 签到天数: 1 天

    [LV.1]初来乍到

    kuang417 发表于 2013-5-22 09:21:11 | 显示全部楼层
    嗯,写得不错。脚本收下了,试试看效果怎么样!
  • TA的每日心情
    擦汗
    2013-8-1 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    小飞侠xl 发表于 2013-8-1 15:32:01 | 显示全部楼层
    学习了。~不错的文章。
    [发帖际遇]: 一个袋子砸在了 小飞侠xl 头上,小飞侠xl 赚了 5 金钱. 幸运榜 / 衰神榜

    该用户从未签到

    繁星 发表于 2014-1-22 12:04:23 | 显示全部楼层
    学习了,好文章
    [发帖际遇]: 发帖时在路边捡到 1 金钱,偷偷放进了口袋. 幸运榜 / 衰神榜

    该用户从未签到

    redapple2008 发表于 2014-3-5 14:06:20 | 显示全部楼层
    收了这些脚本,谢谢了!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|申请友链|sitemap|手机版|小黑屋|Archiver|运维网 ( 京ICP备16008201号  

    GMT+8, 2018-7-18 06:50 , Processed in 0.669499 second(s), 90 queries , XCache On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表