Linux下系統如何監控服務器硬件、操做系統、應用服務和業務

1.Linux監控概述
       Linux服務器要保證系統的高可用性,須要實時瞭解到服務器的硬件、操做系統、應用服務等的運行情況,各項性能指標是否正常,須要使用各類LINUX命令。作到自動化運維就須要,將上述各項監控指標在同一個軟件中展顯出來,圖形化監控,消息報警機制,日誌檢看,資產管理等等php

2.Linux監控的對象html

2.1 硬件監控mysql

         (1)服務器:如電源,風扇,磁盤,CPU等,可使用IPMI監控,在LINUX下安裝IPMITOOLios

                 不一樣的服務器廠商都在服務器上配有遠程控制卡BMC: 如DELL(iDRAC) ,IBM (IMM) ,HP(ILO)nginx

                 LINUX下只需安裝:#yum install -y OpenIPMI ipmitool   這二個工具就能夠c++

                  IPMI命令能夠在服務器本地運行,也能夠經過網絡遠程調用,IPMI在服務器上能夠配置單獨的IP地址和訪問密碼sql

         (2)網絡設備:交換機,防火牆,路由器等,使用SNMP進行監控數據庫

                  在被監控的設備上開啓SNMP代理,到時能夠經過工具進行獲取數據,如ZABBIXapache

                    1.LINUX上安裝windows

                   #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 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索