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下系统如何监控服务器硬件、操作系统、应用服务和业务的更多相关文章

  1. Linux下日志文件监控系统Logwatch的使用记录

    Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...

  2. Linux下的IO监控与分析

    Linux下的IO监控与分析 近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performan ...

  3. Linux下通过server-status监控性能

    Linux下通过server-status监控性能 前提:安装好Apache,在opt/路径下 查看Apache的工作模式 可以知道是 prefork.c模式 配置server-status 性能 进 ...

  4. Linux下系统时间函数、DST等相关问题总结(转)

    Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...

  5. Linux下Java性能监控

    Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun. ...

  6. Linux下,如何监控某个进程到底向哪个地址发起了网络调用

    Linux下,如何监控某个进程到底向哪个地址发起了网络调用 有时候,有些应用,比如idea,你发起某个操作时,其底层会去请求网络,获取一些数据. 但是不知道,请求了什么地址.举个例子,在idea中,m ...

  7. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  8. linux下系统定时任务配置----crontab(mysql定时备份)

    crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任 ...

  9. Linux下系统监控工具nmon使用

    Mongodb安装在Centos7或以上的版本,对于系统的监控方法如下: 1.从\\10.10.10.1\ShareDoc\User\Zchen\linux系统监控下下载2个工具 nmon16e_mp ...

随机推荐

  1. [数据库] windows server 2003下mysql出现10048错误的解决办法 Can't connect to MySQL server on '127.0.0.1' (10048)(抄)

    网站访问量大了的时候mysql连接数自然就多了,当超出mysql最大连接数的时候就会出现错误,当出现too many字样的错误的时候一般是因为连接数的问题,只需要修改最大连接数max_conectio ...

  2. [CQOI2009] 中位数

    不错的思维题 传送门:$>here<$ 题意:给出一个N的排列,求出其中有多少个连续子段的中位数是b 数据范围:$N \leq 100000$ $Solution$ 先考虑中位数的意义:一 ...

  3. XMLHttpRequest的使用

    XMLHttpRequest的使用 标签(空格分隔): JavaScript 前端 编程 function sendAjax() { //构造表单数据 var formData = new FormD ...

  4. Python 练习——计算1-2+3-4...+99

    # 求1-99的所有数的和 count = 1 s = 0 while count < 100: s += count count += 1 print(s) 当都为正数时,即1+2+3+... ...

  5. http验证

    read -p "输入要添加的用户名: " USERNAME read -p "输入密码: " PASSWD printf "$USERNAME:$( ...

  6. 算法-动态规划 Dynamic Programming--从菜鸟到老鸟

    算法-动态规划 Dynamic Programming--从菜鸟到老鸟      版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/u013309870/ar ...

  7. 程序人生 | 35岁以上的 iOS 程序员都到哪里去了?

    1.网上流传华为公司正在清理 34 岁以上的员工. " 中国区开始集中清理 34 + 的交付员工,...... 去向是跟海外服务部门交换今年新毕业的校招员工,也就是进新人,出旧人. 这些旧人 ...

  8. java8 日期时间解析与转换

    Instant now = Instant.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM ...

  9. H5_0003:JS禁用调试,禁用右键,监听F12事件的方法

    1,禁用调试 // 这个方法是防止恶意调试的 (function () { console["log"]("=============================== ...

  10. 通过Hack方式实现SDC中Stage配置联动刷新

    目录 问题描述 如何从外部获取下拉列表参数 如何实现根据下拉列表选项动态刷新 总结 问题描述 最近项目组准备开发一个IoT平台项目,需要使用到StreamSets DataCollector组件进行数 ...