随着Linux应用日益广泛,绝大部分的网络服务器都使用Linux操作系统。为了全面掌握网络服务器的运行状况和趋势,需要对服务器进行全面的监控。

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


性能监控脚本
##############################################################################
#!/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服务器系统负载严重告警"


进程监控脚本
###############################################################################
#!/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服务关闭告警"


流量监控脚本
###############################################################################
#!/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

流量分析脚本
###############################################################################
#!/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

利用脚本进行系统监控是一个不错的选择,简单实用。之后我还想到用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监控系统的文章,大家有空可以参考一下。

zabbix的性能监控分析图
其实除了以上提到的shell脚本和监控方案,要使服务器监控的效果更好,还有一项工作是必须做的,就是监控数据及运维操作的记录,我这里把它叫做运维日志吧。每天有写运维日志的习惯是很重要的,这可以有利于我们分析服务器的趋势,比如增加哪些服务后,服务器的cpu占用会有上升的趋势;哪个时段是流量的高峰期;哪个时段服务器比较空闲,可以进行数据库备份的操作等等。更有好处的是,把我们日常的操作行为通过日志形式记录下来,万一除了什么问题,可以通过查询操作日志,了解是否人为操作而引起的。最后一点,有几个重要的性能监测工具可别忘记了,top、vmstat、w、uptime、ps、free、iostat、netstat、/proc等,这些是Linux系统内置或附件的工具,记住每个命令的详细用法,有时候就可以直接找出造成性能问题的原因了。
关于服务器监控这个话题,很多专家给出了不同的意见,但无可否认的,监控工作必须做,至于监控什么是重点,用怎样的监控方式去实现,通过监控能达到多大的效果,这个就视乎服务器应用需求及个人需求了,本文只是提出一些个人的见解,供大家参考。最后简单总结一下本文的主要内容:监控的重要性;shell监控脚本;开源监控方案;记住写运维日志和常用Linux监控工具。希望大家都能够找出适合自己的、适合企业的服务器监控方案。

转载于:https://blog.51cto.com/fccwcom/1094383

[shell] IT运维之Linux服务器监控方案相关推荐

  1. linux服务器运维操作命令,Linux服务器运维常用命令列表

    每时每刻,我们都需要参考某种Linux命令列表.也许您是一名服务器系统管理员,正在逐步完成任务,突然间您脑筋急转弯.或者,也许您是通过Linux学习的初学者,这里有一些有用的Linux命令! 1 –查 ...

  2. 【运维】Linux 服务器 基本安防配置

    前言 在前两个星期,我负责的一个小型企业网站遭受到了攻击,导致网站非常的卡,正常用户无法访问:初步判断是CC攻击; 这样的攻击防御起来还是比较简单的:后来服务器又受到了攻击,服务器卡的完全链接不上去: ...

  3. Linux服务器监控cpu数据shell脚本

    Linux服务器监控cpu数据shell脚本 背景: 一种简易的监控进程的CPU.内存.线程数.句柄数的办法,使用shell脚本实现监控,Excel实现数据分析. #!/bin/bash#过滤出需要的 ...

  4. linux云自动化运维,Liunx运维一线大神亲授 全新Linux云计算运维基础与Linux Shell自动化运维实战课程...

    Liunx运维一线大神亲授 全新Linux云计算运维基础与Linux Shell自动化运维实战课程 全新Linux云计算运维基础与Linux Shell自动化运维实战课程,由于国内一线大神亲自授课与教 ...

  5. H5直播站点运维笔记一 服务器篇

    H5直播站点运维笔记一 服务器 服务器篇 一.CentOS6基础操作 1. 查看服务器版本 2. 查看服务器性能 3. 文件查找 4. 软件查找 5. 用户系统 6. 远程登录工具 二.FTP ( V ...

  6. 【IT运维】Linux运维需要掌握哪些技能?

    在当下Linux运维是每个企业都不能缺少的岗位.其以服务为中心,以稳定.安全.高效为基本,确保公司互联网业务能够7*24小时为用户提供高质量的服务,在企业当中有着十分重要的地位和作用.因此越来越多的小 ...

  7. Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志

    Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志 1. 查看集群资源状况 2. 监控集群资源利用率 3. 管理K8s组件日志 4. 管理K8s应用日志 1. 查看集群资源 ...

  8. 深入探讨运维驱动的可监控性设计

    "外部质量验收驱动技术债务消除"的理念: 技术债务的形成往往是由于赶进度忽略了非功能质量特性而导致的,由于内部质量的不佳(设计或代码质量不高)导致外部质量的低下. 传统IT领域通常 ...

  9. 运维自动化管理服务器 CheungSSH

    CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...

最新文章

  1. 手机号和邮箱正则匹配
  2. 【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
  3. 1、Android测试入门
  4. android adb install Failure,提示base.apkcode is missing问题的解决
  5. 看完你会为自己哭,或者为他们哭
  6. java wait方法_java wait方法
  7. 查询一个ID出现2种结果的情况
  8. python:os模块与sys模块
  9. windowns10安装httpd
  10. Oracle脚本(三)
  11. 学习TP5(一):TP5框架下载与快速入门使用
  12. CSS3动画入门 CSS动画如何使用(举例说明)
  13. Kinect外包团队(长年承接微软Kinect体感项目外包,有大型Kinect案例)
  14. 21世纪青年人最该阅读的书籍清单
  15. epoll 为什么用红黑树?
  16. matlab rgb三维直方图,MATLAB小技巧之十:利用MATLAB绘制三维彩色柱状图[转载]
  17. 为什么我不看好人人网在美国上市
  18. 股票自动委托下单html,股票怎么设置自动挂单?股票交易挂单规则
  19. JavaMail IMAPFolder.getMessageByUID 获取QQ和腾讯企业邮箱新邮件的问题
  20. unity 鼠标放置 ui_ui层次结构以及不常见但至关重要的任务放置在哪里

热门文章

  1. 凭一张照片找到视频中你所有的镜头,包括背影丨商汤ECCV 2018论文
  2. 震惊!腾讯要建AI鹅厂,百度让狗刷脸购物,锤子R-1真机披露
  3. AI风向标:发改委重大工程项目公布,首个无人车路测试点落户亦庄
  4. VBS去除指定的字符串中的重复项返回重复后的字符串
  5. 解决阿里云主机受到攻击的问题 2
  6. “水仙花数”你了解多少??
  7. SSD 下的 MySQL IO 优化
  8. 守护进程和inetd超级服务器
  9. [转]简析 IOS 程序图标的设计
  10. 关于简历的一点心得(纯属个人想法,非专业人士,欢迎批评指正~)