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. mybatis将传入的Integer类型的0被识别成空字符串的问题

    更改mapper文件的sql如下: <if test="interger != null"> interger= #{interger} </if> 原因: ...

  2. Vue.js 2.x笔记:服务请求axios(8)

    1. axios简介 vue2.0之后,推荐使用axios. axios官方地址:https://github.com/axios/axios 2. axios安装 npm安装: npm instal ...

  3. Spring Boot 2.x 编写 RESTful API (二) 校验

    用Spring Boot编写RESTful API 学习笔记 约束规则对子类依旧有效 groups 参数 每个约束用注解都有一个 groups 参数 可接收多个 class 类型 (必须是接口) 不声 ...

  4. qt 访问容器

    #include <iostream> #include <QString> #include <QList> #include <QListIterator ...

  5. postgresql数据库去重方法

    数据库去重有很多方法,下面列出目前理解与使用的方法 第一种 通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,m ...

  6. time、datetime、calendar

    time 1.  Python中表示时间的方式 l  时间戳 l  格式化的时间字符串 l  元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能 ...

  7. Excel中最精确的计算年龄的公式

    身份证算年龄 假设A1是身份证号所在单元格 =IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())-INT(MID(A1,7,4)))-1,IF(M ...

  8. 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found

    mac本地安装mysql后,navicat连接报错: - Authentication plugin ): image not found 解决方法 在控制台登陆后重新改下密码即可 ALTER USE ...

  9. logback输出json格式日志(包括mdc)发送到kafka

    1,pom.xml <!-- kafka --> <dependency> <groupId>com.github.danielwegener</groupI ...

  10. html css笔记zht

    第3章 Img标签 路径问题 绝对路径:从盘符(C:\)出发的路径 (C:\Users\......) linux(绝对路径以 / 开头) 相对路径:( ./ 当前文件所在的目录)( ../上一级目录 ...