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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
X、 create_province.sh脚本内容
 
  1. #!binbash  
  2. LANG="zh_CN.UTF-8" 
  3. LANG=C 
  4. #mysql info  
  5. mysql_ip='1.1.1.1' 
  6. ##数据库的ip  
  7. mysql_username='root' 
  8. ##数据库的用户名  
  9. mysql_passwd='****' 
  10. ##数据库的密码  
  11. mysql_database='monitor' 
  12. ##登录的数据库  
  13. new_here='shanxi' 
  14. ##需要添加的省份中文拼音  
  15. new_name='陕西' 
  16. ##需要添加省份的中文名称  
  17. old_here='gansu' 
  18. ##已经添加过省份中文拼音  
  19. old_name='甘肃' 
  20. ##已经添加过的省份中文名字  
  21. memory_table=''$new_here'_memory'  
  22. load_table=''$new_here'_load'  
  23. io_table=''$new_here'_io'  
  24. hardware_table=''$new_here'_hardware'  
  25. message_table=''$new_here'_message'  
  26. user_table=''$new_here'_user'  
  27. disk_table=''$new_here'_disk'  
  28. cpu_table=''$new_here'_cpu'  
  29. service_table=''$new_here'_service'  
  30. monitor_dir='/tmp/monitor' 
  31. ##当前php监控存放的位置  
  32. test_dir='/tmp/old' 
  33. ##如果想添加新省份,临时存放的位置  
  34. #create table module  
  35. create_table ()   
  36. {  
  37. #create table memory  
  38.  mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $memory_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  39. #create table load  
  40. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $load_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  41. #create table io  
  42. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $io_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  43. #create table hardware  
  44. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $hardware_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  45. #create table message  
  46. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $message_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  47. #create table user  
  48. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $user_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  49. #create table disk  
  50. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $disk_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,partition varchar(30) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  51. #create table cpu  
  52. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $cpu_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,alert int(10) not null,value int(10) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  53. #create table service  
  54. mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "create table $service_table(id int(10) not null primary key auto_increment,province varchar(30) not null,server varchar(30) not null,ip varchar(20) not null,monitor_server varchar(30) not null,service varchar(20) not null,status varchar(10) not null,date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;"  
  55. }  
  56. #create test directory  
  57. if [ ! -d "$test_dir" ];then   
  58.         /bin/mkdir $test_dir  
  59. fi   
  60. #mondiy monitor software module  
  61. mondiy_software ()  
  62. {  
  63. #copy monitor province software  
  64. /usr/bin/rsync -avz $monitor_dir/*$old_here* $test_dir/ >>/dev/null 2>&1  
  65. cd $test_dir  
  66. #rename old_name to here_name  
  67. /usr/bin/rename $old_here $new_here *  
  68. #mondiy old_here and old_name  
  69. sed -i 's/'$old_here'/'$new_here'/g' *$new_here*  
  70. sed -i 's/'$old_name'/'$new_name'/g' *$new_here*  
  71. #mondiy province.php   
  72. sed -i 's/<\/b>/ | <a href="'$new_here'.php">'$new_name'<\/a><\/b>/' $monitor_dir/province.php  
  73. #mondiy warn_province.php   
  74. sed -i 's/<\/b>/ | <a href="'$new_here'_warn.php">'$new_name'<\/a><\/b>/' $monitor_dir/warn_province.php   
  75. #mondiy view_day_province.php   
  76. sed -i 's/<\/b>/ | <a href="'$new_here'_day_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_day_province.php   
  77. #mondiy view_month_province.php  
  78. sed -i 's/<\/b>/ | <a href="'$new_here'_month_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_month_province.php  
  79. #mondiy view_year_province.php  
  80. sed -i 's/<\/b>/ | <a href="'$new_here'_year_view.php">'$new_name'<\/a><\/b>/' $monitor_dir/view_year_province.php  
  81. #copy test_dir to monitor_dir  
  82. /usr/bin/rsync -avz $test_dir/*$new_here* $monitor_dir/ >>/dev/null 2>&1  
  83. #delete test_dir file  
  84. /bin/rm -rf $test_dir/*$new_here*  
  85. }  
  86. #check table is or not exist  
  87. /usr/bin/mysql -h $mysql_ip -u$mysql_username -p$mysql_passwd $mysql_database -e "desc $io_table">>/dev/null 2>&1  
  88. if [ $? -eq 0 ];then  
  89. echo "$io_table is exist!"  
  90. else  
  91. echo "$io_table is not exist!"  
  92. echo "Do you want to create $new_here table?If you want to create $new_here table,please input:(yes|no)"  
  93. read -t 30 -p "Please input you choose:" choose  
  94. case $choose in  
  95.         yes|y)  
  96.                 echo "Now start creaet $new_here table......"  
  97.                 create_table  
  98.         echo "$new_here table crease finish!"  
  99.         echo "Now start to mondiy monitor software......"  
  100.         mondiy_software  
  101.         echo "$new_name has been added monitor software!"  
  102.                 ;;  
  103.         no|n)  
  104.                 echo "Your choose is no,so we will to exit!"  
  105.                 exit  
  106.                 ;;  
  107.         *)  
  108.                 echo "please input:(yes|no)"  
  109.                 ;;  
  110. esac  
  111. fi  
Y、数据视图化 shell脚本
每个省份都是单独的一个 shell脚本,脚本里包含各种省份以年、月、日为时间,以web、交换、引擎、备用、数据库为服务器类型,以disk、io、load、memory、user为视图化的服务。
下面是甘肃省份的数据视图化脚本,名字为 gansu.sh,运行在php程序的images文件里,使用nohup sh gansu.sh &运行
由于脚本内容非常的多,在word里超过200页,所以就不展示了,脚本我会放到最后一页的附件里。
7 、如何部署
1)、shell监控脚本部署
shell监控脚本存放到/usr/local/monitor/shell目录,给予755权限,然后再crontab里输入*/3 * * * * /usr/local/monitor/shell/脚本内容,使每3分钟轮询运行脚本。
2)mysql数据库部署
可以使用 create_database.sh脚本进行部署,也可以使用create_province.sh脚本部署。
3)php程序部署
先把 php程序部署到服务器里,然后添加省份的时候,使用create_province.sh来进行添加,方法为:
1、使用 sh create_province.sh运行脚本
2、如果添加脚本在数据库里数据库表存在,就会出现以下情况

如果不存在

你可以输入 yes或no来选择是否创建数据库表与进行添加相应省份的php文件(注意只有10秒钟的等待时间,为了节省服务器资源,我使用了read -n参数)
输入完 yes后,结果如下

可以看到数据库表创建完成, php监控的省份添加完成
之后你在 web里就能直接观看添加省份的监控
添加省份的数据视图化的 shell文件,可以使用create_gnuplot.sh来进行添加,内容如下
 
  1. #!/bin/bash  
  2. old_dir='/tmp/old_dir' 
  3. ##当前已经存在的数据实体化脚本目录  
  4. new_dir='/tmp/new_dir' 
  5. ##临时存放省份的数据实体化脚本目录  
  6. if [ ! -d "$new_dir" ];then  
  7.         mkdir $new_dir  
  8. fi  
  9. for i in gansu tianjin guangxi guizhou hainan hebei hunan qinghai xinjiang henan xizang baotou hubei jiangxi ningxia shanxi  
  10. ##在这里输入你想添加省份的中午拼音  
  11. do  
  12. ls $i.sh>>/dev/null 2>&1  
  13. if  [ $? -eq 0 ];then  
  14.         echo "$i.sh is exist!"  
  15. else  
  16.         echo "$i.sh is not exist!"  
  17.         echo "Start to create $i.sh..."  
  18. /usr/bin/rsync -avz $old_dir/gansu.sh $new_dir/$i.sh>>/dev/null 2>&1  
  19. sed -i 's/gansu/'$i'/g' $new_dir/$i.sh  
  20. /usr/bin/rsync -avz $new_dir/$i.sh $old_dir/$i.sh>>/dev/null 2>&1  
  21. fi  
  22. done  
8 、维护与升级
1 、维护
        由于采用了时间方法的日志分钟,每3分钟检测一次 ,所以日常维护非常的方便,只要各位在目录的logs里,查看到有当天日志文件产生,在查看当天日志文件是否为每3分钟检测一次,如果满足上述条件,则此脚本正常运行。
2 、升级
        在升级的时候,为了避免部署新的程序时监控系统检测不到相应的应用服务,而且还收到了服务宕掉的邮件提示,各位在部署新程序时,应在相应用户里(部署监控系统crontab -e所在的用户)里,在监控系统自动启动检测的那一行里,在前面加上#,例如,在交换服务器里部署新的程序,需要在root用户下,输入crontab -e,然后在 */3 * * * * /usr/local/monitor/shell/ 监控脚本内容的最前面,加上#,最后的结果为#*/3 * * * * /usr/local/monitor/shell/监控脚本。
9 、完整监控系统页面展示
1)shell部分
各省都有各自的 shell监控脚本,我以甘肃web为例

2)mysql数据库部分
我截图所有 mysql数据表

3)php程序部分
由于在首页里已经有了php界面展示,所以现在就不展示了。
现在这个php+mysql+shell已经成功的对生产平台监控了3个月,符合我之前的监控要求,能节省我更多的时间去做更多有用的事,现在查看平台也不需要在进入后台一个一个的查看了,可以查看各省的监控详情与监控视图,更方便的了解平台应用服务与资源的运行情况,希望我这个监控系统能对大家有更好的启发,如果您有疑问或者好的观点,希望您能留言给我,谢谢!


 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1035335,如需转载请自行联系原作者



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
8天前
|
运维 监控 大数据
高效运维管理:提升系统稳定性的策略与实践
在当今信息技术飞速发展的时代,运维管理作为保障系统稳定运行的关键环节,其重要性不言而喻。本文将深入探讨如何通过优化运维流程、引入自动化工具和建立完善的监控体系等策略,来有效提升系统的稳定性。同时,结合具体实践案例,分析这些策略在实际工作中的应用效果,为运维人员提供有益的参考和启示。
41 6
|
7天前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
21 2
|
11天前
|
运维 负载均衡 监控
提升系统性能:高效运维的秘密武器——负载均衡技术
在当今数字化时代,系统的高可用性和高性能成为各类企业和组织追求的目标。本文旨在探讨负载均衡技术在运维工作中的关键作用,通过深入分析其原理、类型及实际应用案例,揭示如何利用这项技术优化资源分配,提高系统的响应速度和可靠性,确保用户体验的稳定与流畅。无论是面对突如其来的高流量冲击,还是日常的运维管理,负载均衡都展现出了不可或缺的重要性,成为现代IT架构中的基石之一。
32 4
|
10天前
|
关系型数据库 Unix MySQL
MySQL是一种关系型数据库管理系统
MySQL是一种关系型数据库管理系统
26 2
|
13天前
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
34 2
|
23天前
|
运维 监控 安全
高效运维管理:提升系统可靠性的策略与实践
本文将深入探讨高效运维管理的关键策略和实践,旨在帮助运维团队提高系统的可靠性、可用性和稳定性。通过分析常见的运维挑战,提出相应的解决方案,并结合实际案例进行说明,为读者提供一套行之有效的运维管理指南。无论是新手还是经验丰富的运维工程师,都能从中获得有价值的见解和实用技巧。
|
1天前
|
关系型数据库 MySQL Linux
Linux系统绿色安装MySQL 8.0.39
Linux系统绿色安装MySQL 8.0.39
|
19天前
|
运维 监控 负载均衡
高效运维管理:如何通过自动化提升系统可靠性
本文探讨了如何通过自动化提升系统可靠性,包括自动化监控、自动化部署、自动化测试和自动化故障恢复四个方面。通过实际案例展示了自动化在运维中的应用效果,强调了团队建设与培训的重要性以及持续改进与优化的策略。
17 0
|
29天前
|
运维 监控 数据可视化
高效运维的秘密武器:自动化工具链的构建与实践在当今数字化时代,IT系统的复杂性和规模不断增加,使得传统的手动运维方式难以应对日益增长的业务需求。因此,构建一套高效的自动化工具链成为现代运维的重要任务。本文将深入探讨如何通过自动化工具链提升IT运维效率,确保系统稳定运行,并实现快速响应和故障恢复。
随着企业IT架构的不断扩展和复杂化,传统的手动运维已无法满足业务需求。自动化工具链的构建成为解决这一问题的关键。本文介绍了自动化工具链的核心概念、常用工具及其选择依据,并通过实际案例展示了自动化工具链在提升运维效率、减少人为错误、优化资源配置等方面的显著效果。从监控系统到自动化运维平台,再到持续集成/持续部署(CI/CD)的流程,我们将一步步揭示如何成功实施自动化工具链,助力企业实现高效、稳定、可靠的IT运维管理。

热门文章

最新文章