加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux下系统如何监控服务器硬件、操作系统、应用服务和业务

发布时间:2020-12-14 02:00:00 所属栏目:Linux 来源:网络整理
导读:1.Linux监控概述 ?????? Linux服务器要保证系统的高可用性,需要实时了解到服务器的硬件、操作系统、应用服务等的运行状况,各项性能指标是否正常,需要使用各种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

?????????????????? 安装好后要配置snmpd.conf文件

??????????????????? 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 trap和OID,参见:https://blog.csdn.net/openbox2008/article/details/79958092

??????????????????? 通过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 :测试网络

???????????????? 1.netstat: -ntlp 、-nulp、-na 等显示了网络相关的信息

???????????????? 2.iftop -n:显示网络信息的类似top的程序. #yum install -y iftop

???????????????? 3.tcpdump:网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络

???????????????? 4.Wireshark:windows网络抓工具

?????? (5)整体性能(CPU和内存、磁盘)

???????????????? 1.top:实时显示CPU和内存、磁盘信息

???????????????? 2.mpstat:实时系统监控工具,多CPUs系统里,其不但能查看所有CPU的平均状况信息

???????????????? 3.vmstat? :来监控虚拟内存? #vmstat 1 10 每隔1秒共10次获取监控信息

???????????????? 4.sar:可用来显示 CPU 使用率、内存页数据、网络 I/O 和传输统计、进程创建活动和磁盘设备的活动详情

??????? (6)nmon:性能报表,IBM开源工具,二进制直接下载使用,配合EXECL表可以图形分析????????????????

????????????????? 1.nmon下载:http://nmon.sourceforge.net/pmwiki.php

???????????????? 2.nmon analyser下载:https://sourceforge.net/projects/jnmonanalyser/
?????????????????? 3.nmon analyser—生成 AIX 性能报告参见:????????????
????????????????????? https://www.ibm.com/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 配置文件没有问题就可以启动了

??????????? 配置nginx.conf文件,增加在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服务器--性能监控脚本,网址来源:http://bbs.51cto.com/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服务器系统负载严重告警" [email?protected]
????? 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%,请及时处理!!!" | mail -s "$IP服务器cpu告警" [email?protected]
????? 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%,请及时处理。" | mail -s "$IP服务器内存告警" [email?protected]
????? 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服务器硬盘告警" [email?protected]
????? 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服务器用户登录数告警" [email?protected]
????? else
??????
????? echo "$IP服务器当前登录用户为$users个,情况正常">>$path/performance_$(date +%Y%m%d).log
????? fi
????? ###############################################################################
??????
????? } #}}}
?
(2) 进程监控脚本 process.sh
#!/bin/bash
?
????? #!/bin/bash#---------------------------------------------------------------------------------
????? # 说明,Linux服务器--进程监控脚本,网址来源:http://bbs.51cto.com/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服务关闭告警" [email?protected]
????? 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服务器--流量监控脚本,网址来源:http://bbs.51cto.com/thread-937759-1.html
????? # 主要监控: 流量监控
????? # 生成的流量监控日志
????? # 2017.06.25 djp
????? #---------------------------------------------------------------------------------
??????
????? 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
#!/bin/bash
????? #---------------------------------------------------------------------------------
????? # 说明,Linux服务器--流量分析脚本,网址来源:http://bbs.51cto.com/thread-937759-1.html
????? # 主要监控: 流量分析
????? # 生成的流量分析日志
????? # 2017.06.25 djp
????? #---------------------------------------------------------------------------------
??????
????? path=‘/tmp/monitor/network‘
????? mkdir -p $path
??????
????? 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 < $path/network_$(date +%Y%m%d).log
????? echo "最高上传速度为 $MAX_TX kb/s at $(date +%Y%m%d)">>$path/tongji.log
??????
????? echo "最高下载速度为 $MAX_RX kb/s at $(date +%Y%m%d)">>$path/tongji.log
????? ###############################################################################

4.使用Zabbix监控
Zabbix将以上监控都集中在一起,可以实时数据,图形展显,详见Zabbix监控
---------------------
作者:openbox2008
来源:CSDN
原文:https://blog.csdn.net/openbox2008/article/details/79957081 版权声明:本文为博主原创文章,转载请附上博文链接!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读