现在开始介绍php+mysql+shell监控系统

1、目的
此监控系统主要是通过php+mysql+shell的方式,通过shell脚本对各个机器的其各个服务进行监控,达到及时的了解其各个应用服务的状态(如果宕掉与启动),在检测应用服务宕掉时,记录在日志里与mysql数据库服务器里,同时进行服务宕掉的邮件提示,并自动启动宕掉的应用服务;在检测应该服务启动时,同时进行服务启动的邮件提示,所有的监控内容都能在php制作的web里进行浏览,同时能根据mysql里的数据,把资源监控数据视图化,在浏览数据的时候,更方便。
2、实现的机制
监控方式主要是通过shell脚本的实现,针对应用服务运行的端口进行监控,如果其端口开启,则证明此服务运行,反之则此服务没有运行。
3、监控的应用服务
监控的应用服务有:
A、应用服务器的服务监控
web:http、yu_tomcat、tomcat 共3个
交换:pas、ppas、mas、mmas、cas共5个
引擎:memcache、datastorageservice、http、dbstatserver共4个
B:应用服务器的资源监控
硬盘使用率、cpu使用率、硬件启动信息错误、i/o使用率、15分钟内的负载、内存使用率(包括内存与swap)、日志错误信息、当前用户登录数
4、已经监控的省份
目前天津、广西、贵州、海南、河北、河南、湖北、湖南、宁夏、陕西、青海、西藏、新疆、包头、甘肃、江西都已经部署完成,经过3个月的测试,没有发现问题。
5、shell监控脚本内容与解释
(1)web服务器(以甘肃web为例)
  1. #!/bin/bash
  2. #ip
  3. web_ip=$(/sbin/ifconfig eth0|grep "inet addr"|cut -d : -f 2|awk '{print $1}')
  4. ##eth0网卡的ip
  5. #name
  6. web_name=$(hostname)
  7. ##web主机名
  8. monitor_name=web
  9. ##监控的服务器是什么类型
  10. here='gansu'
  11. ##监控的省份
  12. #mysql info
  13. mysql_ip='1.1.1.1'
  14. ##数据库的ip
  15. mysql_username='root'
  16. ##数据库的用户
  17. mysql_passwd='****'
  18. #数据库的密码
  19. mysql_database='monitor'
  20. ##选择的数据库
  21. memory_table=''$here'_memory'
  22. load_table=''$here'_load'
  23. io_table=''$here'_io'
  24. hardware_table=''$here'_hardware'
  25. message_table=''$here'_message'
  26. user_table=''$here'_user'
  27. disk_table=''$here'_disk'
  28. cpu_table=''$here'_cpu'
  29. service_table=''$here'_service'
  30. ##想数据库里写入的表
  31. #date and log
  32. day="$(date +%Y%m%d)"
  33. worklog='/usr/local/monitor/logs/all_work_log'
  34. downlog='/usr/local/monitor/logs/all_down_log'
  35. ##日志与实际
  36. now="$(date +%Y-%m-%d-%T)"
  37. #web service
  38. tomcat="$(netstat -antl|grep 8080|wc -l)"
  39. web_http="$(ps -ef|grep httpd|grep -v grep|wc -l)"
  40. yz_tomcat="$(netstat -antl|grep 8081|wc -l)"
  41. ##通过端口与服务在后头的运行情况监控其运行状态
  42. #cpu service
  43. alert_cpu='80'
  44. ##cpu的报警阀值
  45. web_cpu_idle="$(top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d .)"
  46. web_cpu="$(echo 100 - $web_cpu_idle|/usr/bin/bc)"
  47. ##监控cpu的使用率
  48. #memory service
  49. alert_mem='100'
  50. ##内存的报警阀值
  51. web_mem="$(/usr/bin/free -m|grep Mem|awk '{print $4}')"
  52. web_swap="$(/usr/bin/free -m|grep Swap|awk '{print $3}')"
  53. ##memory与swap的使用率
  54. alert_swap='0'
  55. ##swap的报警阀值
  56. #memory log
  57. memory_worklog='/usr/local/monitor/logs/mem_work_log'
  58. memory_downlog='/usr/local/monitor/logs/mem_down_log'
  59. #load service
  60. cpu_count="$(grep -c 'model name' /proc/cpuinfo)"
  61. alert_load="$(echo $cpu_count/2|/usr/bin/bc)"
  62. web_load="$(uptime|awk '{print $NF}'|cut -f 1 -d .)"
  63. web_load_15="$(uptime|awk '{print $NF}')"
  64. #监控负载的使用率
  65. #load log
  66. load_worklog='/usr/local/monitor/logs/load_work_log'
  67. load_downlog='/usr/local/monitor/logs/load_down_log'
  68. #io service
  69. alert_io='80'
  70. web_io_idle_back="$(/usr/bin/iostat|awk 'NR==4{print $NF}'|cut -f 1 -d .)"
  71. web_io_idle="$(echo 100 - $web_io_idle_back|/usr/bin/bc)"
  72. ##io的使用值
  73. #io log
  74. io_worklog='/usr/local/monitor/logs/io_work_log'
  75. io_downlog='/usr/local/monitor/logs/io_down_log'
  76. #hardware service
  77. web_hardware_error="$(dmesg|grep -i error|wc -l)"
  78. web_info_error="$(dmesg|grep -i error)"
  79. ##开机启动的错误信息
  80. #hardware error log
  81. hard_worklog='/usr/local/monitor/logs/hard_work_log'
  82. hard_downlog='/usr/local/monitor/logs/hard_down_log'
  83. #message service
  84. web_message_error_count="$(awk '/"$(date +%Y%m%d)"/' /var/log/messages|grep -i error|wc -l)"
  85. web_message_error="$(awk '/"$(date +%Y%m%d)"/' /var/log/messages|grep -i error)"
  86. ##日志的错误信息
  87. #message error log
  88. message_worklog='/usr/local/monitor/logs/message_work_log'
  89. message_downlog='/usr/local/monitor/logs/message_down_log'
  90. #user service
  91. web_user_count="$(/usr/bin/who|wc -l)"
  92. web_user_info="$(/usr/bin/who)"
  93. ##当前登录的用户值
  94. #user  log
  95. user_worklog='/usr/local/monitor/logs/user_work_log'
  96. user_downlog='/usr/local/monitor/logs/user_down_log'
  97. #disk service
  98. alert_disk='80'
  99. web_disk="$(/bin/df -H|sort -k5nr|grep -vE 'Filesystem|tmpfs|cdrom'|awk '{print $5 " " $1}')"
  100. web_disk_use=$(echo $web_disk|awk '{print $1}'|cut -d '%' -f1)
  101. web_disk_partition=$(echo $web_disk|awk '{print $2}')
  102. #硬盘使用率
  103. #disk log
  104. disk_worklog='/usr/local/monitor/logs/disk_work_log'
  105. disk_downlog='/usr/local/monitor/logs/disk_down_log'
  106. #cpu log
  107. cpu_worklog='/usr/local/monitor/logs/cpu_work_log'
  108. cpu_downlog='/usr/local/monitor/logs/cpu_down_log'
  109. #notification mail
  110. email='denglei@ctfo.com'
  111. ##报警的接收人
  112. #monitor
  113. if [ ! -d "$loghere" ];then
  114. mkdir $loghere
  115. fi
  116. #check web service
  117. if [ $web_http -ge 1 ];then
  118. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: http Monitor_Server: $monitor_name is working" >> $worklog-$day
  119. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','web_http','working',now())";
  120. else
  121. /etc/init.d/httpd start
  122. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: http Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service:  http  was a problem" $email
  123. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: http Monitor_Server: $montior_name is down" >> $downlog-$day
  124. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','web_http','downing',now())";
  125. fi
  126. if [ $tomcat -ge 1 ];then
  127. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: tomcat Monitor_Server: $monitor_name is working" >> $worklog-$day
  128. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','tomcat','working',now())";
  129. else
  130. /usr/local/monitor/shell/web_tomcat.sh
  131. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: tomcat Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service:  tomcat  was a problem" $email
  132. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: tomcat Monitor_Server: $montior_name is down" >> $downlog-$day
  133. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','tomcat','downing',now())";
  134. fi
  135. if [ $yz_tomcat -ge 1 ];then
  136. echo "$now ShengFen: $here Server: $web_name Service: Ip: $web_ip yz_tomcat Monitor_Server: $monitor_name is working" >> $worklog-$day
  137. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','yz_tomcat','working',now())";
  138. else
  139. /usr/local/monitor/shell/web_yz_tomcat.sh
  140. echo "$now ShengFen: $here Server: $web_name Service: Ip: $web_ip yz_tomcat Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service:  yz_tomcat  was a problem" $email
  141. echo "$now ShengFen: $here Server: $web_name Service: Ip: $web_ip yz_tomcat Monitor_Server: $montior_name is down" >> $downlog-$day
  142. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$web_name','$web_ip','$monitor_name','yz_tomcat','downing',now())";
  143. fi
  144. #check cpu_idle
  145. if [ $web_cpu -ge $alert_cpu ];then
  146. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $web_cpu"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: cpu_use  was Exceed Threshold value: 80%" $email
  147. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $web_cpu" >> $cpu_downlog-$day
  148. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $cpu_table values ('','$here','$web_name','$web_ip','$monitor_name','cpu_use','$alert_cpu','$web_cpu','abnormal',now())";
  149. else
  150. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $web_cpu" >> $cpu_worklog-$day
  151. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $cpu_table values ('','$here','$web_name','$web_ip','$monitor_name','cpu_use','$alert_cpu','$web_cpu','normal',now())";
  152. fi
  153. #check memory
  154. if [ $web_mem -le $alert_mem ];then
  155. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: memory Monitor_Server: $monitor_name Free_mem: $web_mem"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: memory  was Exceed Threshold value" $email
  156. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: memory Monitor_Server: $monitor_name Free_mem: $web_mem" >> $memory_downlog-$day
  157. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$web_name','$web_ip','$monitor_name','memory','$alert_mem','$web_mem','abnormal',now())";
  158. else
  159. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: memory Monitor_Server: $monitor_name Free_mem: $web_mem" >> $memory_worklog-$day
  160. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$web_name','$web_ip','$monitor_name','memory','$alert_mem','$web_mem','normal',now())";
  161. fi
  162. #check swap
  163. if [ $web_swap -gt $alert_swap ];then
  164. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: swap Monitor_Server: $monitor_name Swap_web: $web_swap"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: swap Ip: $web_ip was Exceed Threshold value" $email
  165. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: swap Monitor_Server: $monitor_name Swap_web: $web_swap" >> $memory_downlog-$day
  166. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $memory_table values ('','$here','$web_name','$web_ip','$monitor_name','swap','$alert_swap','$web_swap','abnormal',now())";
  167. else
  168. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: swap Monitor_Server: $monitor_name Swap_web: $web_swap" >> $memory_worklog-$day
  169. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$web_name','$web_ip','$monitor_name','swap','$alert_swap','$web_swap','normal',now())";
  170. fi
  171. #check load_15
  172. if [ $web_load -ge $alert_load ];then
  173. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: load_15 Monitor_Server: $monitor_name Load_use: $web_load_15"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: load_15 Ip: $web_ip was Exceed Threshold value" $email
  174. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: load_15 Monitor_Server: $monitor_name Load_use: $web_load_15" >> $load_downlog-$day
  175. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $load_table values ('','$here','$web_name','$web_ip','$monitor_name','load_15','$alert_load','$web_load_15','abnormal',now())";
  176. else
  177. echo "$now ShengFen: $here Server: $server Ip: $ip Service: load Monitor_Server: $monitor_name Load_use: $web_load_15" >> $load_worklog-$day
  178. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $load_table values ('','$here','$web_name','$web_ip','$monitor_name','load_15','$alert_load','$web_load_15','normal',now())";
  179. fi
  180. #check io_idle
  181. if [ $web_io_idle -ge $alert_io ];then
  182. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $web_io_idle"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: io_use  was Exceed Threshold value: 80%" $email
  183. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $web_io_idle" >> $io_downlog-$day
  184. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $io_table values ('','$here','$web_name','$web_ip','$monitor_name','io_use','$alert_io','$web_io_idle','abnormal',now())";
  185. else
  186. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $web_io_idle" >> $io_worklog-$day
  187. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $io_table values ('','$here','$web_name','$web_ip','$monitor_name','io_use','$alert_io','$web_io_idle','normal',now())";
  188. fi
  189. #check hareware error info
  190. if [ $web_hardware_error -gt 0 ];then
  191. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: hardware_error Monitor_Server: $monitor_name Error: $web_info_error"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: hardware_error  were some hardware imformation error" $email
  192. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: hardware_error Monitor_Server: $monitor_name Error: $web_info_error" >> $hard_downlog-$day
  193. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $hardware_table values ('','$here','$web_name','$web_ip','$monitor_name','hardware_error','0','$web_hardware_error','abnormal',now())";
  194. else
  195. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: hardware_error Monitor_Server: $monitor_name Error: Nothing" >> $hard_worklog-$day
  196. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $hardware_table values ('','$here','$web_name','$web_ip','$monitor_name','hardware_error','0','$web_hardware_error','normal',now())";
  197. fi
  198. #check message error
  199. if [ $web_message_error_count -ge 1 ];then
  200. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: message_error Monitor_Server: $monitor_name Message_error: $web_message_error"|/bin/mail -s "Notification ShengFen: $here Server: $web_name Service: message_error  were some message imformation error" $email
  201. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: message_error Monitor_Server: $monitor_name Message_error: $web_message_error" >> $message_downlog-$day
  202. /usr/bin/mysql-h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $message_table values ('','$here','$web_name','$web_ip','$monitor_name','message_error','1','$web_message_error_count','abnormal',now())";
  203. else
  204. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: message_error Monitor_Server: $monitor_name Message_error: Nothing" >> $message_worklog-$day
  205. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $message_table values ('','$here','$web_name','$web_ip','$monitor_name','message_error','1','$web_message_error_count','normal',now())";
  206. fi
  207. #check user
  208. if [ $web_user_count -ge 3 ];then
  209. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: user Monitor_Server: $monitor_name User: $web_user_info"|/bin/mail -s "Notification ShengFen: $here Server: $web_name  Service: user  was Exceed Threshold value: 3" $email
  210. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: user Monitor_Server: $monitor_name User: $web_user_info" >> $user_downlog-$day
  211. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $user_table values ('','$here','$web_name','$web_ip','$monitor_name','user','3','$web_user_count','abnormal',now())";
  212. else
  213. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: user Monitor_Server: $monitor_name User: normal" >> $user_worklog-$day
  214. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $user_table values ('','$here','$web_name','$web_ip','$monitor_name','user','3','$web_user_count','normal',now())";
  215. fi
  216. #check disk
  217. if [ $web_disk_use -ge $alert_disk ];then
  218. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $web_disk_partition ($web_disk_use%)"|/bin/mail -s "Warning!!! $here Server: $web_name Service: disk_use  was Exceed Threshold value : $alert_disk% " $email
  219. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $web_disk_partion ($web_disk_use%)" >> $disk_downlog-$day
  220. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $disk_table values ('','$here','$web_name','$web_ip','$monitor_name','disk_use','$alert_disk','$web_disk_partition','$web_disk_use','abnormal',now())";
  221. else
  222. echo "$now ShengFen: $here Server: $web_name Ip: $web_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $web_disk_partition ($web_disk_use%)" >> $disk_worklog-$day
  223. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $disk_table values ('','$here','$web_name','$web_ip','$monitor_name','disk_use','$alert_disk','$web_disk_partition','$web_disk_use','normal',now())";
  224. fi

(2)交换服务器(以甘肃交换为例,解释内容参照甘肃web)
  1. #!/bin/bash
  2. #ip
  3. jh_ip=$(/sbin/ifconfig eth0|grep "inet addr"|cut -d : -f 2|awk '{print $1}')
  4. #name
  5. jh_name=$(hostname)
  6. monitor_name=jiaohuan
  7. here='gansu'
  8. #mysql info
  9. mysql_ip='1.1.1.1'
  10. mysql_username='root'
  11. mysql_passwd='****'
  12. mysql_database='monitor'
  13. memory_table=''$here'_memory'
  14. load_table=''$here'_load'
  15. io_table=''$here'_io'
  16. hardware_table=''$here'_hardware'
  17. message_table=''$here'_message'
  18. user_table=''$here'_user'
  19. disk_table=''$here'_disk'
  20. cpu_table=''$here'_cpu'
  21. service_table=''$here'_service'
  22. #date and log
  23. day="$(date +%Y%m%d)"
  24. worklog='/usr/local/monitor/logs/all_work_log'
  25. downlog='/usr/local/monitor/logs/all_down_log'
  26. now="$(date +%Y-%m-%d-%T)"
  27. loghere='/usr/local/monitor/logs'
  28. #jiaohuan service
  29. pas="$(ps -ef|grep pas|grep -v grep|grep -v ppas|wc -l)"
  30. ppas="$(ps -ef|grep ppas|grep -v grep|wc -l)"
  31. cas="$(ps -ef|grep cas|grep -v grep|wc -l)"
  32. mas="$(ps -ef|grep mas|grep -v grep|grep -v mmas|wc -l)"
  33. mmas="$(ps -ef|grep mmas|grep -v grep|wc -l)"
  34. #cpu service
  35. alert_cpu='80'
  36. jh_cpu_idle="$(top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d .)"
  37. jh_cpu="$(echo 100 - $jh_cpu_idle|/usr/bin/bc)"
  38. #memory service
  39. alert_mem='100'
  40. jh_mem="$(/usr/bin/free -m|grep Mem|awk '{print $4}')"
  41. jh_swap="$(/usr/bin/free -m|grep Swap|awk '{print $3}')"
  42. alert_swap='0'
  43. #memory log
  44. memory_worklog='/usr/local/monitor/logs/mem_work_log'
  45. memory_downlog='/usr/local/monitor/logs/mem_down_log'
  46. #load service
  47. cpu_count="$(grep -c 'model name' /proc/cpuinfo)"
  48. alert_load="$(echo $cpu_count/2|/usr/bin/bc)"
  49. jh_load="$(uptime|awk '{print $NF}'|cut -f 1 -d .)"
  50. jh_load_15="$(uptime|awk '{print $NF}')"
  51. #load log
  52. load_worklog='/usr/local/monitor/logs/load_work_log'
  53. load_downlog='/usr/local/monitor/logs/load_down_log'
  54. #io service
  55. alert_io='80'
  56. jh_io_idle_back="$(/usr/bin/iostat|awk 'NR==4{print $NF}'|cut -f 1 -d .)"
  57. jh_io_idle="$(echo 100 - $jh_io_idle_back|/usr/bin/bc)"
  58. #io log
  59. io_worklog='/usr/local/monitor/logs/io_work_log'
  60. io_downlog='/usr/local/monitor/logs/io_down_log'
  61. #hardware service
  62. jh_hardware_error="$(dmesg|grep -i error|wc -l)"
  63. jh_info_error="$(dmesg|grep -i error)"
  64. #hardware error log
  65. hard_worklog='/usr/local/monitor/logs/hard_work_log'
  66. hard_downlog='/usr/local/monitor/logs/hard_down_log'
  67. #message service
  68. jh_message_error_count="$(awk '/"$(date +%Y%m%d)"/' /var/log/messages|grep -i error|wc -l)"
  69. jh_message_error="$(awk '/"$(date +%Y%m%d)"/' /var/log/messages|grep -i error)"
  70. #message error log
  71. message_worklog='/usr/local/monitor/logs/message_work_log'
  72. message_downlog='/usr/local/monitor/logs/message_down_log'
  73. #user service
  74. jh_user_count="$(/usr/bin/who|wc -l)"
  75. jh_user_info="$(/usr/bin/who)"
  76. #user  log
  77. user_worklog='/usr/local/monitor/logs/user_work_log'
  78. user_downlog='/usr/local/monitor/logs/user_down_log'
  79. #disk service
  80. alert_disk='80'
  81. jh_disk="$(/bin/df -H|sort -k5nr|grep -vE 'Filesystem|tmpfs|cdrom'|awk '{print $5 " " $1}')"
  82. jh_disk_use=$(echo $jh_disk|awk '{print $1}'|cut -d '%' -f1)
  83. jh_disk_partition=$(echo $jh_disk|awk '{print $2}')
  84. #disk log
  85. disk_worklog='/usr/local/monitor/logs/disk_work_log'
  86. disk_downlog='/usr/local/monitor/logs/disk_down_log'
  87. #cpu log
  88. cpu_worklog='/usr/local/monitor/logs/cpu_work_log'
  89. cpu_downlog='/usr/local/monitor/logs/cpu_down_log'
  90. #notification mail
  91. email='denglei@ctfo.com'
  92. #monitor
  93. if [ ! -d "$loghere" ];then
  94. mkdir $loghere
  95. fi
  96. #monitor
  97. #jiaohuan check
  98. if [ $pas -ge 1 ];then
  99. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: pas Monitor_Server: $monitor_name is working" >> $worklog-$day
  100. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','pas','working',now())";
  101. else
  102. /usr/local/lbs/bin4.0.7.7/pas -daemon
  103. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: pas Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service:  pas  was a problem" $email
  104. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: pas Monitor_Server: $montior_name is down" >> $downlog-$day
  105. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','pas','downing',now())";
  106. fi
  107. if [ $ppas -ge 1 ];then
  108. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: ppas Monitor_Server: $monitor_name is working" >> $worklog-$day
  109. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','ppas','working',now())";
  110. else
  111. /usr/local/lbs/bin4.0.7.7/ppas -daemon
  112. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: ppas Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service:  ppas  was a problem" $email
  113. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: ppas Monitor_Server: $montior_name is down" >> $downlog-$day
  114. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','ppas','downing',now())";
  115. fi
  116. if [ $mas -ge 1 ];then
  117. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mas Monitor_Server: $monitor_name is working" >> $worklog-$day
  118. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','mas','working',now())";
  119. else
  120. /usr/local/lbs/bin4.0.7.7/mas -daemon
  121. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mas Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service:  mas  was a problem" $email
  122. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mas Monitor_Server: $montior_name is down" >> $downlog-$day
  123. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','mas','downing',now())";
  124. fi
  125. if [ $mmas -ge 1 ];then
  126. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mmas Monitor_Server: $monitor_name is working" >> $worklog-$day
  127. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','mmas','working',now())";
  128. else
  129. /usr/local/lbs/bin4.0.7.7/mmas -daemon
  130. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mmas Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service:  mmas  was a problem" $email
  131. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: mmas Monitor_Server: $montior_name is down" >> $downlog-$day
  132. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','mmas','downing',now())";
  133. fi
  134. if [ $cas -ge 1 ];then
  135. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cas Monitor_Server: $monitor_name is working" >> $worklog-$day
  136. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','cas','working',now())";
  137. else
  138. /usr/local/lbs/bin4.0.7.7/cas -daemon
  139. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cas Monitor_Server: $monitor_name is down"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service:  cas  was a problem" $email
  140. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cas Monitor_Server: $montior_name is down" >> $downlog-$day
  141. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $service_table values ('','$here','$jh_name','$jh_ip','$monitor_name','cas','downing',now())";
  142. fi
  143. #check cpu_idle
  144. if [ $jh_cpu -ge $alert_cpu ];then
  145. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $jh_cpu"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: cpu_use  was Exceed Threshold value: 80%" $email
  146. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $jh_cpu" >> $cpu_downlog-$day
  147. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $cpu_table values ('','$here','$jh_name','$jh_ip','$monitor_name','cpu_use','$alert_cpu','$jh_cpu','abnormal',now())";
  148. else
  149. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: cpu_idle Monitor_Server: $monitor_name Cpu_use: $jh_cpu" >> $cpu_worklog-$day
  150. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $cpu_table values ('','$here','$jh_name','$jh_ip','$monitor_name','cpu_use','$alert_cpu','$jh_cpu','normal',now())";
  151. fi
  152. #check memory
  153. if [ $jh_mem -le $alert_mem ];then
  154. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: memory Monitor_Server: $monitor_name Free_mem: $jh_mem"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: memory  was Exceed Threshold value" $email
  155. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: memory Monitor_Server: $monitor_name Free_mem: $jh_mem" >> $memory_downlog-$day
  156. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$jh_name','$jh_ip','$monitor_name','memory','$alert_mem','$jh_mem','abnormal',now())";
  157. else
  158. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: memory Monitor_Server: $monitor_name Free_mem: $jh_mem" >> $memory_worklog-$day
  159. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$jh_name','$jh_ip','$monitor_name','memory','$alert_mem','$jh_mem','normal',now())";
  160. fi
  161. #check swap
  162. if [ $jh_swap -gt $alert_swap ];then
  163. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: swap Monitor_Server: $monitor_name Swap_jh: $jh_swap"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: swap Ip: $jh_ip was Exceed Threshold value" $email
  164. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: swap Monitor_Server: $monitor_name Swap_jh: $jh_swap" >> $memory_downlog-$day
  165. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $memory_table values ('','$here','$jh_name','$jh_ip','$monitor_name','swap','$alert_swap','$jh_swap','abnormal',now())";
  166. else
  167. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: swap Monitor_Server: $monitor_name Swap_jh: $jh_swap" >> $memory_worklog-$day
  168. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $memory_table values ('','$here','$jh_name','$jh_ip','$monitor_name','swap','$alert_swap','$jh_swap','normal',now())";
  169. fi
  170. #check load_15
  171. if [ $jh_load -ge $alert_load ];then
  172. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: load_15 Monitor_Server: $monitor_name Load_use: $jh_load_15"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: load_15 Ip: $jh_ip was Exceed Threshold value" $email
  173. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: load_15 Monitor_Server: $monitor_name Load_use: $jh_load_15" >> $load_downlog-$day
  174. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $load_table values ('','$here','$jh_name','$jh_ip','$monitor_name','load_15','$alert_load','$jh_load_15','abnormal',now())";
  175. else
  176. echo "$now ShengFen: $here Server: $server Ip: $ip Service: load Monitor_Server: $monitor_name Load_use: $jh_load_15" >> $load_worklog-$day
  177. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $load_table values ('','$here','$jh_name','$jh_ip','$monitor_name','load_15','$alert_load','$jh_load_15','normal',now())";
  178. fi
  179. #check io_idle
  180. if [ $jh_io_idle -ge $alert_io ];then
  181. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $jh_io_idle"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: io_use  was Exceed Threshold value: 80%" $email
  182. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $jh_io_idle" >> $io_downlog-$day
  183. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $io_table values ('','$here','$jh_name','$jh_ip','$monitor_name','io_use','$alert_io','$jh_io_idle','abnormal',now())";
  184. else
  185. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: io_idle Monitor_Server: $monitor_name Io_use: $jh_io_idle" >> $io_worklog-$day
  186. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $io_table values ('','$here','$jh_name','$jh_ip','$monitor_name','io_use','$alert_io','$jh_io_idle','normal',now())";
  187. fi
  188. #check hareware error info
  189. if [ $jh_hardware_error -gt 0 ];then
  190. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: hardware_error Monitor_Server: $monitor_name Error: $jh_info_error"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: hardware_error  were some hardware imformation error" $email
  191. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: hardware_error Monitor_Server: $monitor_name Error: $jh_info_error" >> $hard_downlog-$day
  192. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $hardware_table values ('','$here','$jh_name','$jh_ip','$monitor_name','hardware_error','0','$jh_hardware_error','abnormal',now())";
  193. else
  194. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: hardware_error Monitor_Server: $monitor_name Error: Nothing" >> $hard_worklog-$day
  195. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $hardware_table values ('','$here','$jh_name','$jh_ip','$monitor_name','hardware_error','0','$jh_hardware_error','normal',now())";
  196. fi
  197. #check message error
  198. if [ $jh_message_error_count -ge 1 ];then
  199. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: message_error Monitor_Server: $monitor_name Message_error: $jh_message_error"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name Service: message_error  were some message imformation error" $email
  200. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: message_error Monitor_Server: $monitor_name Message_error: $jh_message_error" >> $message_downlog-$day
  201. /usr/bin/mysql-h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $message_table values ('','$here','$jh_name','$jh_ip','$monitor_name','message_error','1','$jh_message_error_count','abnormal',now())";
  202. else
  203. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: message_error Monitor_Server: $monitor_name Message_error: Nothing" >> $message_worklog-$day
  204. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $message_table values ('','$here','$jh_name','$jh_ip','$monitor_name','message_error','1','$jh_message_error_count','normal',now())";
  205. fi
  206. #check user
  207. if [ $jh_user_count -ge 3 ];then
  208. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: user Monitor_Server: $monitor_name User: $jh_user_info"|/bin/mail -s "Notification ShengFen: $here Server: $jh_name  Service: user  was Exceed Threshold value: 3" $email
  209. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: user Monitor_Server: $monitor_name User: $jh_user_info" >> $user_downlog-$day
  210. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $user_table values ('','$here','$jh_name','$jh_ip','$monitor_name','user','3','$jh_user_count','abnormal',now())";
  211. else
  212. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: user Monitor_Server: $monitor_name User: normal" >> $user_worklog-$day
  213. /usr/bin/mysql  -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "insert into $user_table values ('','$here','$jh_name','$jh_ip','$monitor_name','user','3','$jh_user_count','normal',now())";
  214. fi
  215. #check disk
  216. if [ $jh_disk_use -ge $alert_disk ];then
  217. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $jh_disk_partition ($jh_disk_use%)"|/bin/mail -s "Warning!!! $here Server: $jh_name Service: disk_use  was Exceed Threshold value : $alert_disk% " $email
  218. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $jh_disk_partion ($jh_disk_use%)" >> $disk_downlog-$day
  219. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $disk_table values ('','$here','$jh_name','$jh_ip','$monitor_name','disk_use','$alert_disk','$jh_disk_partition','$jh_disk_use','abnormal',now())";
  220. else
  221. echo "$now ShengFen: $here Server: $jh_name Ip: $jh_ip Service: disk_use Monitor_Server: $monitor_name Disk_use: $jh_disk_partition ($jh_disk_use%)" >> $disk_worklog-$day
  222. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database  -e "insert into $disk_table values ('','$here','$jh_name','$jh_ip','$monitor_name','disk_use','$alert_disk','$jh_disk_partition','$jh_disk_use','normal',now())";
  223. fi

下一篇文章地址:

运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(三)

http://dl528888.blog.51cto.com/2382721/1035142

本文出自 “吟—技术交流” 博客,请务必保留此出处http://dl528888.blog.51cto.com/2382721/1035131

转载于:https://blog.51cto.com/solothisworld/1047948

运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(二)相关推荐

  1. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)

    前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没有,在我与经理的努力下,先搭建nagios+cacti监控平台,后来随着公司业务的增加,平台的功能与服务 ...

  2. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(五)

    4.监控视图 主要是通过shell脚本进行收集mysql的数据,然后同gnuplot软件进行数据视图化,然后php加载这些图片到web里显示,用到的php文件为view.php day.php.mon ...

  3. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(四)

    (5)数据库服务器(以甘肃数据库为例,脚本解释参照甘肃web) #!/bin/bash #ip db_ip=$(/sbin/ifconfig eth0|grep "inet addr&quo ...

  4. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统

    转载来自:http://dl528888.blog.51cto.com/2382721/1034992 前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没 ...

  5. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(七)

    X.create_province.sh脚本内容 #!binbash LANG="zh_CN.UTF-8" LANG=C #mysql info mysql_ip='1.1.1.1 ...

  6. php自动运维,运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(五)

    include("conn.php"); include("head.php"); include("province.php"); ?&g ...

  7. linux运维自动化脚本,linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  8. Servicehot和你说说运维自动化的那些事儿

    2019独角兽企业重金招聘Python工程师标准>>> 运维管理兜兜转转十几余载,大家的运维管理再也不是小米加步枪.人工费力拉线扛服务器的传统时代,如你所知,这些年大家张口闭口谈的都 ...

  9. 舍本求末的运维自动化技术热潮

    运维自动化是2010年开始炒得很热的一个概念,也让很多工程师.用人单位瞎激动了很久,我也跟风学过puppet和python,求职双方也经常在面试时花大量时间谈运维自动化. 但冷静下来想想,所谓自动化, ...

最新文章

  1. debian,ubuntu下安装MariaDB,并设置密码,修改端口,允许外网访问
  2. 三菱fx5u编程手册_实用分享 | 三菱FX 5U特点是什么?
  3. 详解linux的initrd
  4. 移动端怎么让底部固定_移动端排名应该怎么做?两种匹配移动端实战排名干货分享...
  5. 不联网redhat5.5安装oracle11g,redhat5.5_64位上安装oracle11gR2_步骤+问题解决
  6. Excel文件批量删除指定行或列
  7. Joplin 的思维导图 Mindmap(脑图)插件
  8. 树莓派使用USB摄像头和motion实现监控
  9. 关于一些Excel的快捷键总结
  10. linux下利用yum安装svn
  11. AD21覆铜,包地,补泪滴,有图
  12. Java的Scanner对象
  13. 安科瑞电气火灾监控系统对分散在建筑内的探测器进行遥测、遥调、遥控、遥信,方便实现监控与管理。
  14. Bt(宝塔面板)phpmyadmin打不开的解决办法
  15. 【电机】使用Simulink建立BLDC反电动势测量的简单模型
  16. 日更100天(5)每天进步一点点
  17. win10 移动文件夹和移动文件
  18. 闭环系统的零极点图判定稳定性_《自动控制原理》课后习题答案.doc
  19. 什么是SAFe? SAFe管理工具
  20. 毕业论文问卷数据怎样分析才正确?

热门文章

  1. vertica MySQL_Vertica数据库操作
  2. windows server 2012 远程连不上_CVE20201350 | Windows DNS Server远程代码执行漏洞通告
  3. 节前福利 | 三位大佬带你从客户成功、销售、市场端打造 To B 运作体系 !
  4. PPT 下载 | 神策数据朱静芸:消费者全渠道精细化运营方案
  5. 干货下载 | 评估产品增长,勿陷入“土著思维”
  6. 国际青年日,神策数据召唤优(有)质(志)青年
  7. android tv如何适配不同的平台
  8. Android动画 详解(一 补间动画)
  9. 当clear line vty 命令不起作用时
  10. 艾伟:ASP.NET MVC,深入浅出IModelBinder,在Post方式下慎用HtmlHelper