Linux下系统如何监控服务器硬件、操作系统、应⽤服务和业务1.Linux监控概述
Linux服务器要保证系统的⾼可⽤性,需要实时了解到服务器的硬件、操作系统、应⽤服务等的运⾏状况,各项性能指标是否正常,需要使⽤各种LINUX命令。做到⾃动化运维就需要,将上述各项监控指标在同⼀个软件中展显出来,图形化监控,消息报警机制,⽇志检看,资产管理等等
2.Linux监控的对象
2.1 硬件监控
(1)服务器:如电源,风扇,磁盘,CPU等,可以使⽤IPMI监控,在LINUX下安装IPMITOOL
不同的服务器⼚商都在服务器上配有远程控制卡BMC: 如DELL(iDRAC) ,IBM (IMM) ,HP(ILO)
LINUX下只需安装:#yum install -y OpenIPMI ipmitool  这⼆个⼯具就可以
IPMI命令可以在服务器本地运⾏,也可以通过⽹络远程调⽤,IPMI在服务器上可以配置单独的IP地址和访问密码
(2)⽹络设备:交换机,防⽕墙,路由器等,使⽤SNMP进⾏监控
在被监控的设备上开启SNMP代理,到时可以通过⼯具进⾏获取数据,如ZABBIX
1.LINUX上安装
#yum list |grep snmp
#yum install -y net-snmp net-snmp-utils
安装好后要配置f⽂件
rocommunity snmptest 172.16.20.89  #172.16.20.89表⽰仅这IP地址才可以来访问snmp信息
#systemctl start snmpd  启动SNMP ,netstat -nulp  ,netstat -ntlp 查看snmp启来的端⼝udp=161 ,TCP=199
通过SNMP命令可以获取监控信息:
#snmpget -v2c -c snmptest 172.16.20.89 1.3.6.1.2.1.1.3.0 #1.3.6.1.2.1.1.3.0为OID
2.交换机上开启
snmp-server community public ro
(3)定期机房巡检,查看设备运⾏情况
2.2 操作系统监控
安装sysstat⼯具,包括了iostat、vmstat、sar、mpstat、nfsiostat、pidstat (yum install -y sysstat  #rpm -ql sysstat)
(1)CPU (CPU调度上下⽂切换,运⾏队列负载,CPU使⽤率)
确定服务类型:IO密集型(如:数据库),CPU密集型(如:WEB)
1.cpu利⽤率内核态: 30%和⽤户态:70%
2.cpu运⾏队列:1~3线程 1CPU=4核队列不超过12个
3.上下⽂切换:尽量少,结合cpu利⽤率
4.#top命令(显⽰CPU和内存信息,M按内存使⽤率排序,P按CPU使⽤率排序,Q退出)
CPU百分⽐各项指标: us:⽤户态  sy:内核态  ni:进程间优先级更换 id:空闲  wa:IO等待 hi:硬中断 si:软件中 st:虚拟
5.CPU监控的各种命令:top ,vmstat , mpstat, uptime ,ps cpu进程情况,pstree 以树形结构显⽰进程之间的关系
(2)内存
1. free -m :显⽰内存信息
2.vmstat  :来监控虚拟内存  #vmstat 1 10 每隔1秒共10次获取监控信息
(3)磁盘
1.iostat:命令⽤来显⽰存储⼦系统的详细信息,通常⽤它来监控磁盘 I/O 的情况。
2.iotop:需要yum另外安装,yum install -y iotop
(4)⽹络
0.ping :测试⽹络
1stat: -ntlp 、-nulp、-na 等显⽰了⽹络相关的信息
2.iftop -n:显⽰⽹络信息的类似top的程序. #yum install -y iftop
4.Wireshark:windows⽹络抓⼯具
(5)整体性能(CPU和内存、磁盘)
2.mpstat:实时系统监控⼯具,多CPUs系统⾥,其不但能查看所有CPU的平均状况信息
3.vmstat  :来监控虚拟内存  #vmstat 1 10 每隔1秒共10次获取监控信息
4.sar:可⽤来显⽰ CPU 使⽤率、内存页数据、⽹络 I/O 和传输统计、进程创建活动和磁盘设备的活动详情
(6)nmon:性能报表,IBM开源⼯具,⼆进制直接下载使⽤,配合EXECL表可以图形分析
2. nmon analyser下载:sourceforge/projects/jnmonanalyser/
< analyser—⽣成 AIX 性能报告参见:
www.ibm/developerworks/cn/aix/library/nmon_analyser/ 2.3 应⽤服务监控
(1)Ngin监控
⾸先安装nginx编译相关 :#yum install -y gcc glibc gcc-c++ pcre-devel opensshl-level
下载nginx源码安装,编译时加上监控参数:
#./configure --prefix=/usr/local/nginx  --user=www --group=www --with-http_stub_status_module  --with-http_ssl_module
#make && make install
#测试启动:#/usr/local/nginx/sbin/nginx -t 配置⽂件没有问题就可以启动了
配置f⽂件,增加在server段内
location /nginx_status {
stub_status on;
access_log  off;
allow 192.168.2.0/24;
deny all;
}
打开浏览器访问:192.168.2.1/nginx-status
2.4 ⽣产业务监控
3.使⽤SHELL脚本监控
这⾥到四个脚本(performance.sh 性能监控,process.sh 进程监控,network.sh 流量监控,tongji.sh流量分析统计),并使⽤crontab定时执⾏脚本进⾏监控数据的记录,形成每天的监控⽇志放在如下相应的⽂件夹,并且超过⾃⼰设定的告警值后发邮件通知,那些有免费短信通知功能的邮箱如腾讯,163邮箱可以尝试⼀下,收到邮件告警后很快就能收到短信了,很⽅便。
(1)性能监控脚本 performance.sh
#!/bin/bash
#---------------------------------------------------------------------------------
# 说明,Linux服务器--性能监控脚本 ,⽹址来源:bbs.51cto/thread-937759-1.html
# 主要监控: 01.监控cpu系统负载 02. 监控cpu使⽤率 03. 监控交换分区 04. 监控磁盘空间
# ⽣成的性能监控⽇志 $path/performance_%Y%m%d.log
# 2017.06.25 djp
#---------------------------------------------------------------------------------
path='/tmp/monitor/performance'
#01.监控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)" >>$path/performance_$(date +%Y%m%d).log
echo "$IP服务器单个核⼼15分钟的平均负载为$average_load,超过警戒值1.0,请⽴即处理$(date
+%Y%m%d/%H:%M:%S)" | mail -s "$IP服务器系统负载严重告警" XXXX@qq
else
echo "$IP服务器单个核⼼15分钟的平均负载值为$average_load,负载正常 $(date +%Y%m%d/%H:%M:%S)">>$path/performance_$(date +%Y%m%d).log
fi
} #}}}
#02. 监控cpu使⽤率
{ #{ { {
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
if [ $cpu_idle -lt 20 ]
then
echo "$IP服务器cpu剩余$cpu_idle%,使⽤率已经超过80%,请及时处理。">>$path/performance_$(date +%Y%m%d).log
echo "$IP服务器cpu剩余$cpu_idle%,使⽤率已经超过80%,请及时处理" | mail -s "$IP服务器cpu告警"
XXXX@qq
else
echo
"$IP服务器cpu剩余$cpu_idle%,使⽤率正常">>$path/performance_$(date +%Y%m%d).log
fi
} #}}}
#03. 监控交换分区
{ #{ { {
swap_total=`free -m | grep Swap | awk '{print $2}'`
swap_free=`free -m | grep Swap | awk '{print $4}'`
swap_used=`free -m | grep Swap | awk '{print $3}'`
if [ $swap_used -ne 0 ]
then
swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
swap_warn=0.20
swap_now=`expr $swap_per \> $swap_warn`
if [ $swap_now -eq 0 ]
then
echo "$IP服务器swap交换分区只剩下 $swap_free M 未使⽤,剩余不⾜20%,使⽤率已经超过80%,请及时处
理。">>$path/performance_$(date +%Y%m%d).log
echo "$IP服务器swap交换分区只剩下 $swap_free M 未使⽤,剩余不⾜20%, 使⽤率已经超过80%, 请及时处理。" | mail -s "$IP服务器内存告警" XXXX@qq
else
echo "$IP服务器swap交换分区剩下 $swap_free M未使⽤,使⽤率正常">>$path/performance_$(date +%Y%m%d).log
fi
else
echo "$IP服务器交换分区未使⽤" >>$path/performance_$(date +%Y%m%d).log
fi
} #}}}
#04. 监控磁盘空间
{ #{ { {
disk_sda1=`df -h | grep /dev/sda1 | awk '{print $5}' | cut -f 1 -d "%"`
if [ $disk_sda1 -gt 80 ]
then
echo "$IP服务器 /根分区使⽤率已经超过80%,请及时处理。">>$path/performance_$(date +%Y%m%d).log
echo "$IP服务器 /根分区使⽤率已经超过80%,请及时处理。 " | mail -s "$IP服务器硬盘告警" XXXX@qq
else
echo "$IP服务器 /根分区使⽤率为$disk_sda1%,使⽤率正常">>$path/performance_$(date +%Y%m%d).log
fi
#监控登录⽤户数
users=`uptime |awk '{print $6}'`
if [ $users -gt 2 ]
then
echo "$IP服务器⽤户数已经达到$users个,请及时处理。">>$path/performance_$(date +%Y%m%d).log
echo "$IP服务器⽤户数已经达到$users个,请及时处理。" | mail -s "$IP服务器⽤户登录数告警" XXXX@qq
else
echo "$IP服务器当前登录⽤户为$users个,情况正常">>$path/performance_$(date +%Y%m%d).log
fi
>>>>>>>>>>>>>>>####
} #}}}
(2)进程监控脚本 process.sh
#!/bin/bash
#!/bin/bash#---------------------------------------------------------------------------------
# 说明,Linux服务器--进程监控脚本 ,⽹址来源:bbs.51cto/thread-937759-1.html
# 主要监控:
# ⽣成的进程监控⽇志
# 2017.06.25 djp
#---------------------------------------------------------------------------------
path='/tmp/monitor/process'
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"
tomcat_dir=""
mysql_dir=""
vsftp_dir=""
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)" >>$path/process_$(date +%Y%m%d).log
echo "$service is down at $(date +%Y%m%d%H:%M:%S)" | mail -s "$IP服务器 $service服务关闭告警" XXXX@qq
else
echo "$service is running at $(date +%Y%m%d%H:%M:%S)" >>$path/process_$(date +%Y%m%d).log
fi
else
continue
fi
done
done
} #}}}
(3)流量监控脚本 network.sh
#!/bin/bash
#---------------------------------------------------------------------------------
# 说明,Linux服务器--流量监控脚本 ,⽹址来源:bbs.51cto/thread-937759-1.html
# 主要监控: 流量监控
# ⽣成的流量监控⽇志
# 2017.06.25 djpaix系统netstat命令详解
#---------------------------------------------------------------------------------
path='/tmp/monitor/network'
mkdir -p $path
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)" >>$path/network_$(date
+%Y%m%d).log
(4)流量分析统计脚本 tongji.sh

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论