环境检查脚本
环境检查脚本:
根据提供的配置文件,读取本地的服务配置是否达标,以及是否能与远程的服务器实现端口的通信:
脚本:
#!/bin/bash #date:2017-08-25 #注意当前目录下要有env_list.conf配置文件 #system info system_info() { echo "*********************************************************************************" echo "system info:" echo echo "System-release : `cat /etc/redhat-release`" echo "Kernel-release : `uname -a|awk '{print $1,$3}'`" echo "Server-Model : `dmidecode | grep "Product Name:"|sed -n '1p'|awk -F': ' '{print $2}'`" } #CPU info cpu_info() { echo "**********************************************************************************" local_cpu_core=`cat /proc/cpuinfo | grep "processor" | sort -u| wc -l ` if [[ $1 -gt $local_cpu_core ]]; then echo -e "\033[31m WARRING,local CPU logic core is $local_cpu_core\033[0m" else echo -e "\033[32m OK,The local CPU logic core is $local_cpu_core\033[0m" fi } #memory info mem_info() { echo "**********************************************************************************" max_check_total_memory=`echo $1|sed -e 's#G##g' -e 's#g##g' -e 's#M##g' -e 's#m##g'` min_check_total_memory=`echo "$max_check_total_memory * 0.9"|bc` #获取文件里面设置的内存的最小值,然后和本地的内存比较,小于本地内存就是正常的。 local_total_memory=`free -h|grep Mem|awk '{print $2}'|sed -e 's#G##' -e 's#G##'` if [ `expr $local_total_memory \> $min_check_total_memory` -eq 0 ]; then echo -e "\033[31m WARRING,The local total memory is ${local_total_memory}G\033[0m" else echo -e "\033[32m OK,The local total memory is ${local_total_memory}G\033[0m" fi } #disk and partitions partition_info() { echo "**********************************************************************************" echo df -h echo #分区(单位为M) ezdata_test=`df -h | grep '/ezdata'| awk -v OFS=',' '{print $6,$2}'` ezdata=$ezdata_test,$check_data_store,ezdata var_test=`df -h | grep '/var'| awk -v OFS=',' '{print $6,$2}'` var=$var_test,$check_log_store,var opt_test=`df -h | grep '/opt'| awk -v OFS=',' '{print $6,$2}'` opt=$opt_test,$check_package_store,opt gen_test=`df -h | grep -w '/'| awk -v OFS=',' '{print $6,$2}'` gen=$gen_test,$check_gen_store,gen array=($ezdata $var $opt $gen) # 把需要检查的分区加入数组,每个元素的格式为:/,26G,10G,gen /是从df里面取出来,26G是本地/的存储大小,10G配置文件里设置的存储大小,gen标识符,后面提示引用 for data in ${array[@]};do num=`echo $data|awk -F ',' '{print NF}'` par=`echo $data|awk -F ',' '{print $NF}'` if [[ $num -eq 3 ]]; then # 如果一个元素通过逗号拆分出来后个数等于3,说明该系统没有改分区。 echo -e "\033[31m WARRING, Partition $par does not exist\033[0m" fi if [[ $num -eq 4 ]]; then # 如果一个元素的通过逗号拆分出来后个数等于4,说明该系统有该分区。 local_size=`echo $data|awk -F ',' '{print $2}'|sed -e 's#G##g' -e 's#g##g' -e 's#M##g' -e 's#m##g'` set_size=`echo $data|awk -F ',' '{print $3}'|sed -e 's#G##g' -e 's#g##g' -e 's#M##g' -e 's#m##g'` if [[ local_size -gt set_size ]];then # 通过比较该分区存储大小和配置文件中设置的分区的存储大小是否符合要求 echo -e "\033[32m OK,$par partition is ${local_size}G,larger than ${set_size}G\033[0m" else echo -e "\033[31m WARRING, $par partition is ${local_size}G,less than ${set_size}G\033[0m" fi fi done } #check port check_port() { echo "************************checking $1*********************************" check_ip_list=$2 # 获取需要检查的IP port_list=$3 # 获取需要检查的port check_ip_array=(${check_ip_list//,/ }) # 把获取到的IP转换成数组,方便后边遍历 for check_ip in ${check_ip_array[@]};do for i in ${port_list[@]};do # 每个IP遍历所有需要检查的port # nohup timeout 5 tcpdump -i any host $check_ip -n >> check_port.log 2>&1 & # nohup timeout 5 telnet $check_ip $i >> /dev/null 2>&1 & nohup timeout 5 tcpdump -i any host $check_ip and port $i -n >> check_port.log 2>&1 & sleep 1 timeout 5 telnet $check_ip $i >> /dev/null 2>&1 sleep 5 cat check_port.log |grep ack |grep -v sackOK | grep $check_ip >> /dev/null if [[ $? -ne 0 ]]; then echo -e "\033[31m WARRING,This host can not communicate with $1($check_ip):$i\033[0m" else echo -e "\033[32m OK,This host can communicate with $1($check_ip):$i\033[0m" fi rm -rf check_port.log done echo "---$5($4) check $1($check_ip) success ---" done } four_in_one () { system_info cpu_info $check_CPU mem_info $check_memory partition_info } main () { four_in_one if [[ $server_role == 'collector server' ]]; then check_port=(9092 9999 10051 10050) check_port "transfer server" "$transfer_ip" "${check_port[*]}" $local_ip $server_role check_port=(10000 3306) check_port "analyze server" "$analyze_ip" "${check_port[*]}" $local_ip $server_role fi if [[ $server_role == 'transfer server' ]]; then check_port=(9092 9999 10050 10051) check_port "collector server" "$collector_ip" "${check_port[*]}" $local_ip $server_role check_port=(9092) check_port "analyze server" "$analyze_ip" "${check_port[*]}" $local_ip $server_role fi if [[ $server_role == 'analyze server' ]]; then check_port=(10000 3306) check_port "collector server" "$collector_ip" "${check_port[*]}" $local_ip $server_role check_port=(9092) check_port "transfer server" "$transfer_ip" "${check_port[*]}" $local_ip $server_role fi } source env_list.conf main |tee ${local_ip}_system.log
配置文件env_list.conf:
# 环境检查脚本读取的相关信息文件。 server_role='analyze server' # 服务器角色有4种选择:transfer server、collector server、analyze server、all_in_one local_ip='192.168.174.143' # 本地地址的IP check_memory=5G # 输入内存大小 check_CPU=1 # 输入CPU核数 check_data_store=10G # 输入数据分区大小 check_log_store=10G # 输入日志分区大小 check_package_store=10G # 输入安装包分区大小 check_gen_store=10G # 输入根分区大小 transfer_ip=,3.3.3.3,4.4.4192.168.174.1.4 analyze_ip=192.168.174.1,3.3.3.3,4.4.4.4 collector_ip=192.168.174.1,3.3.3.3,4.4.4.4