脚本巡检,并保存为csv

    1. RED="\E[1;31m"
    2. GREEN="\E[1;32m"
    3. END="\E[0m"
    4. file_save_result=sys_info.csv
    5. server_list="nginx mysql php-fpm"
    6. web_url="10.0.0.61/status"
    7. # 结果文件重命名/格式转换----------------------------------------
    8. res_file_manage() {
    9. date=$(date +%F)
    10. [[ -f sys_info.csv ]] && {
    11. iconv -f utf8 -t gbk $file_save_result -o iconv
    12. mv gbk-$file_save_result ${date}-gbk-${file_save_result}
    13. }
    14. }
    15. # 判断机器是否可以访问公网------------------------------------------
    16. host_pubnet_check() {
    17. if_pubnet=0
    18. # -c 指定次数,-W 指定超时时间
    19. ping -c 1 -W 1 www.baidu.com &>/dev/null
    20. if [ $? -ne 0 ]; then
    21. echo -e "$RED 没有公网 $END"
    22. if_pubnet=1
    23. fi
    24. return if_pubnet
    25. }
    26. sys_basic() {
    27. name="基础指标检查"
    28. hostname=$(hostname)
    29. ip_nei=$(hostname -I)
    30. source /etc/os-release #这条也可以用awk取值 取出centos和7这样的信息
    31. kernel_version=$(uname -r) # hostnamectl uname -a
    32. lang=$(awk -F= '{print $2}' /etc/locale.conf) # 或者echo $LANG
    33. #如果函数host_pubnet_check返回值是0 则运行curl命令
    34. if host_pubnet_check; then
    35. pubnet_ip=$(curl -s ifconfig.io) # -s 不输出错误信息和进度
    36. else
    37. pubnet_ip="没有公网"
    38. fi
    39. cat >>$file_save_result <<-EOF
    40. $name,主机名,$hostname
    41. $name,ip地址,$ip_nei
    42. $name,系统,$NAME $VERSION
    43. $name,内核版本,$kernel_version
    44. $name,系统字符集与语言,$lang
    45. $name,公网ip,$pubnet_ip
    46. EOF
    47. echo -e "$GREEN $name 检查完成 $END"
    48. }
    49. # cpu信息检查---------------------------------------
    50. sys_cpu() {
    51. name="系统cpu信息"
    52. cpu_arch=$(uname -i)
    53. cpu_model=$(lscpu | grep 'Model name:' | sed -r 's#.*: +##g')
    54. cpu_num=$(lscpu | awk '/Socket/{print $2}')
    55. cpu_core=$(lscpu | awk '/^CPU\(s\)/{print $2}')
    56. cpu_idle_percent=$(top -bn1 | grep Cpu | awk -F'[, ]+' '{print $8}')
    57. cpu_user_percent=$(top -bn1 | grep Cpu | awk -F'[, ]+' '{print $2}')
    58. cpu_sys_percent=$(top -bn1 | grep Cpu | awk -F'[, ]+' '{print $4}')
    59. cpu_iowait_percent=$(top -bn1 | grep Cpu | awk -F'[, ]+' '{print $10}')
    60. load_avg=$(uptime | sed 's#^.*: ##g')
    61. cat >>$file_save_result <<-EOF
    62. $name,cpu架构,$cpu_arch
    63. $name,cpu型号,$cpu_model
    64. $name,cpu颗数,$cpu_num
    65. $name,cpu核心总数,$cpu_core
    66. $name,cpu空闲率,$cpu_idle_percent
    67. $name,cpu用户态使用率,$cpu_user_percent
    68. $name,cpu系统态使用率,$cpu_sys_percent
    69. $name,cpu io使用率,$cpu_iowait_percent
    70. $name,系统负载信息,$load_avg
    71. EOF
    72. echo -e "$GREEN $name 获取完成$END"
    73. }
    74. # 内存信息----------------------------------------------
    75. sys_mem() {
    76. name="系统内存信息"
    77. mem_total=$(free -h | awk 'NR==2{print $2}')
    78. mem_free=$(free -h | awk 'NR==2{print $NF}')
    79. mem_used=$(free -h | awk 'NR==2{print $3}')
    80. mem_free_percent=$(free | awk 'NR==2{print $NF/$2*100"%"}')
    81. #检查是否有swap
    82. if [ $(free | awk 'NR==3{print $2}') -eq 0 ]; then
    83. echo -e "$RED没有swap$END"
    84. if_has_swap=no
    85. else
    86. if_has_swap=yes
    87. fi
    88. #如果swap存在获取值
    89. [ $if_has_swap = "yes" ] && {
    90. mem_swap_total=$(free -h | awk 'NR==3{print $2}')
    91. mem_swap_used=$(free -h | awk 'NR==3{print $3}')
    92. }
    93. #如果swap存在 输出内容....
    94. #如果swap不存在
    95. if [ ${if_has_swap}x = "yes"x ]; then
    96. cat >>$file_save_result <<-EOF
    97. $name,内存大小,$mem_total
    98. $name,已用内存,$mem_used
    99. $name,剩余内存,$mem_free
    100. $name,内存空闲率,$mem_free_percent
    101. $name,是否存在swap,$if_has_swap
    102. $name,swap大小,$mem_swap_total
    103. $name,swap使用大小,$mem_swap_used
    104. EOF
    105. else
    106. cat >>$file_save_result <<-EOF
    107. $name,内存大小,$mem_total
    108. $name,已用内存,$mem_used
    109. $name,剩余内存,$mem_free
    110. $name,内存空闲率,$mem_free_percent
    111. $name,是否存在swap,$if_has_swap
    112. EOF
    113. fi
    114. echo -e "$GREEN$name 检查完成$END"
    115. }
    116. # 磁盘信息--------------------------------------------------------
    117. sys_disk() {
    118. name="磁盘信息统计"
    119. disk_count=$(fdisk -l | grep -c '/dev/[sv]d[a-z]:')
    120. disk_size=$(fdisk -l | grep '/dev/[sv]d[a-z]:' | awk '{print $2,$3,$4}')
    121. cat >>$file_save_result <<-EOF
    122. $name,磁盘数量,$disk_count
    123. $name,磁盘大小,$disk_size
    124. EOF
    125. for part in $(awk '!/swap|^$|#/{print $2}' /etc/fstab); do
    126. disk_fs_size=$(df -h $part | awk 'NR==2{print $2}')
    127. disk_fs_used_percent=$(df -h $part | awk 'NR==2{print $(NF-1)}')
    128. disk_fs_inode_used_percent=$(df -i $part | awk 'NR==2{print $(NF-1)}')
    129. cat >>$file_save_result <<-EOF
    130. $name,磁盘分区$part大小,$disk_fs_size
    131. $name,磁盘分区$part使用率,$disk_fs_used_percent
    132. $name,磁盘分区inode$part使用率,$disk_fs_inode_used_percent
    133. EOF
    134. done
    135. echo -e "$GREEN$name 统计完成$END"
    136. }
    137. # 用户信息-------------------------------------------------------------
    138. user_info() {
    139. name="系统用户信息"
    140. user_login_count=$(grep -c '/bin/bash' /etc/passwd)
    141. user_login_list=$(grep '/bin/bash' /etc/passwd | awk -F: '{print $1}')
    142. user_nologin_count=$(grep -cv '/bin/bash' /etc/passwd)
    143. cat >>$file_save_result <<-EOF
    144. $name,可登录的用户数,$user_login_count
    145. $name,可登录的用户名字,$user_login_list
    146. $name,虚拟用户数量,$user_nologin_count
    147. EOF
    148. echo -e "$GREEN$name 统计完成$END"
    149. }
    150. ###5.网络信息------------------------------------
    151. network_info() {
    152. name="网络信息"
    153. # 获取dns,或者看ifcfg-eth0
    154. net_dns=$(awk '/nameserver/{print $2}' /etc/resolv.conf)
    155. #dns 是否可用,或者ping
    156. dig +timeout=1 baidu.com &>/dev/null
    157. if [ $? -eq 0 ]; then
    158. if_dns_work=yes
    159. else
    160. if_dns_work=no
    161. fi
    162. #epel 源
    163. if [ $(yum repolist | grep -c epel) -eq 1 ]; then
    164. if_yum_epel=yes
    165. else
    166. if_yum_epel=no
    167. fi
    168. #源是否还从默认地址下载
    169. if [ $(grep -v '#' /etc/yum.repos.d/{CentOS-Base,epel}.repo | grep -c 'centos.org') -eq 0 ]; then
    170. if_yum_download_url_changed=yes
    171. else
    172. if_yum_download_url_changed=no
    173. fi
    174. cat >>$file_save_result <<-EOF
    175. $name,当前使用的DNS,$net_dns
    176. $name,dns是否可用,$if_dns_work
    177. $name,是否配置额外yum源,$if_yum_epel
    178. $name,是否优化yum下载地址,$if_yum_download_url_changed
    179. EOF
    180. echo -e "$GREEN$name 检查完成$END"
    181. }
    182. ####6.服务信息##################----------------------
    183. service_info() {
    184. name="服务信息"
    185. selinux_status=`getenforce`
    186. if [ `systemctl is-active iptables` = "active" ];then
    187. iptables_status="运行中"
    188. # iptables -nL 只有filter的规则
    189. iptables_rules=`iptalbes-save`
    190. else
    191. iptables_status="没有运行"
    192. iptables_rules="空"
    193. fi
    194. #未来可以优化,本地访问呢的端口,外部端口
    195. #统计如果端口数量为0,提示没有开放服务
    196. port_list=`ss -lntup |awk 'NR>1{print $5}' |sed 's#.*:##g'|sort |uniq |xargs`
    197. zombie_process_count=`ps aux |awk 'NR>1 && $8=="Z"' |wc -l`
    198. zombie_process_list=`ps aux |awk 'NR>1 && $8=="Z"' |xargs`
    199. stopped_process_count=`ps aux |awk 'NR>1 && $8=="T"' |wc -l`
    200. startup_server_count=`systemctl list-unit-files |grep -wc enabled `
    201. startup_server_list=`systemctl list-unit-files |grep -w enabled |awk '{print $1}' |xargs`
    202. cat >>$file_save_result<<-EOF
    203. $name,selinux是否关闭,$selinux_status
    204. $name,iptables防火墙状态,$iptables_status
    205. $name,iptables防火墙状态,$iptables_rules
    206. $name,开启的端口列表,$port_list
    207. $name,僵尸进程数量,$zombie_process_count
    208. $name,僵尸进程名字,$zombie_process_list
    209. $name,后台挂起进程数量,$stopped_process_count
    210. $name,开机自启服务数量,$startup_server_count
    211. $name,开机自启服务,$startup_server_list
    212. EOF
    213. #检查指定服务的状态
    214. for srv_name in $server_list
    215. do
    216. server_count=`ps -ef |grep -w "$srv_name"|grep -v grep|wc -l `
    217. if [ $server_count -gt 0 ];then
    218. server_status="运行中"
    219. else
    220. server_status="没有运行中"
    221. fi
    222. cat >>$file_save_result<<-EOF
    223. $name,$srv_name状态,$server_status
    224. EOF
    225. done
    226. echo -e "$GREEN $name 检查完成$END"
    227. }
    228. ###7.web#-------------------------------------------------
    229. web_info() {
    230. name="web检查"
    231. # 尝试3次 超时时间 安静模式 --不下载文件
    232. wget -t 3 -T 1 -q --spider $web_url
    233. if [ $? -eq 0 ];then
    234. # 不输出错误 指定输出内容 指定输出文件
    235. status_code=`curl -s -w "%{http_code}\n" -o /dev/null $web_url`
    236. else
    237. status_code="网站无法访问"
    238. fi
    239. port_80_conn_count=` ss -ant |awk '$4~/:80$/' |wc -l`
    240. port_80_bingfa_count=`ss -ant |awk '$4~/:80$/ && $1~/ESTAB/' |wc -l`
    241. cat >>$file_save_result<<-EOF
    242. $name,网站状态码,$status_code
    243. $name,80端口的连接数(各种状态),$port_80_conn_count
    244. $name,80端口的并发数,$port_80_bingfa_count
    245. EOF
    246. echo -e "$GREEN $name 检查完成$END"
    247. }
    248. ####8.other-------------------------------------------
    249. other_info() {
    250. name="其他检查"
    251. if_has_backup=`crontab -l|grep -c backup`
    252. if_has_ntpdate=`crontab -l|grep -c ntpdate`
    253. cat >>$file_save_result<<-EOF
    254. $name,是否有定时备份,$if_has_backup
    255. $name,是否有时间同步,$if_has_ntpdate
    256. EOF
    257. echo -e "$GREEN $name 检查完成$END"
    258. }
    259. main() {
    260. sys_basic
    261. sys_cpu
    262. sys_mem
    263. sys_disk
    264. user_info
    265. network_info
    266. service_info
    267. web_info
    268. other_info
    269. res_file_process
    270. }
    271. main