PUPPET-通過配置服務器對多臺服務器巡檢

PUPPET-通過配置服務器對多臺服務器巡檢


2013年馬上就要過去,新年即將來臨,爲了可以過一個安穩的新年,年前要對公司生產服務器做一次全面巡檢,記錄每臺服務器狀態,確保不會出現故障。


目標分析:


操作方向:

1、使用腳本來收集各個服務器狀態

2、通過ftp統一收集

3、通過puppet配置服務器進行管理部署

4、人工分析數據



一、服務器巡檢腳本

腳本巡檢資源:

1、操作系統檢查

a) 操作系統版本

b) 網絡配置

c) 任務計劃列表

2、性能檢查

a) 系統負載

b) 內存使用狀況

c) 磁盤空間

d) 進程資源

3、安全檢查

a) 當前登錄用戶

b) 系統運行時間

c) 系統賬戶檢查

d) 系統開放端口

e) 系統服務狀態

f) 防火牆列表

4、硬件檢查

a) 內存型號、插槽數量

b) 網卡型號、網卡驅動

c) Cpu型號、數量及主頻


各個監控項按照統一格式輸出,篩選出重要信息,剔除多餘信息。並通過腳本生成報告自動上傳ftp,文件名安裝<時間+主機名>.doc結尾。


腳本詳解:

#!/bin/bash


#變量需先聲明才能使用


shopt -s -o nounset



date1=`date +%Y%m%d`



# mkdir Directory


#判斷/mnt/backup下是否存在已當前日期的文件夾,如果沒有則創建,有則跳過


if [ -e /mnt/backup/$date1 ] ; then


   :


else


  mkdir -p /mnt/backup/$date1


fi



# Hostname


#定義主機名,生成文件調用



HostCmd="/bin/hostname"


HostName=$($HostCmd)


Name=${HostName%%.*}



# Operatig system checks


#檢測系統當前版本


# Version



 check_version (){


echo "Sytem Version:"


kernel=`uname -a | awk '{print $3}'`


hostname=`uname -a | awk '{print $2}'`


bit=`uname  -a | awk '{print $14}'`


echo "System Kernel:" $kernel


echo "System Hostname:" $hostname


#判斷當前系統版本位數


if [ $bit = x86_64 ]; then


echo "System Bit: 64."


else


echo "System Bit: 32."


fi


 }



# Network



#定義網絡配置,截取ip地址,mac地址,rxtx信息,忽略其他信息


 check_network () {


echo "System Network:"


ip_addr=`ifconfig -a | grep eth0 -C 8 | grep inet | awk '{print $2}' | awk -F: '{print $2}'`


ip_mac=`ifconfig -a | grep eth0 | awk '{print $5}'`


ip_rx_packets=`ifconfig  | grep eth0 -C 8 | grep "RX packets"`


ip_tx_packets=`ifconfig  | grep eth0 -C 8 | grep "TX packets"`


ip_rx_bytes=`ifconfig  | grep eth0 -C 8 | grep "RX bytes"`


echo "IP_add:" $ip_addr


echo "IP_MAC:" $ip_mac


echo "IP_RX:" $ip_rx_packets


echo "IP_TX:" $ip_tx_packets


echo "IP_RX_Bytes:" $ip_rx_bytes


 }


# Crontab check


#檢測任務計劃


check_crontab () {


echo "Crontab check:"


crontab -l


 }


# Performance Check



# Average system load


#檢測負載,檢查cpu數量,型號及主頻


 check_load () {



echo "Average system load:"


W="/usr/bin/w"


show_loading=$($W | head -1)


L1=$(echo $show_loading | awk '{print $10}')


L5=$(echo $show_loading | awk '{print $11}')


L15=$(echo $show_loading | awk '{print $12}')


L1=${L1%,*}


L5=${L5%,*}


cpu_sl=`cat /proc/cpuinfo | grep processor | wc -l`


cpu_xh=`cat /proc/cpuinfo  | grep name | cut -f2 -d: | uniq -c`


cpu_zp=`cat /proc/cpuinfo  | grep name | cut -f2 -d: | uniq -c | awk '{print $8}'`


echo "1515分鐘系統的平均負載爲:" $L1 $L5 $L15


echo "CPU 數量爲:" $cpu_sl


echo "CPU 型號:"  $cpu_xh


echo "CPU主頻:"  $cpu_zp


  }



# Memory usage


#檢查內存,列出總內存,可用內存及佔用百分比,檢查內存插槽


 check_memory () {


Memslot=`dmidecode | grep -A16 "Memory Device$"  | grep Memory | wc -l`


echo "Memory usage:"


MemFree=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $3}'`


MemBuffers=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $5}'`


MemCached=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $6}'`


MemTotal=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $1}'`


#計算可用內存


MemSY=`expr $MemFree \+ $MemBuffers \+ $MemCached`


#計算剩餘內存百分比%


MemB=`awk 'BEGIN{printf "%.2f%\n",'$MemSY/$MemTotal\*100'}'`


echo "服務器共有" $Memslot "插槽","系統總內存爲(M)" $MemTotal ",可用內存爲(M)"$MemSY ",剩餘百分比爲:" $MemB


 }



 # Disk Space



#檢查分區狀態


check_disk () {


echo "Disk Space:"


df -h


}



 # Process Resource


#檢查ps進程,並排除ttypts信息


 check_process () {


echo "Process Resource:"


ps -ef  | grep -v pts | grep -v tty*


 }



# Security check



#檢查當前登錄用戶


 # Currently logged in user



  check_who () {


echo "Currently logged in user"


who


  }



 # System uptime


#檢查系統運行時間


 check_uptime () {


echo "System uptime:"


u=`uptime | awk '{print $3}'`


echo "系統運行時間爲:$u "


 }



 # System Account check


#檢查系統賬戶,剔除nologin用戶


 check_account () {


echo "Sytem Account check:"


cat /etc/passwd | grep -v nologin


  }



 # System open ports



#檢查服務器開放端口


 check_ports () {


echo "Sytem open ports:"


netstat -an | grep LISTEN


 }



 # System chkconfig



#檢查chkconfig,只列出終端3啓用狀態的。



 check_chkconfig  () {


echo "Sytem chkconfig:"


chkconfig --list | grep 3:啓用


 }



 # System Iptables



#檢查防火牆配置



  check_iptables () {


echo "System Iptables:"


iptables -L


 }


for i in check_version check_network check_crontab check_load check_memory check_disk check_process check_who check_uptime check_account check_ports check_chkconfig check_iptables


do


echo "--------------------------------------------------------------------------------------------------------------------"


$i


done > /mnt/backup/$date1/$date1.$HostName.doc  #生成報告


二、ftp文件服務器

ftp搭建採用虛擬用戶方式,具體安裝步驟本節略,可查看之前文章,傳送門:

http://haolulu.blog.51cto.com/3164472/579006


腳本最後再加入ftp自動上傳功能

# ftp upload



ftpaddr="10.172.172.17"


ftpuser="ftpbuser"


ftppass="ftppass"


ftp -n <<EOF


open $ftpaddr


user $ftpuser $ftppass


binary


cd inreport


mkdir $date1


put /mnt/backup/$date1/$date1.$HostName.doc


close


bye


EOF


三、配置服務器管理

實現功能:

1、通過配置服務管理腳本並推送至客戶端

2、控制腳本執行,只再需要執行的時候執行


查看目錄結構:

自己手動創建目錄及文件

inspection/


|-- file


|   |-- check_CentOs.sh


|   `-- tmp.txt


|-- manifests


|   |-- init.pp


|   `-- install.pp


`-- templates


注:


File目錄中


check_CentOs.sh 服務器巡檢腳本


Tmp.txt控制腳本執行文件



Manifests目錄內容



Init.pp


class inspection {


       include inspection::install


}


Install.pp


class inspection::install {


       file {"/usr/local/src/check_CentOs.sh":


       group => root,


       owner => root,


       mode => 755,


       source => "puppet:///modules/snmpd/check_CentOs.sh",


               }


       file {"/mnt/backup/tmp.txt":


       group => root,


       owner => root,


       mode => 755,


       source => "puppet:///modules/snmpd/tmp.txt",


       }


       exec {


       "Patrol script execution:":


       onlyif => ["test `du /mnt/backup/tmp.txt | cut -f1` -gt 1 "],


       command => "/bin/sh /usr/local/src/check_CentOs.sh",


       user => "root",


       path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"],



       }


}


注:

onlyif => ["test `du /mnt/backup/tmp.txt | cut -f1` -gt 1 "]onlyif參數判斷tmp.txt文件大小是否大於1,當文件內容大於1時才執行腳本,負責跳過exec

 Tmp.txt通過這個文件來控制是否執行腳本,當向tmp中添加內容值爲1時,配置服務器客戶端

四、人工報告分析


安排人員分析報告,並提取危險信息。加以處理


五、效果截圖


巡檢生成效果圖:

184229268.png


ftp上傳效果:


184244149.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章