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服务器系统负载严重告警" XXXX@qq.com
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.com
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.com
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.com
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.com
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服务关闭告警" XXXX@qq.com
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
版权声明:本文为博主原创文章,转载请附上博文链接!
Linux下系统如何监控服务器硬件、操作系统、应用服务和业务的更多相关文章
- Linux下日志文件监控系统Logwatch的使用记录
Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...
- Linux下的IO监控与分析
Linux下的IO监控与分析 近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performan ...
- Linux下通过server-status监控性能
Linux下通过server-status监控性能 前提:安装好Apache,在opt/路径下 查看Apache的工作模式 可以知道是 prefork.c模式 配置server-status 性能 进 ...
- Linux下系统时间函数、DST等相关问题总结(转)
Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...
- Linux下Java性能监控
Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...
- Linux下,如何监控某个进程到底向哪个地址发起了网络调用
Linux下,如何监控某个进程到底向哪个地址发起了网络调用 有时候,有些应用,比如idea,你发起某个操作时,其底层会去请求网络,获取一些数据. 但是不知道,请求了什么地址.举个例子,在idea中,m ...
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
- linux下系统定时任务配置----crontab(mysql定时备份)
crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任 ...
- Linux下系统监控工具nmon使用
Mongodb安装在Centos7或以上的版本,对于系统的监控方法如下: 1.从\\10.10.10.1\ShareDoc\User\Zchen\linux系统监控下下载2个工具 nmon16e_mp ...
随机推荐
- 内部yum仓库制作
有些安装收到网络隔离(申请一个到DMZ区的通行证很困难) 使用yum的命令工具,在有网络环境下同步我们的yum仓库,并用http服务器代理和制作repo源进行内部安装. 实操: [root@maste ...
- hdu P3374 String Problem
今天又在lyk大佬的博客学会了——最小表示法(异常激动发篇题解纪念一下说在前面:给luogu提个建议最小表示法的题太少了,都被hdu抢去了!!! 我们先看一下题目 看完后可以用一个字概括——蒙,两个字 ...
- 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)
非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习. 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟机.底层源码.分 ...
- did not finish being created even after we waited 189 seconds or 61 attempts. And its status is downloading
did not finish being created even after we waited 189 seconds or 61 attempts. And its status is down ...
- Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...
- 仿照selalchemy实现简单的mongo查询
首先这是一个很奇葩的需求,时间紧迫顺手胡写了一个,以后看看有没有好的思路 def and_(item_list): return "%s:[%s]" % ("$and&q ...
- java强引用 软引用 弱引用 虚引用
https://www.cnblogs.com/yw-ah/p/5830458.html Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Objec ...
- c#调试快捷键
F5 - 启动调试 Shift + F5 - 停止调试 F9 - 设置断点 Ctrl + Shift + F9 - 删除所有断点 F10 - 逐过程调试 F11 - 逐语句调试 Ctrl+R+E: ...
- 互相关(cross-correlation)及其在Python中的实现
互相关(cross-correlation)及其在Python中的实现 在这里我想探讨一下“互相关”中的一些概念.正如卷积有线性卷积(linear convolution)和循环卷积(circular ...
- Vue(服务端渲染)
一.前言 1.服务端渲染图解 2.简介服务端渲染 ...